X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Foperations%2Fgetconfig%2FGetConfig.java;h=2c4bde0ee8ffdaa3a57824fa23c89228a1f6345b;hp=350ace5eb1a44ac88bd60ac3fc338babcc4d22ae;hb=3927509ec3ecfa32a51b725d2b7155d425f5b877;hpb=f73a6cd4c81794193d42893fab61b97416f751f2 diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java index 350ace5eb1..2c4bde0ee8 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java @@ -72,23 +72,36 @@ public class GetConfig extends AbstractConfigNetconfOperation { private Element getResponseInternal(final Document document, final ConfigRegistryClient configRegistryClient, final Datastore source) { - Element dataElement = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.absent()); - final Set instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider) - .queryInstances(configRegistryClient); - final Config configMapping = new Config(EditConfig.transformMbeToModuleConfigs(configRegistryClient, - yangStoreSnapshot.getModuleMXBeanEntryMap())); - - - ObjectName on = transactionProvider.getOrCreateTransaction(); - ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(on); - - ServiceRegistryWrapper serviceTracker = new ServiceRegistryWrapper(ta); - dataElement = configMapping.toXml(instances, this.maybeNamespace, document, dataElement, serviceTracker); - - LOG.trace("{} operation successful", GET_CONFIG); - - return dataElement; + final ConfigTransactionClient registryClient; + // 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 = getConfigRegistryClient().getConfigTransactionClient(readTx); + } else { + registryClient = getConfigRegistryClient().getConfigTransactionClient(transactionProvider.getOrCreateTransaction()); + } + + try { + Element dataElement = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.absent()); + final Set instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider) + .queryInstances(configRegistryClient); + + final Config configMapping = new Config(EditConfig.transformMbeToModuleConfigs(registryClient, + yangStoreSnapshot.getModuleMXBeanEntryMap())); + + ServiceRegistryWrapper serviceTracker = new ServiceRegistryWrapper(registryClient); + dataElement = configMapping.toXml(instances, this.maybeNamespace, document, dataElement, serviceTracker); + + LOG.trace("{} operation successful", GET_CONFIG); + + return dataElement; + } finally { + if(source == Datastore.running) { + transactionProvider.closeReadTransaction(); + } + } } @Override