From: Robert Varga Date: Thu, 5 Nov 2015 00:51:55 +0000 (+0100) Subject: Speed up YangStoreService X-Git-Tag: release/beryllium~195 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=a7517a9b9c40dee08cff8be2febaa2d369012e48 Speed up YangStoreService Change-Id: Ibaf972650045b5d85be155f653f7eef36aae6c6e Signed-off-by: Robert Varga --- diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java index 462d67bc00..3149b0877b 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java @@ -65,7 +65,6 @@ public class YangStoreService implements YangStoreContext { private final AtomicReference> refBindingContext = new AtomicReference<>(new SoftReference(null)); - private final SchemaContextProvider schemaContextProvider; private final SchemaSourceProvider sourceProvider; private final ExecutorService notificationExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() { @@ -79,7 +78,6 @@ public class YangStoreService implements YangStoreContext { public YangStoreService(final SchemaContextProvider schemaContextProvider, final SchemaSourceProvider sourceProvider) { - this.schemaContextProvider = schemaContextProvider; this.sourceProvider = sourceProvider; } @@ -90,7 +88,7 @@ public class YangStoreService implements YangStoreContext { while (ret == null) { // We need to be compute a new value // TODO sourceProvider is not a snapshot - ret = new YangStoreSnapshot(schemaContextProvider.getSchemaContext(), refBindingContext.get().get(), sourceProvider); + ret = new YangStoreSnapshot(refBindingContext.get().get(), sourceProvider); if (!ref.compareAndSet(r, new SoftReference<>(ret))) { LOG.debug("Concurrent refresh detected, recomputing snapshot"); diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java index 1c7b33fd84..4be2fa3876 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Set; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.PackageTranslator; @@ -48,25 +49,24 @@ final class YangStoreSnapshot implements YangStoreContext, EnumResolver { private final Map> qNamesToIdentitiesToModuleMXBeanEntries; - private final SchemaContext schemaContext; private final BindingRuntimeContext bindingContextProvider; private final SchemaSourceProvider sourceProvider; - public YangStoreSnapshot(final SchemaContext resolveSchemaContext, - final BindingRuntimeContext bindingContextProvider, + public YangStoreSnapshot(final BindingRuntimeContext bindingContextProvider, final SchemaSourceProvider sourceProvider) { this.bindingContextProvider = bindingContextProvider; this.sourceProvider = sourceProvider; - LOG.trace("Resolved modules:{}", resolveSchemaContext.getModules()); - this.schemaContext = resolveSchemaContext; - // JMX generator + final SchemaContext schemaContext = bindingContextProvider.getSchemaContext(); + LOG.trace("Resolved modules:{}", schemaContext.getModules()); + + // JMX generator Map namespaceToPackageMapping = Maps.newHashMap(); PackageTranslator packageTranslator = new PackageTranslator(namespaceToPackageMapping); Map qNamesToSIEs = new HashMap<>(); Map knownSEITracker = new HashMap<>(); // create SIE structure qNamesToSIEs - for (Module module : resolveSchemaContext.getModules()) { + for (Module module : schemaContext.getModules()) { String packageName = packageTranslator.getPackageName(module); Map namesToSIEntries = ServiceInterfaceEntry .create(module, packageName, knownSEITracker); @@ -89,12 +89,12 @@ final class YangStoreSnapshot implements YangStoreContext, EnumResolver { for (Module module : schemaContext.getModules()) { String packageName = packageTranslator.getPackageName(module); TypeProviderWrapper typeProviderWrapper = new TypeProviderWrapper( - new TypeProviderImpl(resolveSchemaContext)); + new TypeProviderImpl(schemaContext)); QName qName = QName.create(module.getNamespace(), module.getRevision(), module.getName()); Map namesToMBEs = - Collections.unmodifiableMap(ModuleMXBeanEntry.create(module, qNamesToSIEs, resolveSchemaContext, + Collections.unmodifiableMap(ModuleMXBeanEntry.create(module, qNamesToSIEs, schemaContext, typeProviderWrapper, packageName)); moduleMXBeanEntryMap.put(module.getNamespace().toString(), namesToMBEs); @@ -117,8 +117,8 @@ final class YangStoreSnapshot implements YangStoreContext, EnumResolver { @Override public Set getModules() { - final Set modules = Sets.newHashSet(schemaContext.getModules()); - for (final Module module : schemaContext.getModules()) { + final Set modules = Sets.newHashSet(bindingContextProvider.getSchemaContext().getModules()); + for (final Module module : bindingContextProvider.getSchemaContext().getModules()) { modules.addAll(module.getSubmodules()); } return modules; @@ -147,25 +147,21 @@ final class YangStoreSnapshot implements YangStoreContext, EnumResolver { } @Override - public boolean equals(final Object o) { - if (this == o) { + public boolean equals(final Object obj) { + if (this == obj) { return true; } - if (!(o instanceof YangStoreSnapshot)) { - return false; - } - - final YangStoreSnapshot that = (YangStoreSnapshot) o; - if (schemaContext != null ? !schemaContext.equals(that.schemaContext) : that.schemaContext != null) { + if (!(obj instanceof YangStoreSnapshot)) { return false; } - return true; + final YangStoreSnapshot other = (YangStoreSnapshot) obj; + return Objects.equals(bindingContextProvider, other.bindingContextProvider); } @Override public int hashCode() { - return schemaContext != null ? schemaContext.hashCode() : 0; + return Objects.hashCode(bindingContextProvider); } @Override