/* * Copyright 2015 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package io.reactivex.netty.client.pool; import rx.Observable; import java.util.concurrent.TimeUnit; /** * A configuration for connection pooling for a client. * * @param <W> Type of object that is written to the client using this pool config. * @param <R> Type of object that is read from the the client using this pool config. */ public class PoolConfig<W, R> { public static final long DEFAULT_MAX_IDLE_TIME_MILLIS = TimeUnit.MILLISECONDS.convert(30, TimeUnit.SECONDS); private Observable<Long> idleConnCleanupTicker; private PoolLimitDeterminationStrategy limitDeterminationStrategy; private IdleConnectionsHolder<W, R> idleConnectionsHolder; private long maxIdleTimeMillis; public PoolConfig() { maxIdleTimeMillis = DEFAULT_MAX_IDLE_TIME_MILLIS; idleConnCleanupTicker = Observable.timer(maxIdleTimeMillis, TimeUnit.MILLISECONDS); idleConnectionsHolder = new FIFOIdleConnectionsHolder<>(); limitDeterminationStrategy = UnboundedPoolLimitDeterminationStrategy.INSTANCE; } public long getMaxIdleTimeMillis() { return maxIdleTimeMillis; } public Observable<Long> getIdleConnectionsCleanupTimer() { return idleConnCleanupTicker; } public PoolLimitDeterminationStrategy getPoolLimitDeterminationStrategy() { return limitDeterminationStrategy; } public PoolConfig<W, R> maxConnections(int maxConnections) { limitDeterminationStrategy = new MaxConnectionsBasedStrategy(maxConnections); return this; } public PoolConfig<W, R> maxIdleTimeoutMillis(long maxIdleTimeoutMillis) { maxIdleTimeMillis = maxIdleTimeoutMillis; return this; } public PoolConfig<W, R> limitDeterminationStrategy(PoolLimitDeterminationStrategy strategy) { limitDeterminationStrategy = strategy; return this; } public PoolLimitDeterminationStrategy getLimitDeterminationStrategy() { return limitDeterminationStrategy; } public PoolConfig<W, R> idleConnectionsHolder(IdleConnectionsHolder<W, R> holder) { idleConnectionsHolder = holder; return this; } public IdleConnectionsHolder<W, R> getIdleConnectionsHolder() { return idleConnectionsHolder; } public PoolConfig<W, R> idleConnectionsCleanupTimer(Observable<Long> timer) { idleConnCleanupTicker = timer; return this; } public Observable<Long> getIdleConnCleanupTicker() { return idleConnCleanupTicker; } }