import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
if (moduleKey != null) {
try {
final ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
- final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rwTx).get();
+ final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rwTx);
if (maybeModule.isPresent() && neighborState.remove(moduleKey, removedNeighbor)) {
configModuleOp.removeModuleConfiguration(moduleKey, rwTx);
}
//update an existing peer configuration
try {
if (neighborState.addOrUpdate(moduleKey, modifiedAppNeighbor.getKey(), modifiedAppNeighbor)) {
- final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rTx).get();
+ final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rTx);
if (maybeModule.isPresent()) {
final Module peerConfigModule = toPeerConfigModule(modifiedAppNeighbor, maybeModule.get());
configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
final ModuleKey ribImplKey = globalState.getModuleKey(GlobalIdentifier.GLOBAL_IDENTIFIER);
if (ribImplKey != null) {
try {
- final ListenableFuture<TargetRib> ribFuture = new RibInstanceFunction<>(rTx, configModuleOp, TO_RIB_FUNCTION).apply(ribImplKey.getName());
- final Module peerConfigModule = toPeerConfigModule(modifiedAppNeighbor, ribFuture.get());
+ final TargetRib rib = RibInstanceFunction.getRibInstance(this.configModuleOp, this.TO_RIB_FUNCTION, ribImplKey.getName(), rTx);
+ final Module peerConfigModule = toPeerConfigModule(modifiedAppNeighbor, rib);
configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
neighborState.addOrUpdate(peerConfigModule.getKey(), modifiedAppNeighbor.getKey(), modifiedAppNeighbor);
} catch (final Exception e) {
package org.opendaylight.protocol.bgp.openconfig.impl.moduleconfig;
import com.google.common.base.Optional;
-import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.Modules;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.Services;
wTx.submit().checkedGet();
}
- ListenableFuture<Optional<Module>> readModuleConfiguration(final ModuleKey moduleKey, final ReadTransaction rTx) {
- return rTx.read(LogicalDatastoreType.CONFIGURATION, MODULES_IID.child(Module.class, moduleKey));
+ Optional<Module> readModuleConfiguration(final ModuleKey moduleKey, final ReadTransaction rTx) throws ReadFailedException {
+ return rTx.read(LogicalDatastoreType.CONFIGURATION, MODULES_IID.child(Module.class, moduleKey)).checkedGet();
}
- ListenableFuture<Optional<Service>> readConfigService(final ServiceKey serviceKey, final ReadTransaction rTx) {
- return rTx.read(LogicalDatastoreType.CONFIGURATION, SERVICES_IID.child(Service.class, serviceKey));
+ Optional<Service> readConfigService(final ServiceKey serviceKey, final ReadTransaction rTx) throws ReadFailedException {
+ return rTx.read(LogicalDatastoreType.CONFIGURATION, SERVICES_IID.child(Service.class, serviceKey)).checkedGet();
}
}
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
-import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
if (moduleKey != null) {
try {
final ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
- final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rwTx).get();
+ final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rwTx);
if (maybeModule.isPresent() && neighborState.remove(moduleKey, removedNeighbor)) {
configModuleOp.removeModuleConfiguration(moduleKey, rwTx);
}
- } catch (InterruptedException | ExecutionException | TransactionCommitFailedException e) {
+ } catch (ReadFailedException | TransactionCommitFailedException e) {
LOG.error("Failed to remove a configuration module: {}", moduleKey, e);
throw new IllegalStateException(e);
}
public void onNeighborModified(final Neighbor modifiedNeighbor) {
final ModuleKey moduleKey = neighborState.getModuleKey(modifiedNeighbor.getKey());
final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
- final ListenableFuture<List<AdvertizedTable>> advertizedTablesFuture = new TableTypesFunction<AdvertizedTable>(rTx,
- configModuleOp, ADVERTIZED_TABLE_FUNCTION).apply(modifiedNeighbor.getAfiSafis().getAfiSafi());
+ final List<AdvertizedTable> advertizedTables = getAdvertizedTables(modifiedNeighbor, rTx);
if (moduleKey != null) {
- //update an existing peer configuration
+ updateExistingPeerConfiguration(moduleKey, modifiedNeighbor, advertizedTables, rTx);
+ } else {
+ createNewPeerConfiguration(moduleKey, modifiedNeighbor, advertizedTables, rTx);
+ }
+ }
+
+ private List<AdvertizedTable> getAdvertizedTables(final Neighbor modifiedNeighbor, final ReadOnlyTransaction rTx) {
+ return TableTypesFunction.getLocalTables(rTx, this.configModuleOp, this.ADVERTIZED_TABLE_FUNCTION, modifiedNeighbor.getAfiSafis().getAfiSafi());
+ }
+
+ private void updateExistingPeerConfiguration(final ModuleKey moduleKey, final Neighbor modifiedNeighbor, final List<AdvertizedTable>
+ advertizedTables, final ReadOnlyTransaction rTx) {
+ if (neighborState.addOrUpdate(moduleKey, modifiedNeighbor.getKey(), modifiedNeighbor)) {
+ final Optional<Module> maybeModule = getOldModuleConfiguration(moduleKey, rTx);
+ if (maybeModule.isPresent()) {
+ final Module peerConfigModule = toPeerConfigModule(modifiedNeighbor, maybeModule.get(), advertizedTables);
+ putOldModuleConfigurationIntoNewModule(peerConfigModule);
+ }
+ }
+ }
+
+ private Optional<Module> getOldModuleConfiguration(final ModuleKey moduleKey, final ReadOnlyTransaction rTx) {
+ try {
+ return configModuleOp.readModuleConfiguration(moduleKey, rTx);
+ } catch (final Exception e) {
+ LOG.error("Failed to read module configuration: {}", moduleKey, e);
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private void putOldModuleConfigurationIntoNewModule(final Module peerConfigModule) {
+ try {
+ configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
+ } catch (TransactionCommitFailedException e) {
+ LOG.error("Failed to update a configuration module: {}", peerConfigModule, e);
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private void createNewPeerConfiguration(final ModuleKey moduleKey, final Neighbor modifiedNeighbor, final List<AdvertizedTable>
+ advertizedTables, final ReadOnlyTransaction rTx) {
+ final ModuleKey ribImplKey = globalState.getModuleKey(GlobalIdentifier.GLOBAL_IDENTIFIER);
+ if (ribImplKey != null) {
try {
- if (neighborState.addOrUpdate(moduleKey, modifiedNeighbor.getKey(), modifiedNeighbor)) {
- final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rTx).get();
- if (maybeModule.isPresent()) {
- final Module peerConfigModule = toPeerConfigModule(modifiedNeighbor, maybeModule.get(), advertizedTablesFuture.get());
- configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
- }
- }
+ final Rib rib = RibInstanceFunction.getRibInstance(this.configModuleOp, this.TO_RIB_FUNCTION, ribImplKey.getName(), rTx);
+ final Module peerConfigModule = toPeerConfigModule(modifiedNeighbor, advertizedTables, rib);
+ configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
+ neighborState.addOrUpdate(peerConfigModule.getKey(), modifiedNeighbor.getKey(), modifiedNeighbor);
} catch (final Exception e) {
- LOG.error("Failed to update a configuration module: {}", moduleKey, e);
+ LOG.error("Failed to create a configuration module: {}", moduleKey, e);
throw new IllegalStateException(e);
}
- } else {
- //create new peer configuration
- final ModuleKey ribImplKey = globalState.getModuleKey(GlobalIdentifier.GLOBAL_IDENTIFIER);
- if (ribImplKey != null) {
- try {
- final ListenableFuture<Rib> ribFuture = new RibInstanceFunction<>(rTx, configModuleOp, TO_RIB_FUNCTION).apply(ribImplKey.getName());
- final Module peerConfigModule = toPeerConfigModule(modifiedNeighbor, advertizedTablesFuture.get(), ribFuture.get());
- configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
- neighborState.addOrUpdate(peerConfigModule.getKey(), modifiedNeighbor.getKey(), modifiedNeighbor);
- } catch (final Exception e) {
- LOG.error("Failed to create a configuration module: {}", moduleKey, e);
- throw new IllegalStateException(e);
- }
- }
}
}
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
if (moduleKey != null) {
try {
final ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
- final Optional<Module> maybeModule = this.configModuleWriter.readModuleConfiguration(moduleKey, rwTx).get();
+ final Optional<Module> maybeModule = this.configModuleWriter.readModuleConfiguration(moduleKey, rwTx);
if (maybeModule.isPresent() && globalState.remove(moduleKey, new BgpBuilder().setGlobal(removedGlobal).build())) {
this.configModuleWriter.removeModuleConfiguration(moduleKey, rwTx);
}
if (moduleKey != null && this.globalState.addOrUpdate(moduleKey, GlobalIdentifier.GLOBAL_IDENTIFIER, new BgpBuilder().setGlobal(modifiedGlobal).build())) {
final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
try {
- final Optional<Module> maybeModule = this.configModuleWriter.readModuleConfiguration(moduleKey, rTx).get();
+ final Optional<Module> maybeModule = this.configModuleWriter.readModuleConfiguration(moduleKey, rTx);
if (maybeModule.isPresent()) {
- final ListenableFuture<List<LocalTable>> localTablesFuture = new TableTypesFunction<LocalTable>(rTx, this.configModuleWriter, LOCAL_TABLE_FUNCTION).apply(modifiedGlobal.getAfiSafis().getAfiSafi());
- final Module newModule = toRibImplConfigModule(modifiedGlobal, maybeModule.get(), localTablesFuture.get());
+ final List<LocalTable> localTables = getAdvertizedTables(modifiedGlobal, rTx);
+ final Module newModule = toRibImplConfigModule(modifiedGlobal, maybeModule.get(), localTables);
this.configModuleWriter.putModuleConfiguration(newModule, dataBroker.newWriteOnlyTransaction());
}
} catch (final Exception e) {
}
}
+ private List<LocalTable> getAdvertizedTables(final Global modifiedGlobal, final ReadOnlyTransaction rTx) {
+ return TableTypesFunction.getLocalTables(rTx, this.configModuleWriter, this.LOCAL_TABLE_FUNCTION, modifiedGlobal.getAfiSafis().getAfiSafi());
+ }
+
private static Module toRibImplConfigModule(final Global globalConfig, final Module module, final List<LocalTable> tableTypes) {
final RibImpl ribImpl = (RibImpl) module.getConfiguration();
final RibImplBuilder ribImplBuilder = new RibImplBuilder();
/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2016 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,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.protocol.bgp.openconfig.impl.moduleconfig;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
-import com.google.common.util.concurrent.AsyncFunction;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.RibInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.ServiceRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.services.service.Instance;
import org.opendaylight.yangtools.yang.binding.ChildOf;
-final class RibInstanceFunction<T extends ServiceRef & ChildOf<Module>> implements AsyncFunction<String, T> {
-
- private final ReadTransaction rTx;
- private final BGPConfigModuleProvider configModuleOp;
- private final Function<String, T> function;
-
- public RibInstanceFunction(final ReadTransaction rTx, final BGPConfigModuleProvider configModuleOp, final Function<String, T> function) {
- this.rTx = Preconditions.checkNotNull(rTx);
- this.configModuleOp = Preconditions.checkNotNull(configModuleOp);
- this.function = Preconditions.checkNotNull(function);
+final class RibInstanceFunction {
+ private RibInstanceFunction() {
+ throw new UnsupportedOperationException();
}
- @Override
- public ListenableFuture<T> apply(final String instanceName) {
- final ListenableFuture<Optional<Service>> readFuture = configModuleOp.readConfigService(new ServiceKey(RibInstance.class), rTx);
- return Futures.transform(readFuture, new Function<Optional<Service>, T>() {
- @Override
- public T apply(final Optional<Service> maybeService) {
- if (maybeService.isPresent()) {
- final Optional<Instance> maybeInstance = Iterables.tryFind(maybeService.get().getInstance(), new Predicate<Instance>() {
- @Override
- public boolean apply(final Instance instance) {
- final String moduleName = OpenConfigUtil.getModuleName(instance.getProvider());
- if (moduleName.equals(instanceName)) {
- return true;
- }
- return false;
+ public static <T extends ServiceRef & ChildOf<Module>> T getRibInstance(final BGPConfigModuleProvider configModuleOp, final Function<String, T>
+ function, final String instanceName, final ReadOnlyTransaction rTx) {
+ Preconditions.checkNotNull(rTx);
+ try {
+ final Optional<Service> maybeService = configModuleOp.readConfigService(new ServiceKey(RibInstance.class), rTx);
+ if (maybeService.isPresent()) {
+ final Optional<Instance> maybeInstance = Iterables.tryFind(maybeService.get().getInstance(), new Predicate<Instance>() {
+ @Override
+ public boolean apply(final Instance instance) {
+ final String moduleName = OpenConfigUtil.getModuleName(instance.getProvider());
+ if (moduleName.equals(instanceName)) {
+ return true;
}
- });
- if (maybeInstance.isPresent()) {
- return function.apply(maybeInstance.get().getName());
+ return false;
}
+ });
+ if (maybeInstance.isPresent()) {
+ return function.apply(maybeInstance.get().getName());
}
- return null;
}
-
- });
+ return null;
+ } catch (ReadFailedException e) {
+ throw new IllegalStateException("Failed to read service.", e);
+ }
}
}
import com.google.common.base.Function;
import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
-import com.google.common.util.concurrent.AsyncFunction;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.services.service.Instance;
import org.opendaylight.yangtools.yang.binding.ChildOf;
-final class TableTypesFunction<T extends ServiceRef & ChildOf<Module>> implements AsyncFunction<List<AfiSafi>, List<T>> {
-
- private final ReadTransaction rTx;
- private final BGPConfigModuleProvider configModuleWriter;
- private final Function<String, T> function;
-
- public TableTypesFunction(final ReadTransaction rTx, final BGPConfigModuleProvider configModuleWriter, final Function<String, T> function) {
- this.rTx = Preconditions.checkNotNull(rTx);
- this.configModuleWriter = Preconditions.checkNotNull(configModuleWriter);
- this.function = Preconditions.checkNotNull(function);
+final class TableTypesFunction {
+ private TableTypesFunction() {
+ throw new UnsupportedOperationException();
}
- @Override
- public ListenableFuture<List<T>> apply(final List<AfiSafi> afiSafis) {
- final ListenableFuture<Optional<Service>> readFuture = configModuleWriter.readConfigService(new ServiceKey(BgpTableType.class), rTx);
- return Futures.transform(readFuture, new AsyncFunction<Optional<Service>, List<T>>() {
-
- @Override
- public ListenableFuture<List<T>> apply(final Optional<Service> maybeService) {
- if (maybeService.isPresent()) {
- final Service service = maybeService.get();
- final List<ListenableFuture<Optional<Module>>> modulesFuture = new ArrayList<>();
- final Map<String, String> moduleNameToService = new HashMap<>();
- for (final Instance instance : service.getInstance()) {
- final String moduleName = OpenConfigUtil.getModuleName(instance.getProvider());
- modulesFuture.add(configModuleWriter.readModuleConfiguration(new ModuleKey(moduleName, BgpTableTypeImpl.class), rTx));
- moduleNameToService.put(moduleName, instance.getName());
- }
- return Futures.transform(Futures.successfulAsList(modulesFuture), new ModulesToLocalTablesFunction(afiSafis, moduleNameToService));
+ public static <T extends ServiceRef & ChildOf<Module>> List<T> getLocalTables(final ReadOnlyTransaction rTx, final BGPConfigModuleProvider
+ configModuleWriter, final Function<String, T> function, final List<AfiSafi> afiSafis) {
+ try {
+ final Optional<Service> maybeService = configModuleWriter.readConfigService(new ServiceKey(BgpTableType.class), rTx);
+ if (maybeService.isPresent()) {
+ final Service service = maybeService.get();
+ final List<Optional<Module>> maybeModules = new ArrayList<>();
+ final Map<String, String> moduleNameToService = new HashMap<>();
+ for (final Instance instance : service.getInstance()) {
+ final String moduleName = OpenConfigUtil.getModuleName(instance.getProvider());
+ final ModuleKey moduleKey = new ModuleKey(moduleName, BgpTableTypeImpl.class);
+ final Optional<Module> moduleConfig = configModuleWriter.readModuleConfiguration(moduleKey, rTx);
+ maybeModules.add(moduleConfig);
+ moduleNameToService.put(moduleName, instance.getName());
}
- return Futures.immediateFailedFuture(new IllegalStateException("No BgpTableType service present in configuration."));
- }
-
- });
- }
-
- private final class ModulesToLocalTablesFunction implements Function<List<Optional<Module>>, List<T>> {
-
- private final List<AfiSafi> afiSafis;
- private final Map<String, String> moduleNameToService;
- public ModulesToLocalTablesFunction(final List<AfiSafi> afiSafis, final Map<String, String> moduleNameToService) {
- this.afiSafis = afiSafis;
- this.moduleNameToService = moduleNameToService;
- }
-
- @Override
- public List<T> apply(final List<Optional<Module>> maybeModules) {
- final ImmutableList<Module> modules = FluentIterable.from(maybeModules)
+ final ImmutableList<Module> modules = FluentIterable.from(maybeModules)
.filter(new Predicate<Optional<Module>>() {
@Override
public boolean apply(final Optional<Module> input) {
}
}).toList();
- return toTableTypes(afiSafiToModuleName(modules));
+ return toTableTypes(function, afiSafis, afiSafiToModuleName(afiSafis, modules), moduleNameToService);
+ }
+ throw new IllegalStateException("No BgpTableType service present in configuration.");
+ } catch (ReadFailedException e) {
+ throw new IllegalStateException("Failed to read service.", e);
}
+ }
- private Map<Class<? extends AfiSafiType>, String> afiSafiToModuleName(final List<Module> modules) {
- final Map<Class<? extends AfiSafiType>, String> afiSafiToModuleName = new HashMap<>(afiSafis.size());
- for (final Module module : modules) {
- final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.BgpTableTypeImpl config =
- ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.BgpTableTypeImpl) module.getConfiguration());
- final Optional<AfiSafi> afiSafi = OpenConfigUtil.toAfiSafi(new org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl(config.getAfi(), config.getSafi()));
- if (afiSafi.isPresent()) {
- afiSafiToModuleName.put(afiSafi.get().getAfiSafiName(), module.getName());
- }
+ private static Map<Class<? extends AfiSafiType>, String> afiSafiToModuleName(final List<AfiSafi> afiSafis, final List<Module> modules) {
+ final Map<Class<? extends AfiSafiType>, String> afiSafiToModuleName = new HashMap<>(afiSafis.size());
+ for (final Module module : modules) {
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.BgpTableTypeImpl config =
+ ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.BgpTableTypeImpl) module.getConfiguration());
+ final Optional<AfiSafi> afiSafi = OpenConfigUtil.toAfiSafi(new org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl(config.getAfi(), config.getSafi()));
+ if (afiSafi.isPresent()) {
+ afiSafiToModuleName.put(afiSafi.get().getAfiSafiName(), module.getName());
}
- return afiSafiToModuleName;
}
+ return afiSafiToModuleName;
+ }
- private List<T> toTableTypes(final Map<Class<? extends AfiSafiType>, String> afiSafiToModuleName) {
- final List<T> tableTypes = new ArrayList<>(afiSafis.size());
- for (final AfiSafi afiSafi : afiSafis) {
- final String moduleName = afiSafiToModuleName.get(afiSafi.getAfiSafiName());
- if (moduleName != null) {
- tableTypes.add(function.apply(moduleNameToService.get(moduleName)));
- }
+ private static <T extends ServiceRef & ChildOf<Module>> List<T> toTableTypes(final Function<String, T> function, final List<AfiSafi> afiSafis,
+ final Map<Class<? extends AfiSafiType>, String> afiSafiToModuleName, final Map<String, String> moduleNameToService) {
+ final List<T> tableTypes = new ArrayList<>(afiSafis.size());
+ for (final AfiSafi afiSafi : afiSafis) {
+ final String moduleName = afiSafiToModuleName.get(afiSafi.getAfiSafiName());
+ if (moduleName != null) {
+ tableTypes.add(function.apply(moduleNameToService.get(moduleName)));
}
- return tableTypes;
}
-
+ return tableTypes;
}
}
Mockito.doReturn(future).when(this.wTx).submit();
Mockito.doReturn(future).when(this.rwTx).submit();
Mockito.doNothing().when(this.wTx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class), Mockito.any(Module.class));
- Mockito.doReturn(moduleOpt).when(future).get();
- Mockito.doReturn(null).when(future).checkedGet();
+ Mockito.doReturn(moduleOpt).when(future).checkedGet();
Mockito.doNothing().when(future).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class));
Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
final Module module = Mockito.mock(Module.class);
import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
}
@Test
- public void testReadTransactions() throws InterruptedException, ExecutionException {
+ public void testReadTransactions() throws InterruptedException, ExecutionException, ReadFailedException {
PROVIDER.readModuleConfiguration(this.key, this.rtx);
final ServiceKey sKey = Mockito.mock(ServiceKey.class);
PROVIDER.readConfigService(sKey, this.rtx);
final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
- Mockito.doReturn(moduleOpt).when(future).get();
- Mockito.doReturn(null).when(future).checkedGet();
+ Mockito.doReturn(moduleOpt).when(future).checkedGet();
Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
final Module module = Mockito.mock(Module.class);
Mockito.doReturn(module).when(moduleOpt).get();
final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
final Optional<Module> moduleOpt2 = Mockito.mock(Optional.class);
- Mockito.doReturn(moduleOpt).when(future).get();
- Mockito.doReturn(moduleOpt2).when(future2).get();
+ Mockito.doReturn(moduleOpt).when(future).checkedGet();
+ Mockito.doReturn(moduleOpt2).when(future2).checkedGet();
Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
Mockito.doReturn(Boolean.FALSE).when(moduleOpt2).isPresent();
final Module module = Mockito.mock(Module.class);