<?xml version="1.0" encoding="UTF-8"?>
<!--
-Copyright © 2017 Red Hat, Inc. and others.
+Copyright © 2017, 2018 Red Hat, Inc. and others.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
<type>xml</type>
<classifier>features</classifier>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.infrautils</groupId>
+ <artifactId>odl-infrautils-diagstatus</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ <type>xml</type>
+ <classifier>features</classifier>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>odl-ovsdb-southbound-api</artifactId>
<artifactId>southbound-impl</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ </dependency>
</dependencies>
<!--
<artifactId>guava</artifactId>
</dependency>
<!-- external dependencies -->
+ <dependency>
+ <groupId>org.opendaylight.infrautils</groupId>
+ <artifactId>diagstatus-api</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.cdi</groupId>
+ <artifactId>pax-cdi-api</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ </dependency>
<dependency>
<groupId>org.sonarsource.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
--- /dev/null
+/*
+ * Copyright (c) 2018 Red Hat, Inc. 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.ovsdb.southbound;
+
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
+import org.opendaylight.infrautils.diagstatus.ServiceDescriptor;
+import org.opendaylight.infrautils.diagstatus.ServiceState;
+import org.opendaylight.infrautils.diagstatus.ServiceStatusProvider;
+import org.ops4j.pax.cdi.api.OsgiServiceProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@OsgiServiceProvider(classes = ServiceStatusProvider.class)
+public class OvsdbDiagStatusProvider implements ServiceStatusProvider {
+
+ private static final Logger LOG = LoggerFactory.getLogger(OvsdbDiagStatusProvider.class);
+ private static final String OVSDB_SERVICE_NAME = "OVSDB";
+
+ private final DiagStatusService diagStatusService;
+ private volatile ServiceDescriptor serviceDescriptor;
+
+ public OvsdbDiagStatusProvider(final DiagStatusService diagStatusService) {
+ this.diagStatusService = diagStatusService;
+ diagStatusService.register(OVSDB_SERVICE_NAME);
+ }
+
+
+ public void reportStatus(ServiceState serviceState, String description) {
+ LOG.debug("reporting status as {} for {}", serviceState, OVSDB_SERVICE_NAME);
+ serviceDescriptor = new ServiceDescriptor(OVSDB_SERVICE_NAME, serviceState, description);
+ diagStatusService.report(serviceDescriptor);
+ }
+
+ @Override
+ public ServiceDescriptor getServiceDescriptor() {
+ // TODO Check 6640 port status to report dynamic status
+ return serviceDescriptor;
+ }
+}
/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2014, 2018 Cisco Systems, Inc. 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,
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
+import org.opendaylight.infrautils.diagstatus.ServiceState;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.mdsal.eos.binding.api.Entity;
private static final String SKIP_MONITORING_MANAGER_STATUS_PARAM = "skip-monitoring-manager-status";
private final AtomicBoolean registered = new AtomicBoolean(false);
private ListenerRegistration<SouthboundProvider> operTopologyRegistration;
+ private final OvsdbDiagStatusProvider ovsdbStatusProvider;
public SouthboundProvider(final DataBroker dataBroker,
final EntityOwnershipService entityOwnershipServiceDependency,
final OvsdbConnection ovsdbConnection,
final DOMSchemaService schemaService,
- final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
+ final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer,
+ final DiagStatusService diagStatusService) {
+
this.db = dataBroker;
this.entityOwnershipService = entityOwnershipServiceDependency;
registration = null;
this.ovsdbConnection = ovsdbConnection;
+ ovsdbStatusProvider = new OvsdbDiagStatusProvider(diagStatusService);
this.instanceIdentifierCodec = new InstanceIdentifierCodec(schemaService,
bindingNormalizedNodeSerializer);
*/
public void init() {
LOG.info("SouthboundProvider Session Initiated");
+ ovsdbStatusProvider.reportStatus(ServiceState.STARTING, "OVSDB initialization in progress");
this.txInvoker = new TransactionInvokerImpl(db);
cm = new OvsdbConnectionManager(db, txInvoker, entityOwnershipService, ovsdbConnection,
instanceIdentifierCodec);
try {
txInvoker.close();
} catch (InterruptedException e) {
+ ovsdbStatusProvider.reportStatus(ServiceState.ERROR, "OVSDB service shutdown error");
LOG.debug("SouthboundProvider failed to close TransactionInvoker.");
}
cm.close();
operTopologyRegistration.close();
operTopologyRegistration = null;
}
+ ovsdbStatusProvider.reportStatus(ServiceState.UNREGISTERED, "OVSDB Service stopped");
}
private void initializeOvsdbTopology(LogicalDatastoreType type) {
operTopologyRegistration = null;
}
}).start();
+ ovsdbStatusProvider.reportStatus(ServiceState.OPERATIONAL, "OVSDB initialization complete");
}
}
interface="org.opendaylight.mdsal.dom.api.DOMSchemaService" />
<reference id="bindingNormalizedNodeSerializer"
interface="org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer" />
+ <reference id="diagStatusService" interface="org.opendaylight.infrautils.diagstatus.DiagStatusService" />
- <cm:property-placeholder persistent-id="org.opendaylight.ovsdb.southbound" update-strategy="none">
+ <cm:property-placeholder persistent-id="org.opendaylight.ovsdb.southbound" update-strategy="none">
<cm:default-properties>
<cm:property name="skip-monitoring-manager-status" value="false"/>
</cm:default-properties>
<argument ref="ovsdbConnection" />
<argument ref="schemaService" />
<argument ref="bindingNormalizedNodeSerializer" />
+ <argument ref="diagStatusService"/>
<property name="skipMonitoringManagerStatus" value="${skip-monitoring-manager-status}"/>
</bean>
import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.infrautils.diagstatus.DiagStatusService;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.mdsal.eos.binding.api.Entity;
entityOwnershipService,
Mockito.mock(OvsdbConnection.class),
Mockito.mock(DOMSchemaService.class),
- Mockito.mock(BindingNormalizedNodeSerializer.class))) {
+ Mockito.mock(BindingNormalizedNodeSerializer.class),
+ Mockito.mock(DiagStatusService.class))) {
// Initiate the session
southboundProvider.init();
entityOwnershipService,
Mockito.mock(OvsdbConnection.class),
Mockito.mock(DOMSchemaService.class),
- Mockito.mock(BindingNormalizedNodeSerializer.class))) {
+ Mockito.mock(BindingNormalizedNodeSerializer.class),
+ Mockito.mock(DiagStatusService.class))) {
// Initiate the session
southboundProvider.init();
entityOwnershipService,
Mockito.mock(OvsdbConnection.class),
Mockito.mock(DOMSchemaService.class),
- Mockito.mock(BindingNormalizedNodeSerializer.class))) {
+ Mockito.mock(BindingNormalizedNodeSerializer.class),
+ Mockito.mock(DiagStatusService.class))) {
southboundProvider.init();
entityOwnershipService,
Mockito.mock(OvsdbConnection.class),
Mockito.mock(DOMSchemaService.class),
- Mockito.mock(BindingNormalizedNodeSerializer.class))) {
+ Mockito.mock(BindingNormalizedNodeSerializer.class),
+ Mockito.mock(DiagStatusService.class))) {
southboundProvider.init();