diff options
author | Naios <naios-dev@live.de> | 2015-03-24 12:31:52 +0100 |
---|---|---|
committer | Naios <naios-dev@live.de> | 2015-03-24 12:31:52 +0100 |
commit | 966282fbed24a0d0cf8cb3e05b1849c3e6a0d1d6 (patch) | |
tree | cad979bdbeb4e96335259dda19528ebcc09ac761 /src | |
parent | bf4e71a008d253dc3c3a531e9950d5a415bc60e0 (diff) |
Core/DBUpdater: Add the possibility to limit the remove of orphaned entries.
* This will save you from loosing your update history if you use a repository in bad state (revision or branch) by mistake.
* Also turned 1 error message into a warning
Diffstat (limited to 'src')
-rw-r--r-- | src/server/bnetserver/bnetserver.conf.dist | 11 | ||||
-rw-r--r-- | src/server/shared/Updater/DBUpdater.cpp | 2 | ||||
-rw-r--r-- | src/server/shared/Updater/UpdateFetcher.cpp | 30 | ||||
-rw-r--r-- | src/server/shared/Updater/UpdateFetcher.h | 2 | ||||
-rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 11 |
5 files changed, 38 insertions, 18 deletions
diff --git a/src/server/bnetserver/bnetserver.conf.dist b/src/server/bnetserver/bnetserver.conf.dist index 804ce51ef2a..9b133d36e4f 100644 --- a/src/server/bnetserver/bnetserver.conf.dist +++ b/src/server/bnetserver/bnetserver.conf.dist @@ -234,13 +234,16 @@ Updates.ArchivedRedundancy = 0 Updates.AllowRehash = 1 # -# Updates.CleanDeadRef -# Description: Cleans dead/ orphaned references that occure if a update was deleted or renamed and edited. +# Updates.CleanDeadRefMaxCount +# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step. +# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value. +# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision). # Disable this if you want to know if the database is in a possible "dirty state". -# Default: 1 - (Enabled) +# Default: 3 - (Enabled) # 0 - (Disabled) +# -1 - (Enabled - unlimited) -Updates.CleanDeadRef = 1 +Updates.CleanDeadRefMaxCount = 3 # ################################################################################################### diff --git a/src/server/shared/Updater/DBUpdater.cpp b/src/server/shared/Updater/DBUpdater.cpp index 859c697168a..10119e08deb 100644 --- a/src/server/shared/Updater/DBUpdater.cpp +++ b/src/server/shared/Updater/DBUpdater.cpp @@ -276,7 +276,7 @@ bool DBUpdater<T>::Update(DatabaseWorkerPool<T>& pool) sConfigMgr->GetBoolDefault("Updates.Redundancy", true), sConfigMgr->GetBoolDefault("Updates.AllowRehash", true), sConfigMgr->GetBoolDefault("Updates.ArchivedRedundancy", false), - sConfigMgr->GetBoolDefault("Updates.CleanDeadRef", true)); + sConfigMgr->GetIntDefault("Updates.CleanDeadRefMaxCount", 3)); if (!count) TC_LOG_INFO("sql.updates", ">> %s database is up-to-date!", DBUpdater<T>::GetTableName().c_str()); diff --git a/src/server/shared/Updater/UpdateFetcher.cpp b/src/server/shared/Updater/UpdateFetcher.cpp index 63e820c3de5..3958815d5d6 100644 --- a/src/server/shared/Updater/UpdateFetcher.cpp +++ b/src/server/shared/Updater/UpdateFetcher.cpp @@ -101,7 +101,7 @@ UpdateFetcher::DirectoryStorage UpdateFetcher::ReceiveIncludedDirectories() cons if (!is_directory(p)) { - TC_LOG_ERROR("sql.updates", "DBUpdater: Given update include directory \"%s\" isn't existing, skipped!", p.generic_string().c_str()); + TC_LOG_WARN("sql.updates", "DBUpdater: Given update include directory \"%s\" isn't existing, skipped!", p.generic_string().c_str()); continue; } @@ -154,7 +154,7 @@ UpdateFetcher::SQLUpdate UpdateFetcher::ReadSQLUpdate(boost::filesystem::path co return update; } -uint32 UpdateFetcher::Update(bool const redundancyChecks, bool const allowRehash, bool const archivedRedundancy, bool const cleanDeadReferences) const +uint32 UpdateFetcher::Update(bool const redundancyChecks, bool const allowRehash, bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const { LocaleFileStorage const available = GetFileList(); AppliedFileStorage applied = ReceiveAppliedFiles(); @@ -291,14 +291,28 @@ uint32 UpdateFetcher::Update(bool const redundancyChecks, bool const allowRehash ++importedUpdates; } - for (auto const& entry : applied) + // Cleanup up orphaned entries if enabled + if (!applied.empty()) { - TC_LOG_WARN("sql.updates", ">> File \'%s\' was applied to the database but is missing in" \ - " your update directory now!%s", entry.first.c_str(), cleanDeadReferences ? " Deleting orphaned entry..." : ""); - } + bool const doCleanup = (cleanDeadReferencesMaxCount == -1) || (applied.size() <= cleanDeadReferencesMaxCount); + + for (auto const& entry : applied) + { + TC_LOG_WARN("sql.updates", ">> File \'%s\' was applied to the database but is missing in" \ + " your update directory now!", entry.first.c_str()); + + if (doCleanup) + TC_LOG_INFO("sql.updates", "Deleting orphaned entry \'%s\'...", entry.first.c_str()); + } - if (cleanDeadReferences) - CleanUp(applied); + if (doCleanup) + CleanUp(applied); + else + { + TC_LOG_ERROR("sql.updates", "Cleanup is disabled! There are %u dirty files that were applied to your database " \ + "but are now missing in your source directory!", applied.size()); + } + } return importedUpdates; } diff --git a/src/server/shared/Updater/UpdateFetcher.h b/src/server/shared/Updater/UpdateFetcher.h index 48a94444aa6..fa142547873 100644 --- a/src/server/shared/Updater/UpdateFetcher.h +++ b/src/server/shared/Updater/UpdateFetcher.h @@ -36,7 +36,7 @@ public: std::function<QueryResult(std::string const&)> const& retrieve); uint32 Update(bool const redundancyChecks, bool const allowRehash, - bool const archivedRedundancy, bool const cleanDeadReferences) const; + bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const; private: enum UpdateMode diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index c1cdc4a7517..cc04bf99908 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1203,13 +1203,16 @@ Updates.ArchivedRedundancy = 0 Updates.AllowRehash = 1 # -# Updates.CleanDeadRef -# Description: Cleans dead/ orphaned references that occure if a update was deleted or renamed and edited. +# Updates.CleanDeadRefMaxCount +# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step. +# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value. +# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision). # Disable this if you want to know if the database is in a possible "dirty state". -# Default: 1 - (Enabled) +# Default: 3 - (Enabled) # 0 - (Disabled) +# -1 - (Enabled - unlimited) -Updates.CleanDeadRef = 1 +Updates.CleanDeadRefMaxCount = 3 # ################################################################################################### |