Harden DOMRpcRouter shutdown 88/74188/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 18 Jul 2018 13:17:09 +0000 (15:17 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 18 Jul 2018 16:57:55 +0000 (18:57 +0200)
Use AbstractRegistration to get idempotenence. Also remove listener
register prior to shutting down the listener notifier.

JIRA: MDSAL-283
Change-Id: I948510a080c2540d309f81fa8a42591341db595e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java

index fe3acf8a8fd8a140f58de7170d1a8f9bea4e9c6c..e725192e39f112a70902888b587fb0f65dd0cf76 100644 (file)
@@ -42,6 +42,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.spi.AbstractDOMRpcImplementationRegistration;
 import org.opendaylight.yangtools.concepts.AbstractListenerRegistration;
+import org.opendaylight.yangtools.concepts.AbstractRegistration;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -49,7 +50,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
-public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcProviderService, SchemaContextListener {
+public final class DOMRpcRouter extends AbstractRegistration implements DOMRpcService, DOMRpcProviderService,
+        SchemaContextListener {
     private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat(
             "DOMRpcRouter-listener-%s").setDaemon(true).build();
 
@@ -142,13 +144,14 @@ public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcP
         routingTable = newTable;
     }
 
-    @Override
-    public void close() {
-        listenerNotifier.shutdown();
 
+    @Override
+    protected void removeRegistration() {
         if (listenerRegistration != null) {
             listenerRegistration.close();
+            listenerRegistration = null;
         }
+        listenerNotifier.shutdown();
     }
 
     @VisibleForTesting