import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.NotThreadSafe;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.access.concepts.Request;
import org.opendaylight.controller.cluster.access.concepts.RequestException;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.access.concepts.Request;
import org.opendaylight.controller.cluster.access.concepts.RequestException;
/**
* Base class for a connection to the backend. Responsible to queueing and dispatch of requests toward the backend.
* Can be in three conceptual states: Connecting, Connected and Reconnecting, which are represented by public final
/**
* Base class for a connection to the backend. Responsible to queueing and dispatch of requests toward the backend.
* Can be in three conceptual states: Connecting, Connected and Reconnecting, which are represented by public final
public abstract class AbstractClientConnection<T extends BackendInfo> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractClientConnection.class);
public abstract class AbstractClientConnection<T extends BackendInfo> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractClientConnection.class);
private void commonEnqueue(final ConnectionEntry entry, final long now) {
final RequestException maybePoison = poisoned;
if (maybePoison != null) {
private void commonEnqueue(final ConnectionEntry entry, final long now) {
final RequestException maybePoison = poisoned;
if (maybePoison != null) {
final void setForwarder(final ReconnectForwarder forwarder) {
queue.setForwarder(forwarder, currentTime());
}
final void setForwarder(final ReconnectForwarder forwarder) {
queue.setForwarder(forwarder, currentTime());
}
abstract ClientActorBehavior<T> lockedReconnect(ClientActorBehavior<T> current,
RequestException runtimeRequestException);
abstract ClientActorBehavior<T> lockedReconnect(ClientActorBehavior<T> current,
RequestException runtimeRequestException);
private void scheduleTimer(final long delay) {
if (haveTimer) {
LOG.debug("{}: timer already scheduled on {}", context.persistenceId(), this);
private void scheduleTimer(final long delay) {
if (haveTimer) {
LOG.debug("{}: timer already scheduled on {}", context.persistenceId(), this);