]> granicus.if.org Git - icinga2/commitdiff
Prevent object deletion on shutdown when checking !IsActive()
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 15 Sep 2015 15:56:34 +0000 (17:56 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 17 Sep 2015 12:20:44 +0000 (14:20 +0200)
This is fairly ugly and sets an extension for the ConfigObjectUtility
delete handler to signal the OnActiveChanged handler inside the cluster
configsync to send a delete event to the other nodes.

refs #9927

lib/remote/apilistener-configsync.cpp
lib/remote/configobjectutility.cpp

index a0e992971918561c81b747eeda322bbdbc88d9fa..3a3fed389e6289863c83d3b7adaa0a4f94477bf4 100644 (file)
@@ -53,7 +53,7 @@ void ApiListener::ConfigUpdateObjectHandler(const ConfigObject::Ptr& object, con
        if (object->IsActive()) {
                /* Sync object config */
                listener->UpdateConfigObject(object, cookie);
-       } else {
+       } else if (!object->IsActive() && object->GetExtension("ConfigObjectDeleted")) {
                /* Delete object */
                listener->DeleteConfigObject(object, cookie);
        }
index e59868a74edbcde8e47ae69d03cb61adb17182b2..77106cc8d765373700a89bd8099b9a6c18420d39 100644 (file)
@@ -154,6 +154,9 @@ bool ConfigObjectUtility::DeleteObjectHelper(const ConfigObject::Ptr& object, bo
        ConfigItem::Ptr item = ConfigItem::GetByTypeAndName(type->GetName(), object->GetName());
 
        try {
+               /* mark this object for cluster delete event */
+               object->SetExtension("ConfigObjectDeleted", true);
+               /* triggers signal for DB IDO and other interfaces */
                object->Deactivate();
 
                if (item)