Speed up OsgiBundleScanningSchemaService close 95/56195/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 27 Apr 2017 16:20:53 +0000 (18:20 +0200)
committerRobert Varga <nite@hq.sk>
Thu, 27 Apr 2017 18:46:21 +0000 (18:46 +0000)
On close, the OsgiBundleScanningSchemaService closes the
BundleTracker which untracks all the bundles and notifies the listener
of removed bundles. This results in a call to tryToUpdateSchemaContext
which causes the remaining yang files to be re-parsed to build a new
SchemaContext. To prevent this extra processing on shutdown, I added
a "stopping" flag to elide tryToUpdateSchemaContext the same we do
with the "starting" flag.

Change-Id: I9f7c05277df9bf1ffaec1c699453020312aab203
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit b0a11d8bb72e2b74f64ca1dbd6d981cf3a70c8ea)

dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/OsgiBundleScanningSchemaService.java

index 0e544a84017efef9cdc13bee70ea19653bde66bc..bc057e74f4d5a8067560c8f57e7c236ecd5aa890 100644 (file)
@@ -50,6 +50,7 @@ public class OsgiBundleScanningSchemaService implements SchemaContextProvider, D
     private ServiceTracker<SchemaContextListener, SchemaContextListener> listenerTracker;
     private BundleTracker<Iterable<Registration>> bundleTracker;
     private boolean starting = true;
+    private volatile boolean stopping;
     private static OsgiBundleScanningSchemaService instance;
 
     private OsgiBundleScanningSchemaService(final BundleContext context) {
@@ -128,6 +129,7 @@ public class OsgiBundleScanningSchemaService implements SchemaContextProvider, D
 
     @Override
     public void close() {
+        stopping = true;
         if (bundleTracker != null) {
             bundleTracker.close();
         }
@@ -241,7 +243,7 @@ public class OsgiBundleScanningSchemaService implements SchemaContextProvider, D
     }
 
     public synchronized void tryToUpdateSchemaContext() {
-        if (starting) {
+        if (starting || stopping) {
             return;
         }
         final Optional<SchemaContext> schema = contextResolver.getSchemaContext();