X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fcds-access-client%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Faccess%2Fclient%2FAbstractClientConnection.java;h=cd81a4e5444ca9b47a1f51a94ff79796afa106a2;hb=bc2b83e97bc73930badd4a3063c65b849f82c664;hp=da016bae885be4ea9fc15035f8e05f6e62c6d058;hpb=b74c6012092e47430a8f4d6f4ddeb1d3e2b1b7df;p=controller.git diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java index da016bae88..cd81a4e544 100644 --- a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java @@ -16,6 +16,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collection; import java.util.Optional; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; @@ -26,6 +27,7 @@ import org.opendaylight.controller.cluster.access.concepts.Request; import org.opendaylight.controller.cluster.access.concepts.RequestException; import org.opendaylight.controller.cluster.access.concepts.Response; import org.opendaylight.controller.cluster.access.concepts.ResponseEnvelope; +import org.opendaylight.controller.cluster.access.concepts.RuntimeRequestException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.FiniteDuration; @@ -173,7 +175,8 @@ public abstract class AbstractClientConnection { } @GuardedBy("lock") - abstract ClientActorBehavior lockedReconnect(ClientActorBehavior current); + abstract ClientActorBehavior lockedReconnect(ClientActorBehavior current, + RequestException runtimeRequestException); final long enqueueEntry(final ConnectionEntry entry, final long now) { lock.lock(); @@ -193,10 +196,10 @@ public abstract class AbstractClientConnection { } } - final ClientActorBehavior reconnect(final ClientActorBehavior current) { + final ClientActorBehavior reconnect(final ClientActorBehavior current, final RequestException cause) { lock.lock(); try { - return lockedReconnect(current); + return lockedReconnect(current, cause); } finally { lock.unlock(); } @@ -261,7 +264,8 @@ public abstract class AbstractClientConnection { delay = lockedCheckTimeout(now); if (delay == null) { // We have timed out. There is no point in scheduling a timer - return lockedReconnect(current); + return lockedReconnect(current, new RuntimeRequestException("Backend connection timed out", + new TimeoutException())); } if (delay.isPresent()) { @@ -339,10 +343,14 @@ public abstract class AbstractClientConnection { @GuardedBy("lock") private void lockedPoison(final RequestException cause) { - poisoned = cause; + poisoned = enrichPoison(cause); queue.poison(cause); } + RequestException enrichPoison(final RequestException ex) { + return ex; + } + @VisibleForTesting final RequestException poisoned() { return poisoned;