aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaios <naios-dev@live.de>2015-03-24 12:31:52 +0100
committerNaios <naios-dev@live.de>2015-03-24 12:31:52 +0100
commit966282fbed24a0d0cf8cb3e05b1849c3e6a0d1d6 (patch)
treecad979bdbeb4e96335259dda19528ebcc09ac761
parentbf4e71a008d253dc3c3a531e9950d5a415bc60e0 (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
-rw-r--r--src/server/bnetserver/bnetserver.conf.dist11
-rw-r--r--src/server/shared/Updater/DBUpdater.cpp2
-rw-r--r--src/server/shared/Updater/UpdateFetcher.cpp30
-rw-r--r--src/server/shared/Updater/UpdateFetcher.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist11
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
#
###################################################################################################