Remove OSGiOpenflowDiagStatusProvider 71/103171/4
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 8 Nov 2022 22:35:36 +0000 (23:35 +0100)
committerSangwook Ha <sangwook.ha@verizon.com>
Fri, 18 Nov 2022 02:35:11 +0000 (18:35 -0800)
We have constructor injection, hence we can unify this class with
DefaultOpenflowDiagStatusProvider.

Change-Id: I0a9d826c9d306b29c2325228294ad41dcff61141
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Signed-off-by: Sangwook Ha <sangwook.ha@verizon.com>
18 files changed:
applications/southbound-cli/pom.xml
openflowjava/openflow-protocol-api/pom.xml
openflowjava/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/connection/OpenflowDiagStatusProvider.java [deleted file]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/DefaultOpenflowDiagStatusProvider.java [deleted file]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OSGiOpenflowDiagStatusProvider.java [deleted file]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/SwitchConnectionProviderFactoryImpl.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/SwitchConnectionProviderImpl.java
openflowjava/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/core/connection/SwitchConnectionProviderImpl02Test.java
openflowjava/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/core/connection/SwitchConnectionProviderImplTest.java
openflowjava/openflow-protocol-it/src/test/java/org/opendaylight/openflowjava/protocol/it/integration/IntegrationTest.java
openflowjava/openflow-protocol-spi/src/main/java/org/opendaylight/openflowjava/protocol/spi/connection/SwitchConnectionProviderFactory.java
openflowjava/openflowjava-blueprint-config/src/main/resources/OSGI-INF/blueprint/openflowjava.xml
openflowplugin-impl/pom.xml
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/DefaultDiagStatusProvider.java [new file with mode: 0644]
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/DiagStatusProvider.java [new file with mode: 0644]
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java
openflowplugin-impl/src/main/resources/OSGI-INF/blueprint/openflowplugin-impl.xml
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImplTest.java

index 2732b67d4f73f604d0edffbc579a5bed2ba2cf39..10f8c888da54e03fb2e0a6eabb4746be9f1981ef 100644 (file)
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-binding-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.openflowplugin</groupId>
-            <artifactId>openflowplugin-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.infrautils</groupId>
+            <artifactId>diagstatus-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.openflowplugin</groupId>
+            <artifactId>openflowplugin-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.openflowplugin.model</groupId>
             <artifactId>model-flow-service</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.openflowplugin.applications</groupId>
+            <artifactId>forwardingrules-manager</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
             <artifactId>org.apache.karaf.shell.console</artifactId>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.framework</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.openflowplugin.applications</groupId>
-            <artifactId>forwardingrules-manager</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.guicedee.services</groupId>
             <artifactId>javax.inject</artifactId>
index c4abf7985a264b8a73e1eb9463fce756ea8fecea..5cb92490b00629745dabe754e5d320045da34724 100644 (file)
@@ -44,9 +44,5 @@
             <groupId>io.netty</groupId>
             <artifactId>netty-buffer</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.infrautils</groupId>
-            <artifactId>diagstatus-api</artifactId>
-        </dependency>
     </dependencies>
 </project>
diff --git a/openflowjava/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/connection/OpenflowDiagStatusProvider.java b/openflowjava/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/connection/OpenflowDiagStatusProvider.java
deleted file mode 100644 (file)
index dfb2c45..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. 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.openflowjava.protocol.api.connection;
-
-import org.opendaylight.infrautils.diagstatus.ServiceState;
-
-public interface OpenflowDiagStatusProvider {
-
-    void reportStatus(ServiceState serviceState);
-
-    void reportStatus(String diagStatusService, Throwable throwable);
-
-    void reportStatus(String diagStatusIdentifier, ServiceState serviceState, String description);
-
-    void reportStatus(String diagStatusIdentifier, ServiceState serviceState);
-}
-
-
diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/DefaultOpenflowDiagStatusProvider.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/DefaultOpenflowDiagStatusProvider.java
deleted file mode 100644 (file)
index 919056e..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. 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.openflowjava.protocol.impl.core;
-
-import static org.opendaylight.infrautils.diagstatus.ServiceState.ERROR;
-import static org.opendaylight.infrautils.diagstatus.ServiceState.OPERATIONAL;
-import static org.opendaylight.infrautils.diagstatus.ServiceState.STARTING;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import javax.annotation.PreDestroy;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import org.opendaylight.infrautils.diagstatus.DiagStatusService;
-import org.opendaylight.infrautils.diagstatus.ServiceDescriptor;
-import org.opendaylight.infrautils.diagstatus.ServiceRegistration;
-import org.opendaylight.infrautils.diagstatus.ServiceState;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Singleton
-public final class DefaultOpenflowDiagStatusProvider implements OpenflowDiagStatusProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(DefaultOpenflowDiagStatusProvider.class);
-    private static final String OPENFLOW_SERVICE = "OPENFLOW";
-    private static final String OPENFLOW_SERVER_6633 = "OPENFLOW_SERVER_6633";
-    private static final String OPENFLOW_SERVER_6653 = "OPENFLOW_SERVER_6653";
-    private static final String OPENFLOW_SERVICE_AGGREGATE = OPENFLOW_SERVICE;
-
-    private final ConcurrentMap<String, ServiceState> statusMap = new ConcurrentHashMap<>(Map.of(
-        OPENFLOW_SERVICE, STARTING,
-        OPENFLOW_SERVER_6633, STARTING,
-        OPENFLOW_SERVER_6653, STARTING));
-    private final DiagStatusService diagStatusService;
-
-    private ServiceRegistration reg;
-
-    @Inject
-    public DefaultOpenflowDiagStatusProvider(final DiagStatusService diagStatusService) {
-        this.diagStatusService = diagStatusService;
-        reg = diagStatusService.register(OPENFLOW_SERVICE_AGGREGATE);
-    }
-
-    @PreDestroy
-    public void close() {
-        if (reg != null) {
-            reg.unregister();
-            reg = null;
-        }
-    }
-
-    @Override
-    public void reportStatus(final ServiceState serviceState) {
-        LOG.debug("reporting status as {} for {}", serviceState,OPENFLOW_SERVICE_AGGREGATE);
-        diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_AGGREGATE, serviceState));
-    }
-
-    @Override
-    public void reportStatus(final String diagStatusIdentifier, final Throwable throwable) {
-        LOG.debug("Reporting error for {} as {}",  diagStatusIdentifier, throwable.toString());
-        statusMap.replace(diagStatusIdentifier, ERROR);
-        diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_AGGREGATE, throwable));
-    }
-
-    @Override
-    public void reportStatus(final String diagStatusIdentifier, final ServiceState serviceState,
-                             final String description) {
-        LOG.debug("Reporting status {} for {} and desc {}", serviceState, diagStatusIdentifier, description);
-        diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_AGGREGATE, serviceState, description));
-    }
-
-    @Override
-    public void reportStatus(final String diagStatusIdentifier, final ServiceState serviceState) {
-        statusMap.replace(diagStatusIdentifier, serviceState);
-        LOG.info("The report status is {} for {}", serviceState, diagStatusIdentifier);
-        reportStatus();
-    }
-
-    public void reportStatus() {
-        if (statusMap.values().stream().allMatch(OPERATIONAL::equals)) {
-            reportStatus(OPERATIONAL);
-        }
-    }
-}
\ No newline at end of file
diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OSGiOpenflowDiagStatusProvider.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OSGiOpenflowDiagStatusProvider.java
deleted file mode 100644 (file)
index 33207ca..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.openflowjava.protocol.impl.core;
-
-import static com.google.common.base.Verify.verifyNotNull;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.infrautils.diagstatus.DiagStatusService;
-import org.opendaylight.infrautils.diagstatus.ServiceState;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Component(immediate = true)
-// FIXME: integrate with DefaultOpenflowDiagStatusProvider once we have OSGi R7
-public final class OSGiOpenflowDiagStatusProvider implements OpenflowDiagStatusProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(OSGiOpenflowDiagStatusProvider.class);
-
-    @Reference
-    DiagStatusService diagStatus;
-
-    private DefaultOpenflowDiagStatusProvider delegate = null;
-
-    @Override
-    public void reportStatus(final ServiceState serviceState) {
-        delegate().reportStatus(serviceState);
-    }
-
-    @Override
-    public void reportStatus(final String diagStatusService, final Throwable throwable) {
-        delegate().reportStatus(diagStatusService, throwable);
-    }
-
-    @Override
-    public void reportStatus(final String diagStatusIdentifier, final ServiceState serviceState,
-            final String description) {
-        delegate().reportStatus(diagStatusIdentifier, serviceState, description);
-    }
-
-    @Override
-    public void reportStatus(final String diagStatusIdentifier, final ServiceState serviceState) {
-        delegate().reportStatus(diagStatusIdentifier, serviceState);
-    }
-
-    @Activate
-    void activate() {
-        delegate = new DefaultOpenflowDiagStatusProvider(diagStatus);
-        LOG.info("OpenFlow diagnostic status provider activated");
-    }
-
-    @Deactivate
-    void deactivate() {
-        delegate.close();
-        delegate = null;
-        LOG.info("OpenFlow diagnostic status provider deactivated");
-    }
-
-    private @NonNull DefaultOpenflowDiagStatusProvider delegate() {
-        return verifyNotNull(delegate);
-    }
-}
index 445bb7a0b05989dde0fd0ae6be72a4d032bcbcad..7ee78a13ff930e0dbed1b6c8a6bd18526e5994a7 100644 (file)
@@ -14,9 +14,8 @@ import java.net.UnknownHostException;
 import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.kohsuke.MetaInfServices;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionConfiguration;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
 import org.opendaylight.openflowjava.protocol.api.connection.ThreadConfiguration;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfiguration;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
@@ -27,24 +26,27 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.T
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow._switch.connection.config.rev160506.SwitchConnectionConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow._switch.connection.config.rev160506._switch.connection.config.Threads;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow._switch.connection.config.rev160506._switch.connection.config.Tls;
+import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 
 /**
  * Implementation of the SwitchConnectionProviderFactory interface.
  */
-@MetaInfServices
 @Singleton
-@Component(immediate = true)
+@Component
 public class SwitchConnectionProviderFactoryImpl implements SwitchConnectionProviderFactory {
+    private final DiagStatusService diagStatus;
+
     @Inject
-    public SwitchConnectionProviderFactoryImpl() {
-        // Exposed for DI
+    @Activate
+    public SwitchConnectionProviderFactoryImpl(@Reference final DiagStatusService diagStatus) {
+        this.diagStatus = requireNonNull(diagStatus);
     }
 
     @Override
-    public SwitchConnectionProvider newInstance(final SwitchConnectionConfig config,
-                                                final OpenflowDiagStatusProvider diagStatus) {
-        return new SwitchConnectionProviderImpl(new ConnectionConfigurationImpl(config), diagStatus);
+    public SwitchConnectionProvider newInstance(final SwitchConnectionConfig config) {
+        return new SwitchConnectionProviderImpl(diagStatus, new ConnectionConfigurationImpl(config));
     }
 
     private static class ConnectionConfigurationImpl implements ConnectionConfiguration {
index 39fb0a9d8e9278f69cc3bb4ab1a0e556c7e9da5a..d5c72a848783d47fdc2a2d415d4338eaa401aea7 100755 (executable)
@@ -10,6 +10,7 @@
 package org.opendaylight.openflowjava.protocol.impl.core;
 
 import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.requireNonNull;
 
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
@@ -19,10 +20,12 @@ import com.google.common.util.concurrent.MoreExecutors;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.epoll.Epoll;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
+import org.opendaylight.infrautils.diagstatus.ServiceDescriptor;
+import org.opendaylight.infrautils.diagstatus.ServiceRegistration;
 import org.opendaylight.infrautils.diagstatus.ServiceState;
 import org.opendaylight.infrautils.utils.concurrent.Executors;
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionConfiguration;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
 import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -68,7 +71,6 @@ import org.slf4j.LoggerFactory;
  * @author michal.polkorab
  */
 public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, ConnectionInitializer {
-
     private static final Logger LOG = LoggerFactory.getLogger(SwitchConnectionProviderImpl.class);
     private static final String THREAD_NAME_PREFIX = "OFP-SwitchConnectionProvider-Udp/TcpHandler";
     private static final String OPENFLOW_JAVA_SERVICE_NAME_PREFIX = "OPENFLOW_SERVER";
@@ -81,17 +83,22 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, C
     private final DeserializerRegistry deserializerRegistry;
     private final DeserializationFactory deserializationFactory;
     private final ListeningExecutorService listeningExecutorService;
+    private final DiagStatusService diagStatus;
     private final String diagStatusIdentifier;
     private final String threadName;
+
     private TcpConnectionInitializer connectionInitializer;
-    private final OpenflowDiagStatusProvider openflowDiagStatusProvider;
+    // FIXME: clean this up when no longer needed
+    private final ServiceRegistration diagReg;
 
-    public SwitchConnectionProviderImpl(final @Nullable ConnectionConfiguration connConfig,
-            final OpenflowDiagStatusProvider openflowDiagStatusProvider) {
+    public SwitchConnectionProviderImpl(final DiagStatusService diagStatus,
+            final @Nullable ConnectionConfiguration connConfig) {
         this.connConfig = connConfig;
         String connectionSuffix = createConnectionSuffix(connConfig);
+        this.diagStatus = requireNonNull(diagStatus);
         diagStatusIdentifier = OPENFLOW_JAVA_SERVICE_NAME_PREFIX + connectionSuffix;
-        this.openflowDiagStatusProvider = openflowDiagStatusProvider;
+        diagReg = diagStatus.register(diagStatusIdentifier);
+
         threadName = THREAD_NAME_PREFIX + connectionSuffix;
         listeningExecutorService = Executors.newListeningSingleThreadExecutor(threadName, LOG);
         serializerRegistry = new SerializerRegistryImpl();
@@ -140,13 +147,13 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, C
             Futures.addCallback(listeningExecutorService.submit(serverFacade), new FutureCallback<Object>() {
                 @Override
                 public void onFailure(final Throwable throwable) {
-                    openflowDiagStatusProvider.reportStatus(diagStatusIdentifier, throwable);
+                    diagStatus.report(new ServiceDescriptor(diagStatusIdentifier, throwable));
                 }
 
                 @Override
                 public void onSuccess(final Object result) {
-                    openflowDiagStatusProvider.reportStatus(diagStatusIdentifier, ServiceState.ERROR,
-                            threadName + " terminated");
+                    diagStatus.report(new ServiceDescriptor(diagStatusIdentifier, ServiceState.ERROR,
+                        threadName + " terminated"));
                 }
             }, MoreExecutors.directExecutor());
             return serverFacade.getIsOnlineFuture();
@@ -175,8 +182,8 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, C
         boolean isEpollEnabled = Epoll.isAvailable();
 
         if (TransportProtocol.TCP.equals(transportProtocol) || TransportProtocol.TLS.equals(transportProtocol)) {
-            server = new TcpHandler(connConfig.getAddress(), connConfig.getPort(), () ->
-                    openflowDiagStatusProvider.reportStatus(diagStatusIdentifier, ServiceState.OPERATIONAL));
+            server = new TcpHandler(connConfig.getAddress(), connConfig.getPort(),
+                () -> diagStatus.report(new ServiceDescriptor(diagStatusIdentifier, ServiceState.OPERATIONAL)));
             final TcpChannelInitializer channelInitializer = factory.createPublishingChannelInitializer();
             ((TcpHandler) server).setChannelInitializer(channelInitializer);
             ((TcpHandler) server).initiateEventLoopGroups(connConfig.getThreadConfiguration(), isEpollEnabled);
@@ -185,8 +192,8 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, C
             connectionInitializer.setChannelInitializer(channelInitializer);
             connectionInitializer.run();
         } else if (TransportProtocol.UDP.equals(transportProtocol)) {
-            server = new UdpHandler(connConfig.getAddress(), connConfig.getPort(), () ->
-                    openflowDiagStatusProvider.reportStatus(diagStatusIdentifier, ServiceState.OPERATIONAL));
+            server = new UdpHandler(connConfig.getAddress(), connConfig.getPort(),
+                () -> diagStatus.report(new ServiceDescriptor(diagStatusIdentifier, ServiceState.OPERATIONAL)));
             ((UdpHandler) server).initiateEventLoopGroups(connConfig.getThreadConfiguration(), isEpollEnabled);
             ((UdpHandler) server).setChannelInitializer(factory.createUdpChannelInitializer());
         } else {
index 2a9aced7dd55af17b024bbd2ef79039d3791844f..035efd39ab6308e69fc61ce24ca7769e37144050 100755 (executable)
@@ -16,7 +16,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfiguration;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfigurationImpl;
@@ -62,6 +62,7 @@ import org.opendaylight.yangtools.yang.common.Uint32;
  */
 @RunWith(MockitoJUnitRunner.class)
 public class SwitchConnectionProviderImpl02Test {
+    @Mock DiagStatusService diagStatusService;
     @Mock SwitchConnectionHandler handler;
     @Mock OFGeneralSerializer serializer;
     @Mock OFGeneralDeserializer deserializer;
@@ -74,7 +75,6 @@ public class SwitchConnectionProviderImpl02Test {
     @Mock OFSerializer<ExperimenterDataOfChoice> serializerMultipartRequestExpCase;
     @Mock OFSerializer<MeterBandExperimenterCase> serializerMeterBandExpCase;
     @Mock ConnectionConfigurationImpl config;
-    @Mock OpenflowDiagStatusProvider openflowPluginDiagStatusProvider;
     private static final int CHANNEL_OUTBOUND_QUEUE_SIZE = 1024;
     private static final int SWITCH_IDLE_TIMEOUT = 2000;
     private TlsConfiguration tlsConfiguration;
@@ -90,7 +90,7 @@ public class SwitchConnectionProviderImpl02Test {
         if (protocol != null) {
             createConfig(protocol);
         }
-        provider = new SwitchConnectionProviderImpl(config,openflowPluginDiagStatusProvider);
+        provider = new SwitchConnectionProviderImpl(diagStatusService, config);
     }
 
     private void createConfig(final TransportProtocol protocol) throws UnknownHostException {
index a66f8907f58f35d0da7882ec59c6e16460346060..f80dce40aeaf2afc0702eb2a20d512f38fe0ed0c 100644 (file)
@@ -23,7 +23,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfiguration;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfigurationImpl;
@@ -42,7 +42,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.T
 public class SwitchConnectionProviderImplTest {
 
     @Mock SwitchConnectionHandler handler;
-    @Mock OpenflowDiagStatusProvider openflowPluginDiagStatusProvider;
+    @Mock DiagStatusService diagStatus;
 
     private static final int SWITCH_IDLE_TIMEOUT = 2000;
     private static final int WAIT_TIMEOUT = 2000;
@@ -61,7 +61,7 @@ public class SwitchConnectionProviderImplTest {
         if (protocol != null) {
             createConfig(protocol);
         }
-        provider = new SwitchConnectionProviderImpl(config, openflowPluginDiagStatusProvider);
+        provider = new SwitchConnectionProviderImpl(diagStatus, config);
     }
 
     private void createConfig(final TransportProtocol protocol) throws UnknownHostException {
index fde9d56876c2b434826305ef3f29d7ca31d70652..8a9df364d5af224dff8cf3db735c0b64574cff6c 100644 (file)
@@ -22,7 +22,7 @@ import org.mockito.ArgumentMatchers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfiguration;
 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfigurationImpl;
 import org.opendaylight.openflowjava.protocol.impl.clients.ClientEvent;
@@ -99,8 +99,7 @@ public class IntegrationTest {
         connConfig.setTransferProtocol(protocol);
         mockPlugin = new MockPlugin(executorService);
 
-        switchConnectionProvider = new SwitchConnectionProviderImpl(connConfig,
-                Mockito.mock(OpenflowDiagStatusProvider.class));
+        switchConnectionProvider = new SwitchConnectionProviderImpl(Mockito.mock(DiagStatusService.class), connConfig);
         switchConnectionProvider.setSwitchConnectionHandler(mockPlugin);
         switchConnectionProvider.startup().get(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
         if (protocol.equals(TransportProtocol.TCP) || protocol.equals(TransportProtocol.TLS)) {
index d0447af2dd706c79f7423e3dc7919f5f129b06a8..9ef8c4dda660e5b50ff94d2c619c992260c87483 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.openflowjava.protocol.spi.connection;
 
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow._switch.connection.config.rev160506.SwitchConnectionConfig;
 
 /**
@@ -22,6 +21,5 @@ public interface SwitchConnectionProviderFactory {
      * @param config the SwitchConnectionConfig
      * @return a SwitchConnectionProvider instance
      */
-    SwitchConnectionProvider newInstance(SwitchConnectionConfig config,
-                                         OpenflowDiagStatusProvider openflowPluginDiagStatusProvider);
+    SwitchConnectionProvider newInstance(SwitchConnectionConfig config);
 }
index 9043183f32723c6db315ff01f1ce0c1d9ac535a2..146faabec6147051932fb6dd50b830034ecb861b 100644 (file)
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
            xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
-  <reference id="openflowPluginDiagStatusProvider" interface="org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider"/>
   <reference id="switchConnectionProviderFactory" interface="org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProviderFactory"/>
   <!-- Create OF switch connection provider on port 6653 (default) -->
   <odl:clustered-app-config id="defaultSwitchConnConfig" default-config-file-name="default-openflow-connection-config.xml"
@@ -10,7 +9,6 @@
   </odl:clustered-app-config>
   <bean id="defaultSwitchConnProvider" factory-ref="switchConnectionProviderFactory" factory-method="newInstance">
     <argument ref="defaultSwitchConnConfig"/>
-    <argument ref="openflowPluginDiagStatusProvider"/>
   </bean>
   <service ref="defaultSwitchConnProvider" interface="org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider"
           odl:type="openflow-switch-connection-provider-default-impl"/>
@@ -22,7 +20,6 @@
   </odl:clustered-app-config>
   <bean id="legacySwitchConnProvider" factory-ref="switchConnectionProviderFactory" factory-method="newInstance">
     <argument ref="legacySwitchConnConfig"/>
-    <argument ref="openflowPluginDiagStatusProvider"/>
   </bean>
   <service ref="legacySwitchConnProvider" interface="org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider"
           odl:type="openflow-switch-connection-provider-legacy-impl"/>
index d86c975d99cb7e8b19b740a940110e13faa0b89b..d368486d21666491c90dad1238eeb9a64de7a174 100644 (file)
             <artifactId>javax.inject</artifactId>
             <optional>true</optional>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/DefaultDiagStatusProvider.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/DefaultDiagStatusProvider.java
new file mode 100644 (file)
index 0000000..f92ffef
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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.openflowplugin.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
+import org.opendaylight.infrautils.diagstatus.ServiceDescriptor;
+import org.opendaylight.infrautils.diagstatus.ServiceRegistration;
+import org.opendaylight.infrautils.diagstatus.ServiceState;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Singleton
+@Component
+public final class DefaultDiagStatusProvider implements DiagStatusProvider {
+    private static final Logger LOG = LoggerFactory.getLogger(DefaultDiagStatusProvider.class);
+    private static final String OPENFLOW_SERVICE_NAME = "OPENFLOW";
+
+    private final DiagStatusService diagStatusService;
+
+    private ServiceRegistration reg;
+
+    @Inject
+    @Activate
+    public DefaultDiagStatusProvider(@Reference final DiagStatusService diagStatusService) {
+        this.diagStatusService = requireNonNull(diagStatusService);
+        reg = diagStatusService.register(OPENFLOW_SERVICE_NAME);
+    }
+
+    @PreDestroy
+    @Deactivate
+    public void close() {
+        if (reg != null) {
+            reg.unregister();
+            reg = null;
+        }
+    }
+
+    @Override
+    public void reportStatus(ServiceState serviceState) {
+        LOG.debug("reporting status as {} for {}", serviceState, OPENFLOW_SERVICE_NAME);
+        diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_NAME, serviceState));
+    }
+
+    @Override
+    public void reportStatus(ServiceState serviceState, Throwable throwable) {
+        LOG.debug("reporting status as {} for {}", serviceState, OPENFLOW_SERVICE_NAME);
+        diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_NAME, throwable));
+    }
+
+    @Override
+    public void reportStatus(ServiceState serviceState, String description) {
+        LOG.debug("reporting status as {} for {}", serviceState, OPENFLOW_SERVICE_NAME);
+        diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_NAME, serviceState, description));
+    }
+}
diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/DiagStatusProvider.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/DiagStatusProvider.java
new file mode 100644 (file)
index 0000000..7218049
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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.openflowplugin.impl;
+
+import org.opendaylight.infrautils.diagstatus.ServiceState;
+
+public interface DiagStatusProvider {
+
+    void reportStatus(ServiceState serviceState);
+
+    void reportStatus(ServiceState serviceState, Throwable throwable);
+
+    void reportStatus(ServiceState serviceState, String description);
+}
index 5eea2de76ba8760d225da36c3aa5051fa9209c6f..6890f037821ce374f1fce07547f2fc2e8c6336d1 100644 (file)
@@ -45,7 +45,6 @@ import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProviderList;
 import org.opendaylight.openflowplugin.api.openflow.FlowGroupInfoHistories;
@@ -126,7 +125,7 @@ public class OpenFlowPluginProviderImpl implements
     private ConnectionManager connectionManager;
     private ExecutorService executorService;
     private ContextChainHolderImpl contextChainHolder;
-    private final OpenflowDiagStatusProvider openflowDiagStatusProvider;
+    private final DiagStatusProvider diagStatusProvider;
     private final SystemReadyMonitor systemReadyMonitor;
     private final SettableFuture<Void> fullyStarted = SettableFuture.create();
     private static final String OPENFLOW_SERVICE_NAME = "OPENFLOW";
@@ -144,20 +143,20 @@ public class OpenFlowPluginProviderImpl implements
                                final ClusterSingletonServiceProvider singletonServiceProvider,
                                final EntityOwnershipService entityOwnershipService,
                                final MastershipChangeServiceManager mastershipChangeServiceManager,
-                               final OpenflowDiagStatusProvider openflowDiagStatusProvider,
+                               final DiagStatusProvider diagStatusProvider,
                                final SystemReadyMonitor systemReadyMonitor) {
         this.switchConnectionProviders = switchConnectionProviders;
-        this.dataBroker = pingPongDataBroker;
+        dataBroker = pingPongDataBroker;
         this.rpcProviderRegistry = rpcProviderRegistry;
         this.notificationPublishService = notificationPublishService;
-        this.singletonServicesProvider = singletonServiceProvider;
+        singletonServicesProvider = singletonServiceProvider;
         this.entityOwnershipService = entityOwnershipService;
         convertorManager = ConvertorManagerFactory.createDefaultManager();
         extensionConverterManager = new ExtensionConverterManagerImpl();
         deviceInitializerProvider = DeviceInitializerProviderFactory.createDefaultProvider();
         config = new OpenFlowProviderConfigImpl(configurationService);
         this.mastershipChangeServiceManager = mastershipChangeServiceManager;
-        this.openflowDiagStatusProvider = openflowDiagStatusProvider;
+        this.diagStatusProvider = diagStatusProvider;
         this.systemReadyMonitor = systemReadyMonitor;
     }
 
@@ -181,14 +180,14 @@ public class OpenFlowPluginProviderImpl implements
             @Override
             public void onSuccess(final List<Boolean> result) {
                 LOG.info("All switchConnectionProviders are up and running ({}).", result.size());
-                openflowDiagStatusProvider.reportStatus(OPENFLOW_SERVICE_NAME, ServiceState.OPERATIONAL);
+                diagStatusProvider.reportStatus(ServiceState.OPERATIONAL);
                 fullyStarted.set(null);
             }
 
             @Override
             public void onFailure(final Throwable throwable) {
                 LOG.warn("Some switchConnectionProviders failed to start.", throwable);
-                openflowDiagStatusProvider.reportStatus(OPENFLOW_SERVICE_NAME, throwable);
+                diagStatusProvider.reportStatus(ServiceState.ERROR, throwable);
                 fullyStarted.setException(throwable);
             }
         }, MoreExecutors.directExecutor());
@@ -328,7 +327,7 @@ public class OpenFlowPluginProviderImpl implements
         gracefulShutdown(executorService);
         gracefulShutdown(hashedWheelTimer);
         unregisterMXBean(MESSAGE_INTELLIGENCE_AGENCY_MX_BEAN_NAME);
-        openflowDiagStatusProvider.reportStatus(ServiceState.UNREGISTERED);
+        diagStatusProvider.reportStatus(ServiceState.UNREGISTERED);
         try {
             if (connectionManager != null) {
                 connectionManager.close();
index fc1cf6e4e1db6ea4f040ac30e49d993fae4cad78..6413e46daa58f80384f3c889d734d22568c4a110 100644 (file)
@@ -17,7 +17,7 @@
     <argument ref="clusterSingletonServiceProvider"/>
     <argument ref="entityOwnershipService"/>
     <argument ref="mastershipChangeServiceManagerImpl"/>
-    <argument ref="openflowDiagStatusProvider"/>
+    <argument ref="diagStatusProvider"/>
     <argument ref="systemReadyMonitor"/>
   </bean>
   <service ref="openFlowPluginProviderImpl">
@@ -76,8 +76,8 @@
              interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
   <reference id="entityOwnershipService"
              interface="org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService"/>
-  <reference id="openflowDiagStatusProvider"
-             interface="org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider"/>
+  <reference id="diagStatusProvider"
+             interface="org.opendaylight.openflowplugin.impl.DiagStatusProvider"/>
   <reference id="systemReadyMonitor"
              interface="org.opendaylight.infrautils.ready.SystemReadyMonitor"/>
 
index f182916bcaead1dffcbb47a7cfd6cb06a2314bfa..1b875c86063659b1b84fd7bf45c04547ee81b5ae 100644 (file)
@@ -28,7 +28,6 @@ import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProviderList;
 import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationProperty;
@@ -52,7 +51,7 @@ public class OpenFlowPluginProviderImplTest {
     NotificationPublishService notificationPublishService;
 
     @Mock
-    OpenflowDiagStatusProvider ofPluginDiagstatusProvider;
+    DiagStatusProvider ofPluginDiagstatusProvider;
 
     @Mock
     SystemReadyMonitor systemReadyMonitor;