import com.google.common.base.Verify;
import com.google.common.collect.Iterators;
import java.util.Iterator;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
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.lifecycle.LifecycleService;
import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
import org.opendaylight.openflowplugin.api.openflow.rpc.RpcManager;
private static final Logger LOG = LoggerFactory.getLogger(RpcManagerImpl.class);
private final RpcProviderRegistry rpcProviderRegistry;
private DeviceInitializationPhaseHandler deviceInitPhaseHandler;
- private DeviceTerminationPhaseHandler deviceTerminPhaseHandler;
+ private DeviceTerminationPhaseHandler deviceTerminationPhaseHandler;
private final int maxRequestsQuota;
private final ConcurrentMap<DeviceInfo, RpcContext> contexts = new ConcurrentHashMap<>();
private boolean isStatisticsRpcEnabled;
private final ExtensionConverterProvider extensionConverterProvider;
+ private final ConvertorExecutor convertorExecutor;
private final NotificationPublishService notificationPublishService;
- private final LifecycleConductor conductor;
- private final ConvertorExecutor convertorExecutor;
public RpcManagerImpl(
final RpcProviderRegistry rpcProviderRegistry,
final int quotaValue,
-
- final LifecycleConductor lifecycleConductor,
final ExtensionConverterProvider extensionConverterProvider,
final ConvertorExecutor convertorExecutor,
final NotificationPublishService notificationPublishService) {
this.rpcProviderRegistry = rpcProviderRegistry;
maxRequestsQuota = quotaValue;
this.extensionConverterProvider = extensionConverterProvider;
- this.conductor = lifecycleConductor;
this.convertorExecutor = convertorExecutor;
this.notificationPublishService = notificationPublishService;
}
@Override
public void onDeviceContextLevelUp(final DeviceInfo deviceInfo, final LifecycleService lifecycleService) throws Exception {
- final DeviceContext deviceContext = Preconditions.checkNotNull(conductor.getDeviceContext(deviceInfo));
+ final DeviceContext deviceContext = Preconditions.checkNotNull(lifecycleService.getDeviceContext());
final RpcContext rpcContext = new RpcContextImpl(
deviceInfo,
rpcProviderRegistry,
- deviceContext,
deviceContext.getMessageSpy(),
maxRequestsQuota,
deviceInfo.getNodeInstanceIdentifier(),
Verify.verify(contexts.putIfAbsent(deviceInfo, rpcContext) == null, "RpcCtx still not closed for node {}", deviceInfo.getNodeId());
lifecycleService.setRpcContext(rpcContext);
+ lifecycleService.registerDeviceRemovedHandler(this);
rpcContext.setStatisticsRpcEnabled(isStatisticsRpcEnabled);
// finish device initialization cycle back to DeviceManager
@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);
+ Optional.ofNullable(contexts.get(deviceInfo)).ifPresent(OFPContext::close);
+ deviceTerminationPhaseHandler.onDeviceContextLevelDown(deviceInfo);
}
@Override
public void setDeviceTerminationPhaseHandler(final DeviceTerminationPhaseHandler handler) {
- this.deviceTerminPhaseHandler = handler;
+ this.deviceTerminationPhaseHandler = handler;
}
/**
}
}
- @Override
- public <T extends OFPContext> T gainContext(DeviceInfo deviceInfo) {
- return (T) contexts.get(deviceInfo);
- }
-
@Override
public void setStatisticsRpcEnabled(boolean statisticsRpcEnabled) {
isStatisticsRpcEnabled = statisticsRpcEnabled;
}
+
+ @Override
+ public void onDeviceRemoved(DeviceInfo deviceInfo) {
+ contexts.remove(deviceInfo);
+ LOG.debug("Rpc context removed for node {}", deviceInfo.getLOGValue());
+ }
}