<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>
<groupId>io.netty</groupId>
<artifactId>netty-buffer</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.infrautils</groupId>
- <artifactId>diagstatus-api</artifactId>
- </dependency>
</dependencies>
</project>
+++ /dev/null
-/*
- * 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);
-}
-
-
+++ /dev/null
-/*
- * 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
+++ /dev/null
-/*
- * 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);
- }
-}
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;
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 {
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;
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;
* @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";
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();
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();
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);
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 {
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;
*/
@RunWith(MockitoJUnitRunner.class)
public class SwitchConnectionProviderImpl02Test {
+ @Mock DiagStatusService diagStatusService;
@Mock SwitchConnectionHandler handler;
@Mock OFGeneralSerializer serializer;
@Mock OFGeneralDeserializer deserializer;
@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;
if (protocol != null) {
createConfig(protocol);
}
- provider = new SwitchConnectionProviderImpl(config,openflowPluginDiagStatusProvider);
+ provider = new SwitchConnectionProviderImpl(diagStatusService, config);
}
private void createConfig(final TransportProtocol protocol) throws UnknownHostException {
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;
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;
if (protocol != null) {
createConfig(protocol);
}
- provider = new SwitchConnectionProviderImpl(config, openflowPluginDiagStatusProvider);
+ provider = new SwitchConnectionProviderImpl(diagStatus, config);
}
private void createConfig(final TransportProtocol protocol) throws UnknownHostException {
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;
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)) {
*/
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;
/**
* @param config the SwitchConnectionConfig
* @return a SwitchConnectionProvider instance
*/
- SwitchConnectionProvider newInstance(SwitchConnectionConfig config,
- OpenflowDiagStatusProvider openflowPluginDiagStatusProvider);
+ SwitchConnectionProvider newInstance(SwitchConnectionConfig config);
}
<?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"
</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"/>
</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"/>
<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>
--- /dev/null
+/*
+ * 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));
+ }
+}
--- /dev/null
+/*
+ * 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);
+}
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;
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";
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;
}
@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());
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();
<argument ref="clusterSingletonServiceProvider"/>
<argument ref="entityOwnershipService"/>
<argument ref="mastershipChangeServiceManagerImpl"/>
- <argument ref="openflowDiagStatusProvider"/>
+ <argument ref="diagStatusProvider"/>
<argument ref="systemReadyMonitor"/>
</bean>
<service ref="openFlowPluginProviderImpl">
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"/>
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;
NotificationPublishService notificationPublishService;
@Mock
- OpenflowDiagStatusProvider ofPluginDiagstatusProvider;
+ DiagStatusProvider ofPluginDiagstatusProvider;
@Mock
SystemReadyMonitor systemReadyMonitor;