* 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.statistics;
import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
import org.opendaylight.openflowplugin.api.ConnectionException;
import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
import org.opendaylight.openflowplugin.api.openflow.lifecycle.ContextChainMastershipState;
import org.opendaylight.openflowplugin.api.openflow.lifecycle.ContextChainMastershipWatcher;
+import org.opendaylight.openflowplugin.api.openflow.lifecycle.DeviceInitializationContext;
import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsContext;
import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
import org.opendaylight.openflowplugin.impl.rpc.AbstractRequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class StatisticsContextImpl<T extends OfHeader> implements StatisticsContext {
+class StatisticsContextImpl<T extends OfHeader> implements StatisticsContext, DeviceInitializationContext {
private static final Logger LOG = LoggerFactory.getLogger(StatisticsContextImpl.class);
private static final String CONNECTION_CLOSED = "Connection closed.";
@Nonnull final MultipartWriterProvider statisticsWriterProvider,
@Nonnull final ListeningExecutorService executorService,
@Nonnull final OpenflowProviderConfig config,
- boolean isStatisticsPollingOn,
- boolean isUsingReconciliationFramework) {
+ final boolean isStatisticsPollingOn,
+ final boolean isUsingReconciliationFramework) {
this.deviceContext = deviceContext;
this.devState = Preconditions.checkNotNull(deviceContext.getDeviceState());
this.executorService = executorService;
this.config = config;
this.convertorExecutor = convertorExecutor;
this.deviceInfo = deviceContext.getDeviceInfo();
- this.statisticsPollingInterval = config.getBasicTimerDelay().getValue();
- this.maximumPollingDelay = config.getMaximumTimerDelay().getValue();
+ this.statisticsPollingInterval = config.getBasicTimerDelay().getValue().toJava();
+ this.maximumPollingDelay = config.getMaximumTimerDelay().getValue().toJava();
this.statisticsWriterProvider = statisticsWriterProvider;
this.isUsingReconciliationFramework = isUsingReconciliationFramework;
@Override
public <O> RequestContext<O> createRequestContext() {
- final AbstractRequestContext<O> ret = new AbstractRequestContext<O>(deviceInfo.reserveXidForDeviceMessage()) {
+ final AbstractRequestContext<O> ret = new AbstractRequestContext<>(deviceInfo.reserveXidForDeviceMessage()) {
@Override
public void close() {
requestContexts.remove(this);
@Override
public void instantiateServiceInstance() {
+
+ }
+
+ @Override
+ public void initializeDevice() {
final List<MultipartType> statListForCollecting = new ArrayList<>();
if (devState.isTableStatisticsAvailable() && config.isIsTableStatisticsPollingOn()) {
public void close() {
Futures.addCallback(stopGatheringData(), new FutureCallback<Void>() {
@Override
- public void onSuccess(@Nullable final Void result) {
+ public void onSuccess(final Void result) {
requestContexts.forEach(requestContext -> RequestContextUtil
.closeRequestContextWithRpcError(requestContext, CONNECTION_CLOSED));
}
StatisticsGatheringUtils.markDeviceStateSnapshotStart(deviceInfo, deviceContext);
// recreate gathering future if it should be recreated
- final ListenableFuture<Boolean> lastDataGathering =
- Objects.isNull(future) || future.isCancelled() || future.isDone() ? Futures
- .immediateFuture(Boolean.TRUE) : future;
+ final ListenableFuture<Boolean> lastDataGathering = future == null || future.isCancelled()
+ || future.isDone() ? Futures.immediateFuture(Boolean.TRUE) : future;
// build statistics gathering future
final ListenableFuture<Boolean> newDataGathering = collectingStatType.stream()
// write end timestamp to state snapshot container
Futures.addCallback(newDataGathering, new FutureCallback<Boolean>() {
@Override
- public void onSuccess(@Nonnull final Boolean result) {
+ public void onSuccess(final Boolean result) {
StatisticsGatheringUtils.markDeviceStateSnapshotEnd(deviceInfo, deviceContext, result);
}
private void cancelLastDataGathering() {
final ListenableFuture<Boolean> future = lastDataGatheringRef.getAndSet(null);
- if (Objects.nonNull(future) && !future.isDone() && !future.isCancelled()) {
+ if (future != null && !future.isDone() && !future.isCancelled()) {
future.cancel(true);
}
}
private final class InitialSubmitCallback implements FutureCallback<Boolean> {
@Override
- public void onSuccess(@Nullable final Boolean result) {
- contextChainMastershipWatcher
- .onMasterRoleAcquired(deviceInfo, ContextChainMastershipState.INITIAL_GATHERING);
-
+ public void onSuccess(final Boolean result) {
if (!isUsingReconciliationFramework) {
continueInitializationAfterReconciliation();
}
}
@Override
- public void onFailure(@Nonnull final Throwable throwable) {
+ public void onFailure(final Throwable throwable) {
contextChainMastershipWatcher.onNotAbleToStartMastershipMandatory(deviceInfo,
"Initial gathering statistics "
+ "unsuccessful: "