X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FAbstractShardBackendResolver.java;h=46e035d0ec63ec025d0b78d1260cf519ffc51a15;hp=51f96e18fde4e2f0ea66d2ca41d3f72d9ea58755;hb=b712eb01354ddb5878008e2a2e8f03fb19b92555;hpb=9409f87fa5f6ea0a37384a85bb4e66b974fdd9a7 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractShardBackendResolver.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractShardBackendResolver.java index 51f96e18fd..46e035d0ec 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractShardBackendResolver.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractShardBackendResolver.java @@ -14,6 +14,7 @@ import com.google.common.primitives.UnsignedLong; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicLong; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -23,8 +24,8 @@ import org.opendaylight.controller.cluster.access.ABIVersion; import org.opendaylight.controller.cluster.access.client.BackendInfoResolver; import org.opendaylight.controller.cluster.access.commands.ConnectClientRequest; import org.opendaylight.controller.cluster.access.commands.ConnectClientSuccess; +import org.opendaylight.controller.cluster.access.commands.NotLeaderException; import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier; -import org.opendaylight.controller.cluster.access.concepts.RequestException; import org.opendaylight.controller.cluster.access.concepts.RequestFailure; import org.opendaylight.controller.cluster.common.actor.ExplicitAsk; import org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException; @@ -108,8 +109,7 @@ abstract class AbstractShardBackendResolver extends BackendInfoResolver future) { LOG.debug("Shard {} resolved to {}, attempting to connect", shardName, info); @@ -132,19 +138,21 @@ abstract class AbstractShardBackendResolver extends BackendInfoResolver { if (failure != null) { - LOG.debug("Connect attempt to {} failed", shardName, failure); - future.completeExceptionally(failure); + LOG.debug("Connect attempt to {} failed, will retry", shardName, failure); + future.completeExceptionally(wrap("Connection attempt failed", failure)); return; } if (response instanceof RequestFailure) { - final RequestException cause = ((RequestFailure) response).getCause(); + final Throwable cause = ((RequestFailure) response).getCause().unwrap(); LOG.debug("Connect attempt to {} failed to process", shardName, cause); - future.completeExceptionally(cause); + final Throwable result = cause instanceof NotLeaderException + ? wrap("Leader moved during establishment", cause) : cause; + future.completeExceptionally(result); return; } LOG.debug("Resolved backend information to {}", response); - Preconditions.checkArgument(response instanceof ConnectClientSuccess, "Unhandled response {}", + Preconditions.checkArgument(response instanceof ConnectClientSuccess, "Unhandled response %s", response); final ConnectClientSuccess success = (ConnectClientSuccess) response; future.complete(new ShardBackendInfo(success.getBackend(), nextSessionId.getAndIncrement(),