From e12b3d81b61a3be12d22afcb7a190611a6895d11 Mon Sep 17 00:00:00 2001 From: Jakub Morvay Date: Mon, 8 May 2017 13:58:57 +0200 Subject: [PATCH] Bug 8391 - Close producer in become-prefix-leader rpc implementation MdsalLowLevelTestProvider's become-prefix-leader rpc implementation creates CDSDataTreeProducer to try to move shard leadership. However, the producer is not closed after leadership change request. This prevents any subsequent invocations of become-prefix-leader rpc with same prefix parameter to be successful. Subtree specified by the prefix is attached to still opened producer and creation of any new producer for this subtree fails. Close producer once we don't need it. Change-Id: I3827e425082c35a43ec18dac1ef0f2dbd19b291f Signed-off-by: Jakub Morvay --- .../it/provider/impl/PrefixLeaderHandler.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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..24e076621f 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 @@ -17,6 +17,7 @@ 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.yangtools.yang.common.RpcResult; @@ -43,17 +44,20 @@ public class PrefixLeaderHandler { 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 (final 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); + } return Futures.immediateFuture(RpcResultBuilder.success().build()); } -- 2.36.6