diff options
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  #  ###################################################################################################  | 
