import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import io.netty.util.HashedWheelTimer;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Collection;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.NotificationService;
-import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
import org.opendaylight.openflowplugin.api.openflow.OpenFlowPluginProvider;
import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionManager;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceManager;
-import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleConductor;
import org.opendaylight.openflowplugin.api.openflow.role.RoleManager;
import org.opendaylight.openflowplugin.api.openflow.rpc.RpcManager;
import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsManager;
private static final Logger LOG = LoggerFactory.getLogger(OpenFlowPluginProviderImpl.class);
private static final MessageIntelligenceAgency messageIntelligenceAgency = new MessageIntelligenceAgencyImpl();
+ private static final int TICKS_PER_WHEEL = 500;
+ // 0.5 sec.
+ private static final long TICK_DURATION = 10;
+
+ private final HashedWheelTimer hashedWheelTimer = new HashedWheelTimer(TICK_DURATION, TimeUnit.MILLISECONDS, TICKS_PER_WHEEL);
private final int rpcRequestsQuota;
private final long globalNotificationQuota;
private ConnectionManager connectionManager;
private NotificationService notificationProviderService;
private NotificationPublishService notificationPublishService;
- private EntityOwnershipService entityOwnershipService;
-
private ExtensionConverterManager extensionConverterManager;
-
private DataBroker dataBroker;
private Collection<SwitchConnectionProvider> switchConnectionProviders;
private boolean switchFeaturesMandatory = false;
private boolean isStatisticsPollingOff = false;
private boolean isStatisticsRpcEnabled;
private boolean isNotificationFlowRemovedOff = false;
+ private boolean skipTableFeatures = true;
- private final LifecycleConductor conductor;
private final ThreadPoolExecutor threadPool;
private ClusterSingletonServiceProvider singletonServicesProvider;
Preconditions.checkNotNull(threadPoolMaxThreads),
Preconditions.checkNotNull(threadPoolTimeout), TimeUnit.SECONDS,
new SynchronousQueue<>(), "ofppool");
-
convertorManager = ConvertorManagerFactory.createDefaultManager();
- conductor = new LifecycleConductorImpl(messageIntelligenceAgency, convertorManager);
}
@Override
return switchFeaturesMandatory;
}
- @Override
- public void setEntityOwnershipService(final EntityOwnershipService entityOwnershipService) {
- this.entityOwnershipService = entityOwnershipService;
- }
-
@Override
public void setBarrierCountLimit(final int barrierCountLimit) {
this.barrierCountLimit = barrierCountLimit;
this.isNotificationFlowRemovedOff = isNotificationFlowRemovedOff;
}
+ @Override
public void setClusteringSingletonServicesProvider(ClusterSingletonServiceProvider singletonServicesProvider) {
this.singletonServicesProvider = singletonServicesProvider;
}
+ @Override
+ public void setSkipTableFeatures(final boolean skipTableFeatures){
+ this.skipTableFeatures = skipTableFeatures;
+ }
@Override
public void setSwitchFeaturesMandatory(final boolean switchFeaturesMandatory) {
switchFeaturesMandatory,
barrierInterval,
barrierCountLimit,
- conductor,
+ getMessageIntelligenceAgency(),
isNotificationFlowRemovedOff,
+ singletonServicesProvider,
+ notificationPublishService,
+ hashedWheelTimer,
convertorManager,
- singletonServicesProvider);
- ((ExtensionConverterProviderKeeper) conductor).setExtensionConverterProvider(extensionConverterManager);
- ((ExtensionConverterProviderKeeper) deviceManager).setExtensionConverterProvider(extensionConverterManager);
-
- conductor.setSafelyManager(deviceManager);
- conductor.setNotificationPublishService(notificationPublishService);
+ skipTableFeatures);
- statisticsManager = new StatisticsManagerImpl(rpcProviderRegistry, isStatisticsPollingOff, conductor, convertorManager);
- roleManager = new RoleManagerImpl(dataBroker, conductor);
- conductor.setSafelyManager(statisticsManager);
+ ((ExtensionConverterProviderKeeper) deviceManager).setExtensionConverterProvider(extensionConverterManager);
- rpcManager = new RpcManagerImpl(rpcProviderRegistry, rpcRequestsQuota, conductor, extensionConverterManager, convertorManager, notificationPublishService);
- conductor.setSafelyManager(rpcManager);
+ rpcManager = new RpcManagerImpl(rpcProviderRegistry, rpcRequestsQuota, extensionConverterManager, convertorManager, notificationPublishService);
+ roleManager = new RoleManagerImpl(dataBroker, hashedWheelTimer);
+ statisticsManager = new StatisticsManagerImpl(rpcProviderRegistry, isStatisticsPollingOff, hashedWheelTimer, convertorManager);
/* Initialization Phase ordering - OFP Device Context suite */
// CM -> DM -> SM -> RPC -> Role -> DM
if(deviceManager != null && props.containsKey("notification-flow-removed-off")) {
deviceManager.setIsNotificationFlowRemovedOff(Boolean.valueOf(props.get("notification-flow-removed-off").toString()));
}
+ if(deviceManager != null && props.containsKey("skip-table-features")) {
+ deviceManager.setSkipTableFeatures(Boolean.valueOf(props.get("skip-table-features").toString()));
+ }
+ if(rpcManager != null && props.containsKey("is-statistics-rpc-enabled")){
+ rpcManager.setStatisticsRpcEnabled(Boolean.valueOf((props.get("is-statistics-rpc-enabled").toString())));
+ }
}
private static void registerMXBean(final MessageIntelligenceAgency messageIntelligenceAgency) {