Bug 7799: Set inactive on any flapping service error 69/53069/4
authorVratko Polak <vrpolak@cisco.com>
Thu, 9 Mar 2017 10:57:26 +0000 (11:57 +0100)
committerTom Pantelis <tpanteli@brocade.com>
Thu, 9 Mar 2017 13:14:36 +0000 (13:14 +0000)
Also updated the Yang model to a corresponding description.

Change-Id: Ia1d4a815ad3e03b35f4daa9a57ddb8ba610d4003
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
opendaylight/md-sal/samples/clustering-test-app/model/src/main/yang/odl-mdsal-lowlevel-control.yang
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/FlappingSingletonService.java

index 4c0871551cec0b5a46d9a94f5eea9e10346dc3f5..5a7f2e12e7d46c96cfaaa3be0413149aff4e5209 100644 (file)
@@ -102,8 +102,8 @@ module odl-mdsal-lowlevel-control {
             If the application is instantiated, it immediatelly un-registers itself.
             When the application instance is closed, it increments flap-count
             and if active flag is set, re-registers the application implementation as a singleton.
-            If either un-registration or re-registration fails, flap-count is set
-            to negative of its previous value (minus one in case of un-registration)
+            If either un-registration or re-registration fails, 'active' flag is unset,
+            flap-count is set to negative of its previous value (minus one in case of un-registration)
             to signal a failure has happened.";
         // No input.
         // No output.
index 21e6acf1c7124ac26da757185f5f4f6fa0c32311..5ca33ad51d63e268ce905a6cb87c44b9fb84dc81 100644 (file)
@@ -56,6 +56,7 @@ public class FlappingSingletonService implements ClusterSingletonService {
                 registration = null;
             } catch (final Exception e) {
                 LOG.warn("There was a problem closing flapping singleton service.", e);
+                setInactive();
                 flapCount = -flapCount;
             }
         });
@@ -71,9 +72,15 @@ public class FlappingSingletonService implements ClusterSingletonService {
             // remove  whole executor shenanigans after it's fixed.
             // Needs to be delayed slightly otherwise it's triggered as well.
             EXECUTOR.schedule(() -> {
-                LOG.debug("Running registration");
-                registration =
-                        singletonServiceProvider.registerClusterSingletonService(this);
+                LOG.debug("Running re-registration");
+                try {
+                    registration =
+                            singletonServiceProvider.registerClusterSingletonService(this);
+                } catch (final Exception e) {
+                    LOG.warn("There was a problem re-registering flapping singleton service.", e);
+                    setInactive();
+                    flapCount = -flapCount - 1;
+                }
 
             }, 200, TimeUnit.MILLISECONDS);
         }