package org.opendaylight.controller.sal.dom.broker;
import static com.google.common.base.Preconditions.checkState;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-
+import com.google.common.collect.Iterables;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
-
import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaContextProvider;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.util.ListenerRegistry;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
-import org.opendaylight.yangtools.yang.parser.impl.util.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
+import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
private static final Logger LOG = LoggerFactory.getLogger(GlobalBundleScanningSchemaServiceImpl.class);
private final ListenerRegistry<SchemaContextListener> listeners = new ListenerRegistry<>();
- private final URLSchemaContextResolver contextResolver = new URLSchemaContextResolver();
+ private final URLSchemaContextResolver contextResolver = URLSchemaContextResolver.create("global-bundle");
private final BundleScanner scanner = new BundleScanner();
private final BundleContext context;
public void start() {
checkState(context != null);
+ LOG.debug("start() starting");
listenerTracker = new ServiceTracker<>(context, SchemaContextListener.class, GlobalBundleScanningSchemaServiceImpl.this);
- bundleTracker = new BundleTracker<>(context, BundleEvent.RESOLVED | BundleEvent.UNRESOLVED, scanner);
+ bundleTracker = new BundleTracker<>(context, Bundle.RESOLVED | Bundle.STARTING |
+ Bundle.STOPPING | Bundle.ACTIVE, scanner);
bundleTracker.open();
+
+ LOG.debug("BundleTracker.open() complete");
+
listenerTracker.open();
starting = false;
tryToUpdateSchemaContext();
+
+ LOG.debug("start() complete");
}
@Override
}
if (!urls.isEmpty()) {
- LOG.debug("Loaded {} new URLs, rebuilding schema context", urls.size());
+ LOG.debug("Loaded {} new URLs from bundle {}, attempting to rebuild schema context",
+ urls.size(), bundle.getSymbolicName());
tryToUpdateSchemaContext();
}
@Override
public void modifiedBundle(final Bundle bundle, final BundleEvent event, final Iterable<Registration> object) {
- LOG.debug("Modified bundle {} {} {}", bundle, event, object);
}
/**
LOG.warn("Failed do unregister URL {}, proceeding", url, e);
}
}
- tryToUpdateSchemaContext();
+
+ int numUrls = Iterables.size(urls);
+ if(numUrls > 0 ) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("removedBundle: {}, state: {}, # urls: {}", bundle.getSymbolicName(), bundle.getState(), numUrls);
+ }
+
+ tryToUpdateSchemaContext();
+ }
}
}
if (starting) {
return;
}
- Optional<SchemaContext> schema = contextResolver.tryToUpdateSchemaContext();
+ Optional<SchemaContext> schema = contextResolver.getSchemaContext();
if(schema.isPresent()) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("Got new SchemaContext: # of modules {}", schema.get().getAllModuleIdentifiers().size());
+ }
+
updateContext(schema.get());
}
}