X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2FConfigSubsystemFacade.java;fp=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2FConfigSubsystemFacade.java;h=c535b2184c8b10759f46d18da4e4d64c298186e5;hp=2b4e63364671bf987ddf3287679525e757be4908;hb=d266f4384d4850af9049d7cddd2bbac8f75ba61e;hpb=b197d75e803beac663033287d769dce62c108490 diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java index 2b4e633646..c535b2184c 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2015, 2017 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -10,14 +10,17 @@ package org.opendaylight.controller.config.facade.xml; import com.google.common.base.Optional; import com.google.common.collect.Multimap; + import java.io.Closeable; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; + import javax.management.InstanceNotFoundException; import javax.management.ObjectName; + import org.opendaylight.controller.config.api.ConflictingVersionException; import org.opendaylight.controller.config.api.ValidationException; import org.opendaylight.controller.config.api.jmx.CommitStatus; @@ -58,7 +61,8 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; /** - * Config subsystem facade for xml format + * Config subsystem facade for xml format. + * *

* TODO extract generic interface for config subsystem facades */ @@ -71,7 +75,10 @@ public class ConfigSubsystemFacade implements Closeable { private final ConfigRegistryClient configRegistryClientNoNotifications; private final RpcFacade rpcFacade; - public ConfigSubsystemFacade(final ConfigRegistryClient configRegistryClient, final ConfigRegistryClient configRegistryClientNoNotifications, final YangStoreService yangStoreService, final String id) { + public ConfigSubsystemFacade(final ConfigRegistryClient configRegistryClient, + final ConfigRegistryClient configRegistryClientNoNotifications, + final YangStoreService yangStoreService, + final String id) { this.configRegistryClient = configRegistryClient; this.configRegistryClientNoNotifications = configRegistryClientNoNotifications; this.yangStoreService = yangStoreService; @@ -79,7 +86,10 @@ public class ConfigSubsystemFacade implements Closeable { rpcFacade = new RpcFacade(yangStoreService, configRegistryClient); } - public ConfigSubsystemFacade(final ConfigRegistryClient configRegistryClient, final ConfigRegistryClient configRegistryClientNoNotifications, final YangStoreService yangStoreService, final TransactionProvider txProvider) { + public ConfigSubsystemFacade(final ConfigRegistryClient configRegistryClient, + final ConfigRegistryClient configRegistryClientNoNotifications, + final YangStoreService yangStoreService, + final TransactionProvider txProvider) { this.configRegistryClient = configRegistryClient; this.configRegistryClientNoNotifications = configRegistryClientNoNotifications; this.yangStoreService = yangStoreService; @@ -87,25 +97,30 @@ public class ConfigSubsystemFacade implements Closeable { rpcFacade = new RpcFacade(yangStoreService, configRegistryClient); } - public Element getConfiguration(final Document document, final Datastore source, final Optional maybeNamespace) { + public Element getConfiguration(final Document document, final Datastore source, + final Optional maybeNamespace) { final ConfigTransactionClient registryClient; - // Read current state from a transaction, if running is source, then start new transaction just for reading + // Read current state from a transaction, if running is source, then start new + // transaction just for reading // in case of candidate, get current transaction representing candidate if (source == Datastore.running) { final ObjectName readTx = transactionProvider.getOrCreateReadTransaction(); registryClient = configRegistryClient.getConfigTransactionClient(readTx); } else { - registryClient = configRegistryClient.getConfigTransactionClient(transactionProvider.getOrCreateTransaction()); + registryClient = configRegistryClient + .getConfigTransactionClient(transactionProvider.getOrCreateTransaction()); } try { - Element dataElement = XmlUtil.createElement(document, XmlMappingConstants.DATA_KEY, Optional.absent()); + Element dataElement = XmlUtil.createElement(document, XmlMappingConstants.DATA_KEY, + Optional.absent()); final Set instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider) .queryInstances(configRegistryClient); - final Config configMapping = - new Config(transformMbeToModuleConfigs(yangStoreService.getModuleMXBeanEntryMap()), yangStoreService.getEnumResolver()); + final Config configMapping = new Config( + transformMbeToModuleConfigs(yangStoreService.getModuleMXBeanEntryMap()), + yangStoreService.getEnumResolver()); ServiceRegistryWrapper serviceTracker = new ServiceRegistryWrapper(registryClient); dataElement = configMapping.toXml(instances, maybeNamespace, document, dataElement, serviceTracker); @@ -118,7 +133,8 @@ public class ConfigSubsystemFacade implements Closeable { } } - public void executeConfigExecution(final ConfigExecution configExecution) throws DocumentedException, ValidationException { + public void executeConfigExecution(final ConfigExecution configExecution) + throws DocumentedException, ValidationException { if (configExecution.shouldTest()) { executeTests(configExecution); } @@ -128,13 +144,15 @@ public class ConfigSubsystemFacade implements Closeable { } } - public CommitStatus commitTransaction() throws DocumentedException, ValidationException, ConflictingVersionException { + public CommitStatus commitTransaction() + throws DocumentedException, ValidationException, ConflictingVersionException { final CommitStatus status = this.transactionProvider.commitTransaction(); LOG.trace("Transaction committed successfully: {}", status); return status; } - public CommitStatus commitSilentTransaction() throws DocumentedException, ValidationException, ConflictingVersionException { + public CommitStatus commitSilentTransaction() + throws DocumentedException, ValidationException, ConflictingVersionException { final CommitStatus status = this.transactionProvider.commitTransaction(configRegistryClientNoNotifications); LOG.trace("Transaction committed successfully: {}", status); return status; @@ -142,15 +160,18 @@ public class ConfigSubsystemFacade implements Closeable { private void executeSet(final ConfigExecution configExecution) throws DocumentedException { set(configExecution); - LOG.debug("Set phase for {} operation successful, element: ", configExecution.getDefaultStrategy(), configExecution.getConfigElement()); + LOG.debug("Set phase for {} operation successful, element: ", configExecution.getDefaultStrategy(), + configExecution.getConfigElement()); } private void executeTests(final ConfigExecution configExecution) throws DocumentedException, ValidationException { test(configExecution, configExecution.getDefaultStrategy()); - LOG.debug("Test phase for {} operation successful, element: ", configExecution.getDefaultStrategy(), configExecution.getConfigElement()); + LOG.debug("Test phase for {} operation successful, element: ", configExecution.getDefaultStrategy(), + configExecution.getConfigElement()); } - private void test(final ConfigExecution execution, final EditStrategyType editStrategyType) throws ValidationException, DocumentedException { + private void test(final ConfigExecution execution, final EditStrategyType editStrategyType) + throws ValidationException, DocumentedException { ObjectName taON = transactionProvider.getTestTransaction(); try { // default strategy = replace wipes config @@ -169,31 +190,33 @@ public class ConfigSubsystemFacade implements Closeable { } } - private void set(final ConfigExecution ConfigExecution) throws DocumentedException { + private void set(final ConfigExecution configExecution) throws DocumentedException { ObjectName taON = transactionProvider.getOrCreateTransaction(); // default strategy = replace wipes config - if (ConfigExecution.getDefaultStrategy() == EditStrategyType.replace) { + if (configExecution.getDefaultStrategy() == EditStrategyType.replace) { transactionProvider.wipeTransaction(); } ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(taON); - handleMisssingInstancesOnTransaction(ta, ConfigExecution); - setServicesOnTransaction(ta, ConfigExecution); - setOnTransaction(ta, ConfigExecution); + handleMisssingInstancesOnTransaction(ta, configExecution); + setServicesOnTransaction(ta, configExecution); + setOnTransaction(ta, configExecution); } - private void setServicesOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) throws DocumentedException { - + private void setServicesOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) + throws DocumentedException { Services services = execution.getServices(); - Map>> namespaceToServiceNameToRefNameToInstance = services - .getNamespaceToServiceNameToRefNameToInstance(); - - for (Map.Entry>> namespaceToServiceToRefEntry : namespaceToServiceNameToRefNameToInstance.entrySet()) { - for (Map.Entry> serviceToRefEntry : namespaceToServiceToRefEntry.getValue().entrySet()) { + Map>> namespaceToServiceNameToRefNameToInstance = + services.getNamespaceToServiceNameToRefNameToInstance(); + for (Map.Entry>> + namespaceToServiceToRefEntry : namespaceToServiceNameToRefNameToInstance + .entrySet()) { + for (Map.Entry> serviceToRefEntry + : namespaceToServiceToRefEntry.getValue().entrySet()) { String qnameOfService = getQname(ta, namespaceToServiceToRefEntry.getKey(), serviceToRefEntry.getKey()); Map refNameToInstance = serviceToRefEntry.getValue(); @@ -202,17 +225,19 @@ public class ConfigSubsystemFacade implements Closeable { try { if (Services.ServiceInstance.EMPTY_SERVICE_INSTANCE == refNameToServiceEntry.getValue()) { ta.removeServiceReference(qnameOfService, refNameToServiceEntry.getKey()); - LOG.debug("Removing service {} with name {}", qnameOfService, refNameToServiceEntry.getKey()); + LOG.debug("Removing service {} with name {}", qnameOfService, + refNameToServiceEntry.getKey()); } else { - ObjectName saved = ta.saveServiceReference(qnameOfService, refNameToServiceEntry.getKey(), on); + ObjectName saved = ta.saveServiceReference(qnameOfService, refNameToServiceEntry.getKey(), + on); LOG.debug("Saving service {} with on {} under name {} with service on {}", qnameOfService, on, refNameToServiceEntry.getKey(), saved); } } catch (final InstanceNotFoundException e) { - throw new DocumentedException(String.format("Unable to edit ref name " + refNameToServiceEntry.getKey() + " for instance " + on, e), - ErrorType.APPLICATION, - ErrorTag.OPERATION_FAILED, - ErrorSeverity.ERROR); + throw new DocumentedException( + String.format("Unable to edit ref name " + refNameToServiceEntry.getKey() + + " for instance " + on, e), + ErrorType.APPLICATION, ErrorTag.OPERATION_FAILED, ErrorSeverity.ERROR); } } } @@ -223,9 +248,11 @@ public class ConfigSubsystemFacade implements Closeable { return ta.getServiceInterfaceName(namespace, serviceName); } - private void setOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) throws DocumentedException { + private void setOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) + throws DocumentedException { - for (Multimap modulesToResolved : execution.getResolvedXmlElements(ta).values()) { + for (Multimap modulesToResolved : execution.getResolvedXmlElements(ta) + .values()) { for (Map.Entry moduleToResolved : modulesToResolved.entries()) { String moduleName = moduleToResolved.getKey(); @@ -235,29 +262,33 @@ public class ConfigSubsystemFacade implements Closeable { InstanceConfigElementResolved ice = moduleElementResolved.getInstanceConfigElementResolved(); EditConfigStrategy strategy = ice.getEditStrategy(); - strategy.executeConfiguration(moduleName, instanceName, ice.getConfiguration(), ta, execution.getServiceRegistryWrapper(ta)); + strategy.executeConfiguration(moduleName, instanceName, ice.getConfiguration(), ta, + execution.getServiceRegistryWrapper(ta)); } } } - private void handleMisssingInstancesOnTransaction(final ConfigTransactionClient ta, - final ConfigExecution execution) throws DocumentedException { + private void handleMisssingInstancesOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) + throws DocumentedException { - for (Multimap modulesToResolved : execution.getModulesDefinition(ta).values()) { + for (Multimap modulesToResolved : execution.getModulesDefinition(ta) + .values()) { for (Map.Entry moduleToResolved : modulesToResolved.entries()) { String moduleName = moduleToResolved.getKey(); ModuleElementDefinition moduleElementDefinition = moduleToResolved.getValue(); EditConfigStrategy strategy = moduleElementDefinition.getEditStrategy(); - strategy.executeConfiguration(moduleName, moduleElementDefinition.getInstanceName(), null, ta, execution.getServiceRegistryWrapper(ta)); + strategy.executeConfiguration(moduleName, moduleElementDefinition.getInstanceName(), null, ta, + execution.getServiceRegistryWrapper(ta)); } } } public Config getConfigMapping() { final YangStoreContext snapshot = yangStoreService.getCurrentSnapshot(); - Map> factories = transformMbeToModuleConfigs(snapshot.getModuleMXBeanEntryMap()); + Map> factories = transformMbeToModuleConfigs( + snapshot.getModuleMXBeanEntryMap()); Map> identitiesMap = transformIdentities(snapshot.getModules()); return new Config(factories, identitiesMap, snapshot.getEnumResolver()); } @@ -266,13 +297,13 @@ public class ConfigSubsystemFacade implements Closeable { Map> mappedIds = new HashMap<>(); for (Module module : modules) { String namespace = module.getNamespace().toString(); - Map revisionsByNamespace = - mappedIds.computeIfAbsent(namespace, k -> new HashMap<>()); + Map revisionsByNamespace = mappedIds.computeIfAbsent(namespace, + k -> new HashMap<>()); Date revision = module.getRevision(); - IdentityMapping identityMapping = - revisionsByNamespace.computeIfAbsent(revision, k -> new IdentityMapping()); + IdentityMapping identityMapping = revisionsByNamespace.computeIfAbsent(revision, + k -> new IdentityMapping()); for (IdentitySchemaNode identitySchemaNode : module.getIdentities()) { identityMapping.addIdSchemaNode(identitySchemaNode); @@ -284,31 +315,32 @@ public class ConfigSubsystemFacade implements Closeable { } public Map> transformMbeToModuleConfigs( + Map> transformMbeToModuleConfigs( final Map> mBeanEntries) { - return transformMbeToModuleConfigs(configRegistryClient, mBeanEntries); + Map> mbeanentries) { + return transformMbeToModuleConfigs(configRegistryClient, mbeanentries); } public Map> transformMbeToModuleConfigs( + Map> transformMbeToModuleConfigs( final BeanReader reader, - final Map> mBeanEntries) { - + final Map> mbeanentries) { Map> namespaceToModuleNameToModuleConfig = new HashMap<>(); - for (Map.Entry> namespaceToModuleToMbe : mBeanEntries.entrySet()) { + for (Map.Entry> namespaceToModuleToMbe : mbeanentries.entrySet()) { for (Map.Entry moduleNameToMbe : namespaceToModuleToMbe.getValue().entrySet()) { String moduleName = moduleNameToMbe.getKey(); ModuleMXBeanEntry moduleMXBeanEntry = moduleNameToMbe.getValue(); - ModuleConfig moduleConfig = new ModuleConfig(moduleName, - new InstanceConfig(reader, moduleMXBeanEntry.getAttributes(), moduleMXBeanEntry.getNullableDummyContainerName())); + ModuleConfig moduleConfig = new ModuleConfig(moduleName, new InstanceConfig(reader, + moduleMXBeanEntry.getAttributes(), moduleMXBeanEntry.getNullableDummyContainerName())); - Map moduleNameToModuleConfig = - namespaceToModuleNameToModuleConfig.computeIfAbsent(namespaceToModuleToMbe.getKey(), - k -> new HashMap<>()); + Map moduleNameToModuleConfig = namespaceToModuleNameToModuleConfig + .computeIfAbsent(namespaceToModuleToMbe.getKey(), k -> new HashMap<>()); moduleNameToModuleConfig.put(moduleName, moduleConfig); } @@ -317,15 +349,18 @@ public class ConfigSubsystemFacade implements Closeable { return namespaceToModuleNameToModuleConfig; } - public ConfigExecution getConfigExecution(final Config configMapping, final Element xmlToBePersisted) throws DocumentedException { - return new ConfigExecution(configMapping, XmlElement.fromDomElement(xmlToBePersisted), TestOption.testThenSet, EditStrategyType.getDefaultStrategy()); + public ConfigExecution getConfigExecution(final Config configMapping, final Element xmlToBePersisted) + throws DocumentedException { + return new ConfigExecution(configMapping, XmlElement.fromDomElement(xmlToBePersisted), TestOption.testThenSet, + EditStrategyType.getDefaultStrategy()); } - private Map> createModuleRuntimes(final ConfigRegistryClient configRegistryClient, - final Map> mBeanEntries) { + private Map> createModuleRuntimes( + final ConfigRegistryClient configRegistryClient, + final Map> mbeanentries) { Map> retVal = new HashMap<>(); - for (Map.Entry> namespaceToModuleEntry : mBeanEntries.entrySet()) { + for (Map.Entry> namespaceToModuleEntry : mbeanentries.entrySet()) { Map innerMap = new HashMap<>(); Map entriesFromNamespace = namespaceToModuleEntry.getValue(); @@ -336,7 +371,8 @@ public class ConfigSubsystemFacade implements Closeable { Map cache = new HashMap<>(); RuntimeBeanEntry root = null; for (RuntimeBeanEntry rbe : mbe.getRuntimeBeans()) { - cache.put(rbe, new InstanceConfig(configRegistryClient, rbe.getYangPropertiesToTypesMap(), mbe.getNullableDummyContainerName())); + cache.put(rbe, new InstanceConfig(configRegistryClient, rbe.getYangPropertiesToTypesMap(), + mbe.getNullableDummyContainerName())); if (rbe.isRoot()) { root = rbe; } @@ -356,7 +392,8 @@ public class ConfigSubsystemFacade implements Closeable { return retVal; } - private InstanceRuntime createInstanceRuntime(final RuntimeBeanEntry root, final Map cache) { + private InstanceRuntime createInstanceRuntime(final RuntimeBeanEntry root, + final Map cache) { Map children = new HashMap<>(); for (RuntimeBeanEntry child : root.getChildren()) { children.put(child.getJavaNamePrefix(), createInstanceRuntime(child, cache)); @@ -378,10 +415,12 @@ public class ConfigSubsystemFacade implements Closeable { final ConfigTransactionClient txClient = configRegistryClient.getConfigTransactionClient(testTransaction); try { - // Runtime beans are not parts of transactions and have to be queried against the central registry + // Runtime beans are not parts of transactions and have to be queried against + // the central registry final Set runtimeBeans = configRegistryClient.lookupRuntimeBeans(); - final Set configBeans = Datastore.getInstanceQueryStrategy(Datastore.running, transactionProvider) + final Set configBeans = Datastore + .getInstanceQueryStrategy(Datastore.running, transactionProvider) .queryInstances(configRegistryClient); final Map> moduleRuntimes = createModuleRuntimes(configRegistryClient, @@ -391,7 +430,8 @@ public class ConfigSubsystemFacade implements Closeable { final Map> moduleConfigs = transformMbeToModuleConfigs(txClient, yangStoreSnapshot.getModuleMXBeanEntryMap()); - final org.opendaylight.controller.config.facade.xml.runtime.Runtime runtime = new Runtime(moduleRuntimes, moduleConfigs); + final org.opendaylight.controller.config.facade.xml.runtime.Runtime runtime = new Runtime(moduleRuntimes, + moduleConfigs); return runtime.toXml(runtimeBeans, configBeans, document, yangStoreSnapshot.getEnumResolver()); } finally { @@ -419,4 +459,3 @@ public class ConfigSubsystemFacade implements Closeable { } } -