ManagedConnection(final Connection delegate, final ConnectionInfo connectionInfo, final AuthenticationConfiguration authConfig, final FutureResult<Connection> futureResult) { this.delegate = delegate; this.connectionInfo = connectionInfo; this.authConfig = authConfig; this.futureResult = futureResult; delegate.addCloseHandler((c, e) -> connectionInfo.connectionClosed(authConfig, futureResult)); }
IoFuture<Connection> getConnection(final EndpointImpl endpoint, final ConnectionKey key, final AuthenticationConfiguration authenticationConfiguration, boolean doConnect) { final FutureResult<Connection> future = connections.get(authenticationConfiguration); if (future != null) { return future.getIoFuture(); } if (! doConnect) { return null; } // add a new unshared connection State oldState; synchronized (ConnectionInfo.this) { oldState = ConnectionInfo.this.state; if (oldState == this) { final IoFuture<Connection> attempt = endpoint.connect(key.getRealUri(), null, connectOptions, key.getSslContext(), authenticationConfiguration); Map<AuthenticationConfiguration, FutureResult<Connection>> newConnections = new HashMap<>(connections); final FutureResult<Connection> futureResult = new FutureResult<>(); splice(futureResult, attempt, authenticationConfiguration); newConnections.put(authenticationConfiguration, futureResult); return attempt; } } // try again :( return RETRY; }
ConnectionInfo newConnectionInfo = managedConnections.get(connectionKey); while (newConnectionInfo == null) { final ConnectionInfo appearing = managedConnections.putIfAbsent(connectionKey, newConnectionInfo = new ConnectionInfo(connectionOptions.getOrDefault(realDestination, OptionMap.EMPTY))); if (appearing != null) { newConnectionInfo = appearing; final IoFuture<Connection> futureConnection = newConnectionInfo.getConnection(this, connectionKey, authenticationConfiguration, connect); if (futureConnection == null) {
ConnectionInfo newConnectionInfo = managedConnections.get(connectionKey); while (newConnectionInfo == null) { final ConnectionInfo appearing = managedConnections.putIfAbsent(connectionKey, newConnectionInfo = new ConnectionInfo(connectionOptions.getOrDefault(realDestination, OptionMap.EMPTY))); if (appearing != null) { newConnectionInfo = appearing; final IoFuture<Connection> futureConnection = newConnectionInfo.getConnection(this, connectionKey, authenticationConfiguration, connect); if (futureConnection == null) {
public void close() throws IOException { connectionInfo.connectionClosed(authConfig, futureResult); delegate.close(); }
final MaybeShared maybeShared = new MaybeShared(authenticationConfiguration, attempt); final FutureResult<Connection> futureResult = new FutureResult<>(); splice(futureResult, attempt, authenticationConfiguration); attempt.addNotifier(new IoFuture.HandlingNotifier<Connection, Void>() { public void handleCancelled(final Void attachment) {
public void closeAsync() { connectionInfo.connectionClosed(authConfig, futureResult); delegate.closeAsync(); }
IoFuture<Connection> getConnection(final EndpointImpl endpoint, final ConnectionKey key, final AuthenticationConfiguration authenticationConfiguration, boolean doConnect) { final FutureResult<Connection> future = connections.get(authenticationConfiguration); if (future != null) { return future.getIoFuture(); } if (! doConnect) { return null; } // add a new unshared connection State oldState; synchronized (ConnectionInfo.this) { oldState = ConnectionInfo.this.state; if (oldState == this) { final IoFuture<Connection> attempt = endpoint.connect(key.getRealUri(), null, connectOptions, key.getSslContext(), authenticationConfiguration); Map<AuthenticationConfiguration, FutureResult<Connection>> newConnections = new HashMap<>(connections); final FutureResult<Connection> futureResult = new FutureResult<>(); splice(futureResult, attempt, authenticationConfiguration); newConnections.put(authenticationConfiguration, futureResult); return attempt; } } // try again :( return RETRY; }
ManagedConnection(final Connection delegate, final ConnectionInfo connectionInfo, final AuthenticationConfiguration authConfig, final FutureResult<Connection> futureResult) { this.delegate = delegate; this.connectionInfo = connectionInfo; this.authConfig = authConfig; this.futureResult = futureResult; delegate.addCloseHandler((c, e) -> connectionInfo.connectionClosed(authConfig, futureResult)); }
final MaybeShared maybeShared = new MaybeShared(authenticationConfiguration, attempt); final FutureResult<Connection> futureResult = new FutureResult<>(); splice(futureResult, attempt, authenticationConfiguration); attempt.addNotifier(new IoFuture.HandlingNotifier<Connection, Void>() { public void handleCancelled(final Void attachment) {
public void close() throws IOException { connectionInfo.connectionClosed(authConfig, futureResult); delegate.close(); }
public void closeAsync() { connectionInfo.connectionClosed(authConfig, futureResult); delegate.closeAsync(); }