diff --git a/src/main/java/com/emc/object/ObjectConfig.java b/src/main/java/com/emc/object/ObjectConfig.java index 26b83df5..9fe30eda 100644 --- a/src/main/java/com/emc/object/ObjectConfig.java +++ b/src/main/java/com/emc/object/ObjectConfig.java @@ -61,6 +61,8 @@ public abstract class ObjectConfig> { public static final int DEFAULT_CHUNKED_ENCODING_SIZE = 2 * 1024 * 1024; // 2MB to match ECS buffer size public static final int DEFAULT_CONNECT_TIMEOUT = 15000; // 15 seconds public static final int DEFAULT_READ_TIMEOUT = 0; // default is infinity + public static final int DEFAULT_MAX_CONNECTION_IDLE_TIME = 0; + // NOTE: if you add a property, make sure you add it to the cloning constructor! private Protocol protocol; @@ -79,6 +81,8 @@ public abstract class ObjectConfig> { private int connectTimeout = DEFAULT_CONNECT_TIMEOUT; private int readTimeout = DEFAULT_READ_TIMEOUT; private String sessionToken; + private int maxConnectionIdleTime = DEFAULT_MAX_CONNECTION_IDLE_TIME; + private Map properties = new HashMap(); @@ -137,6 +141,7 @@ public ObjectConfig(ObjectConfig other) { this.connectTimeout = other.connectTimeout; this.readTimeout = other.readTimeout; this.sessionToken = other.sessionToken; + this.maxConnectionIdleTime = other.maxConnectionIdleTime; this.properties = new HashMap(other.properties); } @@ -218,6 +223,7 @@ public SmartConfig toSmartConfig() { // READ_TIMEOUT smartConfig.setProperty(ClientConfig.PROPERTY_READ_TIMEOUT, readTimeout); + smartConfig.setMaxConnectionIdleTime(maxConnectionIdleTime); return smartConfig; } @@ -455,6 +461,20 @@ public void setSessionToken(String sessionToken) { this.sessionToken = sessionToken; } + @ConfigUriProperty + public int getMaxConnectionIdleTime() { + return maxConnectionIdleTime; + } + + /** + * Set the maximum amount of time (in milliseconds) to keep a connection alive and idle. + * This is a hint to the underlying connection pool, and is not guaranteed to be honored. + * A zero value indicates no limit to the life time. + */ + public void setMaxConnectionIdleTime(int maxConnectionIdleTime) { + this.maxConnectionIdleTime = maxConnectionIdleTime; + } + @ConfigUriProperty(converter = ConfigUri.StringPropertyConverter.class) public Map getProperties() { return properties; @@ -564,6 +584,11 @@ public T withReadTimeout(int readTimeout) { return (T) this; } + public T withMaxConnectionIdleTime(int maxConnectionIdleTime) { + setMaxConnectionIdleTime(maxConnectionIdleTime); + return (T) this; + } + @SuppressWarnings("unchecked") public T withProperty(String propName, Object value) { setProperty(propName, value);