@Override public Observable borrowConnection() { return connectionPool.borrowConnection(); }
@Override public boolean closeConnection(Connection connection) { return connectionPool.closeConnection(connection); }
@Override public boolean returnConnection(Connection connection) { return connectionPool.returnConnection(connection); }
default <T> Observable<T> withConnection(Function<Connection, Observable<T>> task) { return borrowConnection() .flatMap(connection -> task.apply(connection) .doOnCompleted(() -> returnConnection(connection)) .doOnError(throwable -> closeConnection(connection))); }
@Override public Origin getOrigin() { return connectionPool.getOrigin(); }
@Override public Stats stats() { return connectionPool.stats(); }
public void close() { pool.close(); }
@Override public Settings settings() { return connectionPool.settings(); }
@Override public boolean isExhausted() { return connectionPool.isExhausted(); }
@Override public int compareTo(ConnectionPool other) { return this.origin.compareTo(other.getOrigin()); }
@Override public void close() { connectionPool.close(); removeMetrics(); }
private synchronized void closeIfConnected(Optional<ConnectionPool> connectionPool, AtomicReference<Connection> connectionRef) { Connection connection = connectionRef.get(); if (connection != null && connectionPool.isPresent()) { connectionPool.get().closeConnection(connection); connectionRef.set(null); } }
private synchronized void returnIfConnected(Optional<ConnectionPool> connectionPool, AtomicReference<Connection> connectionRef) { Connection connection = connectionRef.get(); if (connection != null && connectionPool.isPresent()) { connectionPool.get().returnConnection(connection); connectionRef.set(null); } } };
private MetricRegistry getMetricScope(ConnectionPool hostConnectionPool) { return this.metricRegistry.scope(com.codahale.metrics.MetricRegistry.name(originMetricsScope(hostConnectionPool.getOrigin()), METRICS_NAME)); } }
private void registerMetrics(ConnectionPool hostConnectionPool, MetricRegistry scopedRegistry) { ConnectionPool.Stats stats = hostConnectionPool.stats(); scopedRegistry.register("busy-connections", (Gauge<Integer>) stats::busyConnectionCount); scopedRegistry.register("pending-connections", (Gauge<Integer>) stats::pendingConnectionCount); scopedRegistry.register("available-connections", (Gauge<Integer>) stats::availableConnectionCount); scopedRegistry.register("ttfb", (Gauge<Integer>) () -> (int) stats.timeToFirstByteMs()); scopedRegistry.register("connection-attempts", (Gauge<Integer>) () -> (int) stats.connectionAttempts()); scopedRegistry.register("connection-failures", (Gauge<Integer>) () -> (int) stats.connectionFailures()); scopedRegistry.register("connections-closed", (Gauge<Integer>) () -> (int) stats.closedConnections()); scopedRegistry.register("connections-terminated", (Gauge<Integer>) () -> (int) stats.terminatedConnections()); }
private void close() { stopMonitoring(); connectionPool.close(); }
public OriginsInventory build() { await(originHealthMonitor.start()); if (hostClientFactory == null) { hostClientFactory = (ConnectionPool connectionPool) -> StyxHostHttpClient.create(appId, connectionPool.getOrigin().id(), ORIGIN_ID_DEFAULT, connectionPool); } OriginsInventory originsInventory = new OriginsInventory( eventBus, appId, originHealthMonitor, connectionPoolFactory, hostClientFactory, metricsRegistry); originsInventory.setOrigins(initialOrigins); return originsInventory; } }