package org.opendaylight.netvirt.cloudservicechain;
-import java.math.BigInteger;;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
import org.opendaylight.netvirt.cloudservicechain.jobs.AddVpnPseudoPortDataJob;
import org.opendaylight.netvirt.cloudservicechain.jobs.RemoveVpnPseudoPortDataJob;
+import org.opendaylight.netvirt.cloudservicechain.utils.VpnPseudoPortCache;
import org.opendaylight.netvirt.cloudservicechain.utils.VpnServiceChainUtils;
import org.opendaylight.genius.mdsalutil.NWUtil;
import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnAfConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fib.rpc.rev160121.FibRpcService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.fibentries.VrfTables;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceOpData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
this.fibRpcService = fibRpcSrv;
}
+ public void init() {
+ VpnPseudoPortCache.createVpnPseudoPortCache(broker);
+ }
+
+ @Override
+ public void close() throws Exception {
+ VpnPseudoPortCache.destroyVpnPseudoPortCache();
+ }
/**
* Get RouterDistinguisher by VpnName
*
}
}
} catch (Exception ex) {
- LOG.error("Exception: programSCFinVPNPipeline", ex);
+ LOG.error("Exception: programVpnToScfPipeline", ex);
}
}
}
- @Override
- public void close() throws Exception {
- // add
- }
+
/**
.setVpnLportTag(vpnPseudoLportTag).build();
LOG.trace("Adding lportTag={} to VpnToLportTag map for VPN with rd={}", vpnPseudoLportTag, vpnRd);
InstanceIdentifier<VpnToPseudoPortData> path = VpnServiceChainUtils.getVpnToPseudoPortTagIid(vpnRd);
- writeTxn.merge(LogicalDatastoreType.CONFIGURATION, path, newValue, true);
- MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, path, newValue);
+ writeTxn.put(LogicalDatastoreType.CONFIGURATION, path, newValue, true);
result.add(writeTxn.submit());
}
public void init() {
- registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker);
+ registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
}
@Override
*/
package org.opendaylight.netvirt.cloudservicechain.utils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.utils.cache.CacheUtil;
-
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.cloud.servicechain.state.rev170511.vpn.to.pseudo.port.list.VpnToPseudoPortData;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
public static final Logger LOG = LoggerFactory.getLogger(VpnPseudoPortCache.class);
public static final String VPNPSEUDOPORT_CACHE_NAME = "VrfToVpnPseudoPortCache";
- static {
- CacheUtil.createCache(VPNPSEUDOPORT_CACHE_NAME);
+ public static void createVpnPseudoPortCache(DataBroker broker) {
+ if (CacheUtil.getCache(VPNPSEUDOPORT_CACHE_NAME) == null) {
+ CacheUtil.createCache(VPNPSEUDOPORT_CACHE_NAME);
+ initialLoadFromDS(broker);
+ }
+ }
+
+ public static void destroyVpnPseudoPortCache() {
+ if (CacheUtil.getCache(VPNPSEUDOPORT_CACHE_NAME) != null) {
+ CacheUtil.destroyCache(VPNPSEUDOPORT_CACHE_NAME);
+ }
+ }
+
+ private static void initialLoadFromDS(DataBroker broker) {
+ LOG.info("Initial read of Vpn to VpnPseudoPort map from Datastore");
+ List<VpnToPseudoPortData> allVpnToPseudoPortData = VpnServiceChainUtils.getAllVpnToPseudoPortData(broker);
+ for ( VpnToPseudoPortData vpnToPseudoPort : allVpnToPseudoPortData ) {
+ addVpnPseudoPortToCache(vpnToPseudoPort.getVrfId(), vpnToPseudoPort.getVpnLportTag());
+ }
}
public static void addVpnPseudoPortToCache(String vrfId, long vpnPseudoLportTag) {
return MDSALDataStoreUtils.read(broker, LogicalDatastoreType.CONFIGURATION, id);
}
+ public static List<VpnToPseudoPortData> getAllVpnToPseudoPortData(DataBroker broker) {
+ InstanceIdentifier<VpnToPseudoPortList> path = InstanceIdentifier.builder(VpnToPseudoPortList.class).build();
+ Optional<VpnToPseudoPortList> all = MDSALDataStoreUtils.read(broker, LogicalDatastoreType.CONFIGURATION, path);
+
+ return all.isPresent() ? all.get().getVpnToPseudoPortData() : new ArrayList<>();
+ }
+
+
/**
- * * Retrieves the VpnId searching by VpnInstanceName
+ * Retrieves the VpnId searching by VpnInstanceName
*
* @param broker
* @param vpnName
<odl:rpc-service id="fibRpcService"
interface="org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fib.rpc.rev160121.FibRpcService"/>
- <bean id="vpnServiceChainHandler" class="org.opendaylight.netvirt.cloudservicechain.VPNServiceChainHandler">
+ <bean id="vpnServiceChainHandler" class="org.opendaylight.netvirt.cloudservicechain.VPNServiceChainHandler"
+ init-method="init" destroy-method="close">
<argument ref="dataBroker" />
<argument ref="mdsalManager" />
<argument ref="fibRpcService" />