X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsamples%2Fclustering-test-app%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fclustering%2Fit%2Fprovider%2FMdsalLowLevelTestProvider.java;h=7ada4bea61090c1aa31c384de9a66c92e34c17c9;hp=acf5397478a5ff520d963086ce15a14923d55e4e;hb=9c17a104cd90b5529b5623d1d0136d7cc332707d;hpb=a1f85be4d978baa44ac9175a05450395cbf5839f diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java index acf5397478..7ada4bea61 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java @@ -9,14 +9,18 @@ package org.opendaylight.controller.clustering.it.provider; import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.SettableFuture; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Future; +import org.opendaylight.controller.clustering.it.provider.impl.FlappingSingletonService; import org.opendaylight.controller.clustering.it.provider.impl.GetConstantService; +import org.opendaylight.controller.clustering.it.provider.impl.PublishNotificationsTask; import org.opendaylight.controller.clustering.it.provider.impl.RoutedGetConstantService; import org.opendaylight.controller.clustering.it.provider.impl.SingletonGetConstantService; -import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; -import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodecFactory; +import org.opendaylight.controller.clustering.it.provider.impl.YnlListener; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationRegistration; import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; @@ -40,19 +44,18 @@ import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.l import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeYnlInput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterBoundConstantInput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterFlappingSingletonOutput; +import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterFlappingSingletonOutputBuilder; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeDdtlOutput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeDtclOutput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeYnlInput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeYnlOutput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsInput; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,6 +66,8 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService private final RpcProviderRegistry rpcRegistry; private final BindingAwareBroker.RpcRegistration registration; private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer; + private final NotificationPublishService notificationPublishService; + private final NotificationService notificationService; private final SchemaService schemaService; private final ClusterSingletonServiceProvider singletonService; private final DOMRpcProviderService domRpcService; @@ -70,19 +75,26 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService private Map, DOMRpcImplementationRegistration> routedRegistrations = new HashMap<>(); + private Map> ynlRegistrations = new HashMap<>(); + private DOMRpcImplementationRegistration globalGetConstantRegistration = null; private ClusterSingletonServiceRegistration getSingletonConstantRegistration; + private FlappingSingletonService flappingSingletonService; public MdsalLowLevelTestProvider(final RpcProviderRegistry rpcRegistry, final DOMRpcProviderService domRpcService, final ClusterSingletonServiceProvider singletonService, final SchemaService schemaService, - final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) { + final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer, + final NotificationPublishService notificationPublishService, + final NotificationService notificationService) { this.rpcRegistry = rpcRegistry; this.domRpcService = domRpcService; this.singletonService = singletonService; this.schemaService = schemaService; this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer; + this.notificationPublishService = notificationPublishService; + this.notificationService = notificationService; registration = rpcRegistry.addRpcImplementation(OdlMdsalLowlevelControlService.class, this); } @@ -114,8 +126,16 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService } @Override - public Future> publishNotifications(PublishNotificationsInput input) { - return null; + public Future> publishNotifications(final PublishNotificationsInput input) { + LOG.debug("publish-notifications, input: {}", input); + + final PublishNotificationsTask task = new PublishNotificationsTask(notificationPublishService, input.getId(), + input.getSeconds(), input.getNotificationsPerSecond()); + + final SettableFuture> settableFuture = SettableFuture.create(); + task.start(settableFuture); + + return settableFuture; } @Override @@ -144,8 +164,20 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService } @Override - public Future> subscribeYnl(SubscribeYnlInput input) { - return null; + public Future> subscribeYnl(final SubscribeYnlInput input) { + + LOG.debug("subscribe-ynl, input: {}", input); + + if (ynlRegistrations.containsKey(input.getId())) { + final RpcError error = RpcResultBuilder.newError(ErrorType.RPC, "Registration present.", + "There is already ynl listener registered for this id: " + input.getId()); + return Futures.immediateFuture(RpcResultBuilder.failed().withRpcError(error).build()); + } + + ynlRegistrations.put(input.getId(), + notificationService.registerNotificationListener(new YnlListener(input.getId()))); + + return Futures.immediateFuture(RpcResultBuilder.success().build()); } @Override @@ -212,7 +244,23 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService @Override public Future> unregisterFlappingSingleton() { - return null; + LOG.debug("unregister-flapping-singleton received."); + + if (flappingSingletonService == null) { + final RpcError rpcError = RpcResultBuilder + .newError(ErrorType.APPLICATION, "missing-registration", "No flapping-singleton registration present."); + final RpcResult result = + RpcResultBuilder.failed().withRpcError(rpcError).build(); + return Futures.immediateFuture(result); + } + + final long flapCount = flappingSingletonService.setInactive(); + flappingSingletonService = null; + + final UnregisterFlappingSingletonOutput output = + new UnregisterFlappingSingletonOutputBuilder().setFlapCount(flapCount).build(); + + return Futures.immediateFuture(RpcResultBuilder.success(output).build()); } @Override @@ -257,7 +305,17 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService @Override public Future> registerFlappingSingleton() { - return null; + LOG.debug("Received register-flapping-singleton."); + + if (flappingSingletonService != null) { + final RpcError error = RpcResultBuilder.newError( + ErrorType.RPC, "Registration present.", "flappin-singleton already registered"); + return Futures.immediateFuture(RpcResultBuilder.failed().withRpcError(error).build()); + } + + flappingSingletonService = new FlappingSingletonService(singletonService); + + return Futures.immediateFuture(RpcResultBuilder.success().build()); } @Override @@ -271,8 +329,23 @@ public class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService } @Override - public Future> unsubscribeYnl(UnsubscribeYnlInput input) { - return null; + public Future> unsubscribeYnl(final UnsubscribeYnlInput input) { + LOG.debug("Received unsubscribe-ynl, input: {}", input); + + if (!ynlRegistrations.containsKey(input.getId())) { + final RpcError rpcError = RpcResultBuilder + .newError(ErrorType.APPLICATION, "missing-registration", "No ynl listener with this id registered."); + final RpcResult result = + RpcResultBuilder.failed().withRpcError(rpcError).build(); + return Futures.immediateFuture(result); + } + + final ListenerRegistration registration = ynlRegistrations.remove(input.getId()); + final UnsubscribeYnlOutput output = registration.getInstance().getOutput(); + + registration.close(); + + return Futures.immediateFuture(RpcResultBuilder.success().withResult(output).build()); } @Override