From 43ea2e925487c31a159193618932d3a2c35702b4 Mon Sep 17 00:00:00 2001 From: Billy_Yuan Date: Wed, 12 Mar 2025 15:55:29 +0800 Subject: [PATCH 1/2] [IME03C-152]make MaxConnectionIdleTime configurable --- src/main/java/com/emc/object/s3/S3Config.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/emc/object/s3/S3Config.java b/src/main/java/com/emc/object/s3/S3Config.java index 34fdcc1b..b9b2d6d9 100644 --- a/src/main/java/com/emc/object/s3/S3Config.java +++ b/src/main/java/com/emc/object/s3/S3Config.java @@ -67,6 +67,7 @@ public class S3Config extends ObjectConfig { public static final int DEFAULT_INITIAL_RETRY_DELAY = 1000; // ms public static final int DEFAULT_RETRY_LIMIT = 3; public static final int DEFAULT_RETRY_BUFFER_SIZE = 2 * 1024 * 1024; + public static final int DEFAULT_MAX_CONNECTION_IDLE_TIME = 0; protected static int defaultPort(Protocol protocol) { if (protocol == Protocol.HTTP) return DEFAULT_HTTP_PORT; @@ -85,6 +86,7 @@ protected static int defaultPort(Protocol protocol) { protected float faultInjectionRate = 0.0f; protected boolean signMetadataSearch = true; protected boolean useV2Signer = true; + protected int maxConnectionIdleTime = DEFAULT_MAX_CONNECTION_IDLE_TIME; /** * Empty constructor for internal use only! @@ -131,6 +133,7 @@ public S3Config(S3Config other) { this.faultInjectionRate = other.faultInjectionRate; this.signMetadataSearch = other.signMetadataSearch; this.useV2Signer = other.useV2Signer; + this.maxConnectionIdleTime = other.maxConnectionIdleTime; } @Override @@ -243,7 +246,7 @@ public void setRetryBufferSize(int retryBufferSize) { public float getFaultInjectionRate() { return faultInjectionRate; } - + /** * Sets the fault injection rate. Enables fault injection when this number is > 0. The rate is a ratio expressed as * a decimal between 0 and 1. This is the rate at which faults (HTTP 500 errors) should randomly be injected into @@ -281,6 +284,20 @@ public void setUseV2Signer(boolean useV2Signer) { this.useV2Signer = useV2Signer; } + @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; + } + public S3Config withUseVHost(boolean useVHost) { setUseVHost(useVHost); return this; @@ -331,6 +348,11 @@ public S3Config withUseV2Signer(boolean useV2Signer) { return this; } + public S3Config withMaxConnectionIdleTime(int maxConnectionIdleTime) { + setMaxConnectionIdleTime(maxConnectionIdleTime); + return this; + } + @Override public String toString() { return "S3Config{" + From bdd2dfa223d9d409169cbdcf75444680e47a6216 Mon Sep 17 00:00:00 2001 From: Billy_Yuan Date: Tue, 25 Mar 2025 14:57:11 +0800 Subject: [PATCH 2/2] move maxConnectionIdleTime changes in S3Config into ObjectConfig --- .../java/com/emc/object/ObjectConfig.java | 25 +++++++++++++++++++ src/main/java/com/emc/object/s3/S3Config.java | 24 +----------------- 2 files changed, 26 insertions(+), 23 deletions(-) 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); diff --git a/src/main/java/com/emc/object/s3/S3Config.java b/src/main/java/com/emc/object/s3/S3Config.java index b9b2d6d9..34fdcc1b 100644 --- a/src/main/java/com/emc/object/s3/S3Config.java +++ b/src/main/java/com/emc/object/s3/S3Config.java @@ -67,7 +67,6 @@ public class S3Config extends ObjectConfig { public static final int DEFAULT_INITIAL_RETRY_DELAY = 1000; // ms public static final int DEFAULT_RETRY_LIMIT = 3; public static final int DEFAULT_RETRY_BUFFER_SIZE = 2 * 1024 * 1024; - public static final int DEFAULT_MAX_CONNECTION_IDLE_TIME = 0; protected static int defaultPort(Protocol protocol) { if (protocol == Protocol.HTTP) return DEFAULT_HTTP_PORT; @@ -86,7 +85,6 @@ protected static int defaultPort(Protocol protocol) { protected float faultInjectionRate = 0.0f; protected boolean signMetadataSearch = true; protected boolean useV2Signer = true; - protected int maxConnectionIdleTime = DEFAULT_MAX_CONNECTION_IDLE_TIME; /** * Empty constructor for internal use only! @@ -133,7 +131,6 @@ public S3Config(S3Config other) { this.faultInjectionRate = other.faultInjectionRate; this.signMetadataSearch = other.signMetadataSearch; this.useV2Signer = other.useV2Signer; - this.maxConnectionIdleTime = other.maxConnectionIdleTime; } @Override @@ -246,7 +243,7 @@ public void setRetryBufferSize(int retryBufferSize) { public float getFaultInjectionRate() { return faultInjectionRate; } - + /** * Sets the fault injection rate. Enables fault injection when this number is > 0. The rate is a ratio expressed as * a decimal between 0 and 1. This is the rate at which faults (HTTP 500 errors) should randomly be injected into @@ -284,20 +281,6 @@ public void setUseV2Signer(boolean useV2Signer) { this.useV2Signer = useV2Signer; } - @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; - } - public S3Config withUseVHost(boolean useVHost) { setUseVHost(useVHost); return this; @@ -348,11 +331,6 @@ public S3Config withUseV2Signer(boolean useV2Signer) { return this; } - public S3Config withMaxConnectionIdleTime(int maxConnectionIdleTime) { - setMaxConnectionIdleTime(maxConnectionIdleTime); - return this; - } - @Override public String toString() { return "S3Config{" +