Abstract service NodeId remove 58/40358/5
authorJozef Bacigal <jbacigal@cisco.com>
Mon, 13 Jun 2016 10:42:12 +0000 (12:42 +0200)
committerJozef Bacigal <jbacigal@cisco.com>
Fri, 17 Jun 2016 11:32:57 +0000 (13:32 +0200)
Change-Id: I2f7ec3f2ee40e7ef41e725e4b214afa1dd478a14
Signed-off-by: Jozef Bacigal <jbacigal@cisco.com>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/LifecycleConductorImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalExperimenterMessageServiceImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/MdSalRegistrationUtils.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/services/SalExperimenterMessageServiceImplTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/util/MdSalRegistrationUtilsTest.java

index d2ffa852f5514e3d470eb36a8cb07b2dceca15a4..d84e2c0a9010f2a6750f2d17af1e9d36b3654fa7 100644 (file)
@@ -38,6 +38,8 @@ import org.opendaylight.openflowplugin.api.openflow.rpc.RpcManager;
 import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsContext;
 import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsManager;
 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency;
+import org.opendaylight.openflowplugin.extension.api.ExtensionConverterProviderKeeper;
+import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.openflowplugin.impl.util.MdSalRegistrationUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.role.service.rev150727.OfpRole;
 import org.slf4j.Logger;
@@ -45,13 +47,14 @@ import org.slf4j.LoggerFactory;
 
 /**
  */
-final class LifecycleConductorImpl implements LifecycleConductor, RoleChangeListener, DeviceContextChangeListener {
+final class LifecycleConductorImpl implements LifecycleConductor, RoleChangeListener, DeviceContextChangeListener, ExtensionConverterProviderKeeper {
 
     private static final Logger LOG = LoggerFactory.getLogger(LifecycleConductorImpl.class);
     private static final int TICKS_PER_WHEEL = 500;
     private static final long TICK_DURATION = 10; // 0.5 sec.
 
     private final HashedWheelTimer hashedWheelTimer = new HashedWheelTimer(TICK_DURATION, TimeUnit.MILLISECONDS, TICKS_PER_WHEEL);
+    private ExtensionConverterProvider extensionConverterProvider;
     private DeviceManager deviceManager;
     private StatisticsManager statisticsManager;
     private RpcManager rpcManager;
@@ -60,22 +63,40 @@ final class LifecycleConductorImpl implements LifecycleConductor, RoleChangeList
     private NotificationPublishService notificationPublishService;
 
     LifecycleConductorImpl(final MessageIntelligenceAgency messageIntelligenceAgency) {
-        Preconditions.checkNotNull(messageIntelligenceAgency);
-        this.messageIntelligenceAgency = messageIntelligenceAgency;
+        this.messageIntelligenceAgency = Preconditions.checkNotNull(messageIntelligenceAgency);
+    }
+
+    @Override
+    public ExtensionConverterProvider getExtensionConverterProvider() {
+        return extensionConverterProvider;
+    }
+
+    @Override
+    public void setExtensionConverterProvider(ExtensionConverterProvider extensionConverterProvider) {
+        this.extensionConverterProvider = extensionConverterProvider;
     }
 
     @Override
     public void setSafelyManager(final OFPManager manager){
-        if (manager == null) {
-            LOG.info("Manager {} is already defined in conductor. ", manager);
-        }
         if (manager instanceof RpcManager) {
+            if (rpcManager != null) {
+                LOG.info("RPC manager {} is already defined in conductor. ", manager);
+                return;
+            }
             this.rpcManager = (RpcManager) manager;
         } else {
             if (manager instanceof StatisticsManager) {
+                if (statisticsManager != null) {
+                    LOG.info("Statistics manager {} is already defined in conductor. ", manager);
+                    return;
+                }
                 this.statisticsManager = (StatisticsManager) manager;
             } else {
                 if (manager instanceof DeviceManager) {
+                    if (deviceManager != null) {
+                        LOG.info("Device manager {} is already defined in conductor. ", manager);
+                        return;
+                    }
                     this.deviceManager = (DeviceManager) manager;
                 }
             }
@@ -149,7 +170,8 @@ final class LifecycleConductorImpl implements LifecycleConductor, RoleChangeList
                 MdSalRegistrationUtils.registerMasterServices(
                         rpcManager.gainContext(deviceInfo),
                         deviceContext,
-                        OfpRole.BECOMEMASTER);
+                        OfpRole.BECOMEMASTER,
+                        this.extensionConverterProvider);
                 if (((RpcContext)rpcManager.gainContext(deviceInfo)).isStatisticsRpcEnabled()) {
                     MdSalRegistrationUtils.registerStatCompatibilityServices(
                             rpcManager.gainContext(deviceInfo),
@@ -231,7 +253,7 @@ final class LifecycleConductorImpl implements LifecycleConductor, RoleChangeList
     }
 
     @VisibleForTesting
-    public boolean isServiceChangeListenersEmpty() {
+    boolean isServiceChangeListenersEmpty() {
         return this.serviceChangeListeners.isEmpty();
     }
 
index 6495f683e5cb922006e0e30097f2fbed791b6c18..8ae404a4727e1659f99f0a7442d47d6a26dc1388 100644 (file)
@@ -198,6 +198,7 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF
                 barrierInterval,
                 barrierCountLimit,
                 conductor);
+        ((ExtensionConverterProviderKeeper) conductor).setExtensionConverterProvider(extensionConverterManager);
         ((ExtensionConverterProviderKeeper) deviceManager).setExtensionConverterProvider(extensionConverterManager);
 
         conductor.setSafelyManager(deviceManager);
@@ -206,8 +207,10 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF
         roleManager = new RoleManagerImpl(entityOwnershipService, dataBroker, conductor);
         statisticsManager = new StatisticsManagerImpl(rpcProviderRegistry, isStatisticsPollingOff, conductor);
         conductor.setSafelyManager(statisticsManager);
+
         rpcManager = new RpcManagerImpl(rpcProviderRegistry, rpcRequestsQuota, conductor);
         conductor.setSafelyManager(rpcManager);
+
         roleManager.addRoleChangeListener((RoleChangeListener) conductor);
 
         /* Initialization Phase ordering - OFP Device Context suite */
index 73f5fbe555358d3a48944ffe0f654957667d3285..10cd0209ba3984029d12f7ba4d10c1b035840f5f 100644 (file)
@@ -128,7 +128,6 @@ public class DeviceContextImpl implements DeviceContext, ExtensionConverterProvi
     private final MessageTranslator<PacketInMessage, PacketReceived> packetInTranslator;
     private final MessageTranslator<FlowRemoved, org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowRemoved> flowRemovedTranslator;
     private final TranslatorLibrary translatorLibrary;
-    private final Map<Long, NodeConnectorRef> nodeConnectorCache;
     private final ItemLifeCycleRegistry itemLifeCycleSourceRegistry;
     private ExtensionConverterProvider extensionConverterProvider;
 
@@ -168,9 +167,6 @@ public class DeviceContextImpl implements DeviceContext, ExtensionConverterProvi
         flowRemovedTranslator = translatorLibrary.lookupTranslator(
                 new TranslatorKey(deviceInfo.getVersion(), FlowRemoved.class.getName()));
 
-
-        nodeConnectorCache = new ConcurrentHashMap<>();
-
         itemLifeCycleSourceRegistry = new ItemLifeCycleRegistryImpl();
         flowLifeCycleKeeper = new ItemLifeCycleSourceImpl();
         itemLifeCycleSourceRegistry.registerLifeCycleSource(flowLifeCycleKeeper);
index 224ccde5133be01c8e2b87e40ebe937d4d4f8fe0..73f098da9eb4241931cae4fc64709f503a85e0cc 100644 (file)
@@ -18,15 +18,12 @@ import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueue;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceRegistry;
-import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.TxFacade;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.EventIdentifier;
 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.common.RpcError;
@@ -45,7 +42,6 @@ abstract class AbstractService<I, O> {
     private final RequestContextStack requestContextStack;
     private final DeviceContext deviceContext;
     private final MessageSpy messageSpy;
-    private final NodeId nodeId;
     private EventIdentifier eventIdentifier;
 
     AbstractService(final RequestContextStack requestContextStack, final DeviceContext deviceContext) {
@@ -56,7 +52,6 @@ abstract class AbstractService<I, O> {
         this.datapathId = deviceInfo.getDatapathId();
         this.version = deviceInfo.getVersion();
         this.messageSpy = deviceContext.getMessageSpy();
-        this.nodeId = deviceInfo.getNodeId();
     }
 
     public EventIdentifier getEventIdentifier() {
@@ -75,11 +70,6 @@ abstract class AbstractService<I, O> {
         return datapathId;
     }
 
-    @Deprecated
-    public NodeId getNodeId() {
-        return nodeId;
-    }
-
     public RequestContextStack getRequestContextStack() {
         return requestContextStack;
     }
index c2b3dc122cafb466be890f9850b030b2d5628a11..34de1f2c236c01a05646f88fb555f73cf57fbfbc 100644 (file)
@@ -14,6 +14,7 @@ import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.extension.api.ConvertorMessageToOFJava;
 import org.opendaylight.openflowplugin.extension.api.ExtensionConverterProviderKeeper;
 import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
+import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.openflowplugin.extension.api.exception.ConversionException;
 import org.opendaylight.openflowplugin.extension.api.exception.ConverterNotFoundException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.message.service.rev151020.SalExperimenterMessageService;
@@ -27,16 +28,20 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public class SalExperimenterMessageServiceImpl extends AbstractVoidService<SendExperimenterInput> implements SalExperimenterMessageService {
 
-    public SalExperimenterMessageServiceImpl(final RequestContextStack requestContextStack, final DeviceContext deviceContext) {
+    private final ExtensionConverterProvider extensionConverterProvider;
+
+    public SalExperimenterMessageServiceImpl(final RequestContextStack requestContextStack,
+                                             final DeviceContext deviceContext,
+                                             final ExtensionConverterProvider extensionConverterProvider) {
         super(requestContextStack, deviceContext);
+        this.extensionConverterProvider = extensionConverterProvider;
     }
 
     @Override
     protected OfHeader buildRequest(Xid xid, SendExperimenterInput input) throws ConversionException {
         final TypeVersionKey key = new TypeVersionKey(input.getExperimenterMessageOfChoice().getImplementedInterface(), getVersion());
         final ConvertorMessageToOFJava<ExperimenterMessageOfChoice, ExperimenterDataOfChoice> messageConverter =
-                ((ExtensionConverterProviderKeeper) getDeviceContext())
-                        .getExtensionConverterProvider().getMessageConverter(key);
+                extensionConverterProvider.getMessageConverter(key);
 
         if (messageConverter == null) {
             throw new ConverterNotFoundException(key.toString());
index 05806e9b9a120077b26bfd59ab8a2572e43e2602..ccf4824515c37133fd075a6ac28fbd053ba4eb4b 100644 (file)
@@ -16,6 +16,8 @@ import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
 import org.opendaylight.openflowplugin.api.openflow.statistics.compatibility.Delegator;
+import org.opendaylight.openflowplugin.extension.api.ExtensionConverterProviderKeeper;
+import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.openflowplugin.impl.services.FlowCapableTransactionServiceImpl;
 import org.opendaylight.openflowplugin.impl.services.NodeConfigServiceImpl;
 import org.opendaylight.openflowplugin.impl.services.PacketProcessingServiceImpl;
@@ -85,7 +87,9 @@ public class MdSalRegistrationUtils {
      * @param newRole       - role validation for {@link OfpRole#BECOMEMASTER}
      */
     public static void registerMasterServices(@CheckForNull final RpcContext rpcContext,
-                                              @CheckForNull final DeviceContext deviceContext, @CheckForNull final OfpRole newRole) {
+                                              @CheckForNull final DeviceContext deviceContext,
+                                              @CheckForNull final OfpRole newRole,
+                                              final ExtensionConverterProvider extensionConverterProvider) {
         Preconditions.checkArgument(rpcContext != null);
         Preconditions.checkArgument(deviceContext != null);
         Preconditions.checkArgument(newRole != null);
@@ -127,7 +131,8 @@ public class MdSalRegistrationUtils {
         rpcContext.registerRpcServiceImplementation(SalFlatBatchService.class, salFlatBatchService);
 
         // TODO: experimenter symmetric and multipart message services
-        rpcContext.registerRpcServiceImplementation(SalExperimenterMessageService.class, new SalExperimenterMessageServiceImpl(rpcContext, deviceContext));
+        rpcContext.registerRpcServiceImplementation(SalExperimenterMessageService.class,
+                new SalExperimenterMessageServiceImpl(rpcContext, deviceContext, extensionConverterProvider));
     }
 
     /**
index 80017d1948c82d3e385c3ae9b9cb5517b28561fa..af336d62c7ee983f05f4d48dd4c21669865d67db 100644 (file)
@@ -43,7 +43,7 @@ public class SalExperimenterMessageServiceImplTest extends ServiceMocking {
 
     @Override
     protected void setup() {
-        salExperimenterMessageService = new SalExperimenterMessageServiceImpl(mockedRequestContextStack, mockedDeviceContext);
+        salExperimenterMessageService = new SalExperimenterMessageServiceImpl(mockedRequestContextStack, mockedDeviceContext, extensionConverterProvider);
         Mockito.when(mockedDeviceContext.getExtensionConverterProvider()).thenReturn(extensionConverterProvider);
         Mockito.when(extensionConverterProvider.getMessageConverter(Matchers.<TypeVersionKey>any()))
                 .thenReturn(extensionConverter);
index 16da6bf9de35f4dc60ee3808cc1d795560170268..d36172c4b1266d95662e7aaf4e1703694e77390e 100644 (file)
@@ -25,6 +25,7 @@ import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
 import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
+import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.role.service.rev150727.OfpRole;
@@ -58,7 +59,9 @@ public class MdSalRegistrationUtilsTest {
         when(mockedDeviceInfo.getDatapathId()).thenReturn(mockedDataPathId);
 
         when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedConnectionContext);
-        MdSalRegistrationUtils.registerMasterServices(mockedRpcContext, mockedDeviceContext, OfpRole.BECOMEMASTER);
+
+        final ExtensionConverterProvider extensionConverterProvider = mock(ExtensionConverterProvider.class);
+        MdSalRegistrationUtils.registerMasterServices(mockedRpcContext, mockedDeviceContext, OfpRole.BECOMEMASTER, extensionConverterProvider);
         verify(mockedRpcContext, times(NUMBER_OF_RPC_SERVICE_REGISTRATION)).registerRpcServiceImplementation(
                 Matchers.<Class<RpcService>> any(), any(RpcService.class));
     }