X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsamples%2Fclustering-test-app%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fclustering%2Fit%2Fprovider%2Fimpl%2FPrefixLeaderHandler.java;h=0d8391a7ca3882b49d61c58b7916d87d10a5c277;hb=8d022374318a90c5fb0b066a776b5e6403e279e5;hp=f62ca36d94b3221714298b2389165313964000b3;hpb=841d4041df1926cd2cab034533ad081cd4351ac7;p=controller.git diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PrefixLeaderHandler.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PrefixLeaderHandler.java index f62ca36d94..0d8391a7ca 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PrefixLeaderHandler.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PrefixLeaderHandler.java @@ -12,13 +12,18 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.util.Collections; import java.util.concurrent.CompletionStage; +import org.opendaylight.controller.cluster.datastore.exceptions.TimeoutException; import org.opendaylight.controller.cluster.dom.api.CDSDataTreeProducer; import org.opendaylight.controller.cluster.dom.api.CDSShardAccess; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; +import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException; import org.opendaylight.mdsal.dom.api.DOMDataTreeService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.BecomePrefixLeaderInput; +import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.BecomePrefixLeaderOutput; +import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.BecomePrefixLeaderOutputBuilder; +import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -38,23 +43,31 @@ public class PrefixLeaderHandler { this.serializer = serializer; } - public ListenableFuture> makeLeaderLocal(final BecomePrefixLeaderInput input) { + public ListenableFuture> makeLeaderLocal(final BecomePrefixLeaderInput input) { final YangInstanceIdentifier yid = serializer.toYangInstanceIdentifier(input.getPrefix()); final DOMDataTreeIdentifier prefix = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, yid); - final CDSDataTreeProducer producer = - (CDSDataTreeProducer) domDataTreeService.createProducer(Collections.singleton(prefix)); + try (CDSDataTreeProducer producer = + (CDSDataTreeProducer) domDataTreeService.createProducer(Collections.singleton(prefix))) { - final CDSShardAccess shardAccess = producer.getShardAccess(prefix); + final CDSShardAccess shardAccess = producer.getShardAccess(prefix); - final CompletionStage completionStage = shardAccess.makeLeaderLocal(); + final CompletionStage completionStage = shardAccess.makeLeaderLocal(); - completionStage.exceptionally(throwable -> { - LOG.error("Leader movement failed.", throwable); - return null; - }); + completionStage.exceptionally(throwable -> { + LOG.error("Leader movement failed.", throwable); + return null; + }); + } catch (final DOMDataTreeProducerException e) { + LOG.warn("Error while closing producer", e); + } catch (final TimeoutException e) { + LOG.warn("Timeout while on producer operation", e); + Futures.immediateFuture(RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, + "resource-denied-transport", "Timeout while opening producer please retry.", "clustering-it", + "clustering-it", e)); + } - return Futures.immediateFuture(RpcResultBuilder.success().build()); + return Futures.immediateFuture(RpcResultBuilder.success(new BecomePrefixLeaderOutputBuilder().build()).build()); } }