]> granicus.if.org Git - icinga2/commitdiff
cluster: Ignore old messages.
authorGunnar Beutner <gunnar.beutner@netways.de>
Fri, 6 Sep 2013 12:05:50 +0000 (14:05 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Fri, 6 Sep 2013 12:05:50 +0000 (14:05 +0200)
components/cluster/clustercomponent.cpp

index 0d303d643d7f841210ea5a1ed61295594b9a6668..ebc18124d9ef071f5b4a001a1f6c2b5bc50083a6 100644 (file)
@@ -769,20 +769,28 @@ void ClusterComponent::AcknowledgementClearedHandler(const Service::Ptr& service
 
 void ClusterComponent::MessageHandler(const Endpoint::Ptr& sender, const Dictionary::Ptr& message)
 {
-       if (message->Contains("ts") && sender->GetRemoteLogPosition() + 10 < message->Get("ts")) {
-               Dictionary::Ptr lparams = boost::make_shared<Dictionary>();
-               lparams->Set("log_position", message->Get("ts"));
+       if (message->Contains("ts")) {
+               double ts = message->Get("ts");
 
-               Dictionary::Ptr lmessage = boost::make_shared<Dictionary>();
-               lmessage->Set("jsonrpc", "2.0");
-               lmessage->Set("method", "cluster::SetLogPosition");
-               lmessage->Set("params", lparams);
+               /* ignore old messages */
+               if (ts < sender->GetRemoteLogPosition())
+                       return;
+
+               if (sender->GetRemoteLogPosition() + 10 < ts) {
+                       Dictionary::Ptr lparams = boost::make_shared<Dictionary>();
+                       lparams->Set("log_position", message->Get("ts"));
 
-               sender->SendMessage(lmessage);
+                       Dictionary::Ptr lmessage = boost::make_shared<Dictionary>();
+                       lmessage->Set("jsonrpc", "2.0");
+                       lmessage->Set("method", "cluster::SetLogPosition");
+                       lmessage->Set("params", lparams);
 
-               sender->SetRemoteLogPosition(message->Get("ts"));
+                       sender->SendMessage(lmessage);
 
-               Log(LogInformation, "cluster", "Acknowledging log position for identity '" + sender->GetName() + "': " + Utility::FormatDateTime("%Y/%m/%d %H:%M:%S", message->Get("ts")));
+                       sender->SetRemoteLogPosition(message->Get("ts"));
+
+                       Log(LogInformation, "cluster", "Acknowledging log position for identity '" + sender->GetName() + "': " + Utility::FormatDateTime("%Y/%m/%d %H:%M:%S", message->Get("ts")));
+               }
        }
 
        RelayMessage(sender, message, true);