*/
package org.opendaylight.controller.cluster.access.client;
-import akka.actor.ActorRef;
import com.google.common.annotations.Beta;
-import java.util.Map.Entry;
import java.util.Optional;
-import org.opendaylight.controller.cluster.access.concepts.Request;
-import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope;
+import org.opendaylight.controller.cluster.access.concepts.RequestException;
@Beta
public final class ConnectingClientConnection<T extends BackendInfo> extends AbstractClientConnection<T> {
+ /**
+ * A wild estimate on how deep a queue should be. Without having knowledge of the remote actor we can only
+ * guess its processing capabilities while we are doing initial buffering. With {@link AveragingProgressTracker}
+ * this boils down to a burst of up to 2000 messages before we start throttling.
+ */
+ private static final int TARGET_QUEUE_DEPTH = 4000;
+
// Initial state, never instantiated externally
ConnectingClientConnection(final ClientActorContext context, final Long cookie) {
- super(context, cookie);
+ super(context, cookie, new TransmitQueue.Halted(TARGET_QUEUE_DEPTH));
}
@Override
}
@Override
- ClientActorBehavior<T> reconnectConnection(final ClientActorBehavior<T> current) {
- throw new UnsupportedOperationException("Attempted to reconnect a connecting connection");
- }
-
- @Override
- Entry<ActorRef, RequestEnvelope> prepareForTransmit(final Request<?, ?> req) {
- // This is guarded by remoteMaxMessages() == 0
- throw new UnsupportedOperationException("Attempted to transmit on a connecting connection");
+ long backendSilentTicks(final long now) {
+ // We are still connecting and do not want the timer to attempt a reconnect
+ return 0;
}
@Override
- int remoteMaxMessages() {
- return 0;
+ ClientActorBehavior<T> lockedReconnect(final ClientActorBehavior<T> current, final RequestException cause) {
+ throw new UnsupportedOperationException("Attempted to reconnect a connecting connection", cause);
}
}