]> granicus.if.org Git - icinga2/commitdiff
Update objects.cache when config is changed
authorGunnar Beutner <gunnar@beutner.name>
Tue, 22 Sep 2015 09:56:27 +0000 (11:56 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 22 Sep 2015 09:56:27 +0000 (11:56 +0200)
fixes #9098

lib/compat/statusdatawriter.cpp
lib/compat/statusdatawriter.hpp

index af4b8a24c71028b8e64765700cf49ac6f2eb6758..0967261018444201980ff06d06563da95411ffae 100644 (file)
@@ -74,13 +74,15 @@ void StatusDataWriter::Start(void)
 {
        ObjectImpl<StatusDataWriter>::Start();
 
+       m_ObjectsCacheOutdated = true;
+
        m_StatusTimer = new Timer();
        m_StatusTimer->SetInterval(GetUpdateInterval());
        m_StatusTimer->OnTimerExpired.connect(boost::bind(&StatusDataWriter::StatusTimerHandler, this));
        m_StatusTimer->Start();
        m_StatusTimer->Reschedule(0);
 
-       Utility::QueueAsyncCallback(boost::bind(&StatusDataWriter::UpdateObjectsCache, this));
+       ConfigObject::OnVersionChanged.connect(boost::bind(&StatusDataWriter::VersionChangedHandler, this));
 }
 
 void StatusDataWriter::DumpComments(std::ostream& fp, const Checkable::Ptr& checkable)
@@ -784,6 +786,11 @@ void StatusDataWriter::UpdateObjectsCache(void)
  */
 void StatusDataWriter::StatusTimerHandler(void)
 {
+       if (m_ObjectsCacheOutdated) {
+               UpdateObjectsCache();
+               m_ObjectsCacheOutdated = false;
+       }
+
        double start = Utility::GetTime();
 
        String statuspath = GetStatusPath();
@@ -859,3 +866,8 @@ void StatusDataWriter::StatusTimerHandler(void)
        Log(LogNotice, "StatusDataWriter")
            << "Writing status.dat file took " << Utility::FormatDuration(Utility::GetTime() - start);
 }
+
+void StatusDataWriter::VersionChangedHandler(void)
+{
+       m_ObjectsCacheOutdated = true;
+}
index a3c743fcebb9d1a3455c288494d18a404b9bcdee..ab1dab0c89a54ee8045ca67fc316ee16019d1326 100644 (file)
@@ -51,6 +51,7 @@ protected:
 
 private:
        Timer::Ptr m_StatusTimer;
+       bool m_ObjectsCacheOutdated;
 
        void DumpCommand(std::ostream& fp, const Command::Ptr& command);
        void DumpTimePeriod(std::ostream& fp, const TimePeriod::Ptr& tp);
@@ -99,6 +100,7 @@ private:
 
        void UpdateObjectsCache(void);
        void StatusTimerHandler(void);
+       void VersionChangedHandler(void);
 };
 
 }