X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Frpc%2FRpcManagerImpl.java;h=28ed3c378db25104e1db8ee3364bbfa33662bad5;hb=cfe3a97837951ebbedb337dc988027f10c49f714;hp=7849fc76874676aef32a7b0619f41efb2a56381b;hpb=12ffb008fa69801f6e54b2dd0b5a15932113c6af;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcManagerImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcManagerImpl.java index 7849fc7687..28ed3c378d 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcManagerImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcManagerImpl.java @@ -8,79 +8,43 @@ package org.opendaylight.openflowplugin.impl.rpc; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; -import com.google.common.base.Verify; import com.google.common.collect.Iterators; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.openflowplugin.api.openflow.OFPContext; +import javax.annotation.Nonnull; +import org.opendaylight.mdsal.binding.api.NotificationPublishService; +import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; -import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler; -import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceTerminationPhaseHandler; -import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleConductor; import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext; import org.opendaylight.openflowplugin.api.openflow.rpc.RpcManager; import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class RpcManagerImpl implements RpcManager { private static final Logger LOG = LoggerFactory.getLogger(RpcManagerImpl.class); - private final RpcProviderRegistry rpcProviderRegistry; - private DeviceInitializationPhaseHandler deviceInitPhaseHandler; - private DeviceTerminationPhaseHandler deviceTerminPhaseHandler; - private final int maxRequestsQuota; + private final OpenflowProviderConfig config; + private final RpcProviderService rpcProviderRegistry; private final ConcurrentMap contexts = new ConcurrentHashMap<>(); - private boolean isStatisticsRpcEnabled; private final ExtensionConverterProvider extensionConverterProvider; - private final LifecycleConductor conductor; private final ConvertorExecutor convertorExecutor; - - public RpcManagerImpl( - final RpcProviderRegistry rpcProviderRegistry, - final int quotaValue, - ExtensionConverterProvider extensionConverterProvider, - final LifecycleConductor lifecycleConductor, - final ConvertorExecutor convertorExecutor) { + private final NotificationPublishService notificationPublishService; + + public RpcManagerImpl(final OpenflowProviderConfig config, + final RpcProviderService rpcProviderRegistry, + final ExtensionConverterProvider extensionConverterProvider, + final ConvertorExecutor convertorExecutor, + final NotificationPublishService notificationPublishService) { + this.config = config; this.rpcProviderRegistry = rpcProviderRegistry; - maxRequestsQuota = quotaValue; this.extensionConverterProvider = extensionConverterProvider; - this.conductor = lifecycleConductor; this.convertorExecutor = convertorExecutor; - } - - @Override - public void setDeviceInitializationPhaseHandler(final DeviceInitializationPhaseHandler handler) { - deviceInitPhaseHandler = handler; - } - - @Override - public void onDeviceContextLevelUp(final DeviceInfo deviceInfo) throws Exception { - - final DeviceContext deviceContext = Preconditions.checkNotNull(conductor.getDeviceContext(deviceInfo)); - - final RpcContext rpcContext = new RpcContextImpl( - deviceInfo, - rpcProviderRegistry, - deviceContext, - deviceContext.getMessageSpy(), - maxRequestsQuota, - deviceInfo.getNodeInstanceIdentifier(), - deviceContext, - extensionConverterProvider, - convertorExecutor); - - Verify.verify(contexts.putIfAbsent(deviceInfo, rpcContext) == null, "RpcCtx still not closed for node {}", deviceInfo.getNodeId()); - - rpcContext.setStatisticsRpcEnabled(isStatisticsRpcEnabled); - - // finish device initialization cycle back to DeviceManager - deviceInitPhaseHandler.onDeviceContextLevelUp(deviceInfo); + this.notificationPublishService = notificationPublishService; } @Override @@ -91,39 +55,36 @@ public class RpcManagerImpl implements RpcManager { } } - @Override - public void onDeviceContextLevelDown(final DeviceInfo deviceInfo) { - final RpcContext removedContext = contexts.remove(deviceInfo); - if (removedContext != null) { - LOG.info("Unregister RPCs services for device context closure"); - removedContext.close(); - } - deviceTerminPhaseHandler.onDeviceContextLevelDown(deviceInfo); - } - - @Override - public void setDeviceTerminationPhaseHandler(final DeviceTerminationPhaseHandler handler) { - this.deviceTerminPhaseHandler = handler; - } - /** - * This method is only for testing + * This method is only for testing. */ @VisibleForTesting void addRecordToContexts(DeviceInfo deviceInfo, RpcContext rpcContexts) { - if(!contexts.containsKey(deviceInfo)) { - this.contexts.put(deviceInfo,rpcContexts); + if (!contexts.containsKey(deviceInfo)) { + this.contexts.put(deviceInfo, rpcContexts); } } @Override - public T gainContext(DeviceInfo deviceInfo) { - return (T) contexts.get(deviceInfo); - } + public RpcContext createContext(final @Nonnull DeviceContext deviceContext) { + final RpcContextImpl rpcContext = new RpcContextImpl( + rpcProviderRegistry, + config.getRpcRequestsQuota().getValue(), + deviceContext, + extensionConverterProvider, + convertorExecutor, + notificationPublishService, + config.isIsStatisticsRpcEnabled()); + contexts.put(deviceContext.getDeviceInfo(), rpcContext); + return rpcContext; + } @Override - public void setStatisticsRpcEnabled(boolean statisticsRpcEnabled) { - isStatisticsRpcEnabled = statisticsRpcEnabled; + public void onDeviceRemoved(final DeviceInfo deviceInfo) { + contexts.remove(deviceInfo); + if (LOG.isDebugEnabled()) { + LOG.debug("Rpc context removed for node {}", deviceInfo); + } } }