From: Tomas Slusny Date: Mon, 23 Jan 2017 12:32:51 +0000 (+0100) Subject: Add configuration parameter for single layer X-Git-Tag: release/carbon~77^2~21 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f28c5c70101c2c5e38cc3f843c955e782e9a1612;p=openflowplugin.git Add configuration parameter for single layer - Add use-single-layer-serialization to openflow-provider-config.yang - Pass this new configuration parameter to DeviceContext See also: bug 7139 Change-Id: I00557cd1c0c637fcf83c42e47808a5bf96a57a1b Signed-off-by: Tomas Slusny --- diff --git a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/OpenFlowPluginProvider.java b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/OpenFlowPluginProvider.java index 219ef6919b..ae8be1e983 100644 --- a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/OpenFlowPluginProvider.java +++ b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/OpenFlowPluginProvider.java @@ -84,4 +84,6 @@ public interface OpenFlowPluginProvider extends AutoCloseable, BindingService { void setMaximumTimerDelay(long maximumTimerDelay); + void setIsUseSingleLayerSerialization(Boolean useSingleLayerSerialization); + } diff --git a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java index b4e0b098fd..b26a7addb8 100644 --- a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java +++ b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java @@ -145,5 +145,7 @@ public interface DeviceContext extends * @return listenable future from sal role service */ ListenableFuture> makeDeviceSlave(); + + boolean isUseSingleLayerSerialization(); } diff --git a/openflowplugin-api/src/main/yang/openflow-provider-config.yang b/openflowplugin-api/src/main/yang/openflow-provider-config.yang index d9497d7811..acaacd32c8 100644 --- a/openflowplugin-api/src/main/yang/openflow-provider-config.yang +++ b/openflowplugin-api/src/main/yang/openflow-provider-config.yang @@ -108,5 +108,13 @@ module openflow-provider-config { type non-zero-uint32-type; default 900000; } + + leaf use-single-layer-serialization { + description "When true, Yang models are serialized and deserialized directly to and from format supported + by device, so serialization and deserialization is faster. Otherwise, models are first serialized to + Openflow specification models and then to format supported by device, and reversed when deserializing."; + type boolean; + default "false"; + } } -} \ No newline at end of file +} diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderFactoryImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderFactoryImpl.java index bc77011863..c68bfe0bd5 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderFactoryImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderFactoryImpl.java @@ -64,6 +64,7 @@ public class OpenFlowPluginProviderFactoryImpl implements OpenFlowPluginProvider openflowPluginProvider.setSkipTableFeatures(providerConfig.isSkipTableFeatures()); openflowPluginProvider.setBasicTimerDelay(providerConfig.getBasicTimerDelay().getValue()); openflowPluginProvider.setMaximumTimerDelay(providerConfig.getMaximumTimerDelay().getValue()); + openflowPluginProvider.setIsUseSingleLayerSerialization(providerConfig.isUseSingleLayerSerialization()); openflowPluginProvider.initialize(); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java index 470cc0d4d7..2b647610c9 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java @@ -97,6 +97,7 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF private boolean skipTableFeatures = true; private long basicTimerDelay; private long maximumTimerDelay; + private boolean useSingleLayerSerialization = false; private final ThreadPoolExecutor threadPool; private ClusterSingletonServiceProvider singletonServicesProvider; @@ -134,8 +135,10 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF private void startSwitchConnections() { Futures.addCallback(Futures.allAsList(switchConnectionProviders.stream().map(switchConnectionProvider -> { // Inject OpenflowPlugin custom serializers and deserializers into OpenflowJava - SerializerInjector.injectSerializers(switchConnectionProvider); - DeserializerInjector.injectDeserializers(switchConnectionProvider); + if (useSingleLayerSerialization) { + SerializerInjector.injectSerializers(switchConnectionProvider); + DeserializerInjector.injectDeserializers(switchConnectionProvider); + } // Set handler of incoming connections and start switch connection provider switchConnectionProvider.setSwitchConnectionHandler(connectionManager); @@ -175,7 +178,7 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF @Override public void setFlowRemovedNotification(boolean isFlowRemovedNotificationOn) { - this.isFlowRemovedNotificationOn = this.isFlowRemovedNotificationOn; + this.isFlowRemovedNotificationOn = isFlowRemovedNotificationOn; } @Override @@ -249,7 +252,8 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF notificationPublishService, hashedWheelTimer, convertorManager, - skipTableFeatures); + skipTableFeatures, + useSingleLayerSerialization); ((ExtensionConverterProviderKeeper) deviceManager).setExtensionConverterProvider(extensionConverterManager); @@ -375,4 +379,9 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider, OpenF // Manually shutdown all remaining running threads in pool threadPool.shutdown(); } -} \ No newline at end of file + + @Override + public void setIsUseSingleLayerSerialization(Boolean useSingleLayerSerialization) { + this.useSingleLayerSerialization = useSingleLayerSerialization; + } +} diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java index 515d3ec041..cb01c5cabe 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java @@ -159,6 +159,7 @@ public class DeviceContextImpl implements DeviceContext, ExtensionConverterProvi private volatile CONTEXT_STATE state; private ClusterInitializationPhaseHandler clusterInitializationPhaseHandler; private final DeviceManager myManager; + private final boolean useSingleLayerSerialization; DeviceContextImpl( @Nonnull final ConnectionContext primaryConnectionContext, @@ -169,7 +170,8 @@ public class DeviceContextImpl implements DeviceContext, ExtensionConverterProvi final ConvertorExecutor convertorExecutor, final boolean skipTableFeatures, final HashedWheelTimer hashedWheelTimer, - final DeviceManager myManager) { + final DeviceManager myManager, + final boolean useSingleLayerSerialization) { this.primaryConnectionContext = primaryConnectionContext; this.deviceInfo = primaryConnectionContext.getDeviceInfo(); this.hashedWheelTimer = hashedWheelTimer; @@ -197,6 +199,7 @@ public class DeviceContextImpl implements DeviceContext, ExtensionConverterProvi this.state = CONTEXT_STATE.INITIALIZATION; this.convertorExecutor = convertorExecutor; this.skipTableFeatures = skipTableFeatures; + this.useSingleLayerSerialization = useSingleLayerSerialization; this.initialized = false; } @@ -644,6 +647,11 @@ public class DeviceContextImpl implements DeviceContext, ExtensionConverterProvi this.onPublished(); } + @Override + public boolean isUseSingleLayerSerialization() { + return useSingleLayerSerialization; + } + @Override public boolean isSkipTableFeatures() { return this.skipTableFeatures; diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java index d88cb1c359..9144f61d5e 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java @@ -95,6 +95,7 @@ public class DeviceManagerImpl implements DeviceManager, ExtensionConverterProvi private final NotificationPublishService notificationPublishService; private final MessageSpy messageSpy; private final HashedWheelTimer hashedWheelTimer; + private final boolean useSingleLayerSerialization; public DeviceManagerImpl(@Nonnull final DataBroker dataBroker, final long globalNotificationQuota, @@ -107,7 +108,8 @@ public class DeviceManagerImpl implements DeviceManager, ExtensionConverterProvi final NotificationPublishService notificationPublishService, final HashedWheelTimer hashedWheelTimer, final ConvertorExecutor convertorExecutor, - final boolean skipTableFeatures) { + final boolean skipTableFeatures, + final boolean useSingleLayerSerialization) { this.dataBroker = dataBroker; @@ -135,6 +137,7 @@ public class DeviceManagerImpl implements DeviceManager, ExtensionConverterProvi this.singletonServiceProvider = singletonServiceProvider; this.notificationPublishService = notificationPublishService; this.messageSpy = messageSpy; + this.useSingleLayerSerialization = useSingleLayerSerialization; } @@ -205,7 +208,8 @@ public class DeviceManagerImpl implements DeviceManager, ExtensionConverterProvi convertorExecutor, skipTableFeatures, hashedWheelTimer, - this); + this, + useSingleLayerSerialization); deviceContext.setSalRoleService(new SalRoleServiceImpl(deviceContext, deviceContext)); deviceContexts.put(deviceInfo, deviceContext); diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java index e5a3167bc5..ffba264ed4 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java @@ -230,7 +230,7 @@ public class DeviceContextImplTest { translatorLibrary, deviceManager, convertorExecutor, - false, timer, deviceManager); + false, timer, deviceManager, false); deviceContextSpy = Mockito.spy(deviceContext); xid = new Xid(atomicLong.incrementAndGet()); @@ -243,12 +243,12 @@ public class DeviceContextImplTest { @Test(expected = NullPointerException.class) public void testDeviceContextImplConstructorNullDataBroker() throws Exception { - new DeviceContextImpl(connectionContext, null, null, translatorLibrary, deviceManager, convertorExecutor,false, timer, deviceManager).close(); + new DeviceContextImpl(connectionContext, null, null, translatorLibrary, deviceManager, convertorExecutor,false, timer, deviceManager, false).close(); } @Test(expected = NullPointerException.class) public void testDeviceContextImplConstructorNullTimer() throws Exception { - new DeviceContextImpl(null, dataBroker, null, translatorLibrary, deviceManager,convertorExecutor,false, timer, deviceManager).close(); + new DeviceContextImpl(null, dataBroker, null, translatorLibrary, deviceManager,convertorExecutor,false, timer, deviceManager, false).close(); } @Test diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java index 33e54b4d7c..237839ad3d 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java @@ -156,6 +156,7 @@ public class DeviceManagerImplTest { null, new HashedWheelTimer(), convertorExecutor, + false, false); deviceManager.setDeviceInitializationPhaseHandler(deviceInitPhaseHandler);