Skip to content

Commit 1f9f7c0

Browse files
Internal: Allows configuring PendingAcquireMaxCount (Azure#44512)
Internal: Allows configuring PendingAcquireMaxCount for HTTP connection pool in benchmark (to simulate low connection pool size with high concurrency perf workload)
1 parent 615acb3 commit 1f9f7c0

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/Configs.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ public class Configs {
6363
public static final String HTTP_DEFAULT_CONNECTION_POOL_SIZE = "COSMOS.DEFAULT_HTTP_CONNECTION_POOL_SIZE";
6464
public static final String HTTP_DEFAULT_CONNECTION_POOL_SIZE_VARIABLE = "COSMOS_DEFAULT_HTTP_CONNECTION_POOL_SIZE";
6565

66+
public static final String HTTP_PENDING_ACQUIRE_MAX_COUNT = "COSMOS.HTTP_PENDING_ACQUIRE_MAX_COUNT";
67+
public static final String HTTP_PENDING_ACQUIRE_MAX_COUNT_VARIABLE = "COSMOS_HTTP_PENDING_ACQUIRE_MAX_COUNT";
68+
6669
public static final String ITEM_SERIALIZATION_INCLUSION_MODE = "COSMOS.ITEM_SERIALIZATION_INCLUSION_MODE";
6770
public static final String ITEM_SERIALIZATION_INCLUSION_MODE_VARIABLE = "COSMOS_ITEM_SERIALIZATION_INCLUSION_MODE";
6871

@@ -520,6 +523,20 @@ public static int getDefaultHttpPoolSize() {
520523
return DEFAULT_HTTP_DEFAULT_CONNECTION_POOL_SIZE;
521524
}
522525

526+
public static Integer getPendingAcquireMaxCount() {
527+
String valueFromSystemProperty = System.getProperty(HTTP_PENDING_ACQUIRE_MAX_COUNT);
528+
if (valueFromSystemProperty != null && !valueFromSystemProperty.isEmpty()) {
529+
return Integer.parseInt(valueFromSystemProperty);
530+
}
531+
532+
String valueFromEnvVariable = System.getenv(HTTP_PENDING_ACQUIRE_MAX_COUNT_VARIABLE);
533+
if (valueFromEnvVariable != null && !valueFromEnvVariable.isEmpty()) {
534+
return Integer.parseInt(valueFromEnvVariable);
535+
}
536+
537+
return null;
538+
}
539+
523540
private static String validateSerializationInclusionMode(String serializationInclusionMode) {
524541
if (!Strings.isNullOrEmpty(serializationInclusionMode)) {
525542
if ("Always".equalsIgnoreCase(serializationInclusionMode)

sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ public final class ConnectionPolicy {
5555
private int aggressiveWarmupConcurrency;
5656
private boolean serverCertValidationDisabled = false;
5757

58+
private Integer pendingAcquireMaxCount;
59+
5860
/**
5961
* Constructor.
6062
*/
@@ -108,6 +110,8 @@ private ConnectionPolicy(
108110
.DirectConnectionConfigHelper
109111
.getDirectConnectionConfigAccessor()
110112
.getMinConnectionPoolSizePerEndpoint(directConnectionConfig), Configs.getMinConnectionPoolSizePerEndpoint());
113+
114+
this.pendingAcquireMaxCount = Configs.getPendingAcquireMaxCount();
111115
}
112116

113117
private ConnectionPolicy() {
@@ -122,6 +126,7 @@ private ConnectionPolicy() {
122126
this.minConnectionPoolSizePerEndpoint = Configs.getMinConnectionPoolSizePerEndpoint();
123127
this.openConnectionsConcurrency = Configs.getOpenConnectionsConcurrency();
124128
this.aggressiveWarmupConcurrency = Configs.getAggressiveWarmupConcurrency();
129+
this.pendingAcquireMaxCount = Configs.getPendingAcquireMaxCount();
125130
}
126131

127132
/**
@@ -637,6 +642,7 @@ public boolean isServerCertValidationDisabled() {
637642

638643
@Override
639644
public String toString() {
645+
640646
return "ConnectionPolicy{" +
641647
"httpNetworkRequestTimeout=" + httpNetworkRequestTimeout +
642648
", tcpNetworkRequestTimeout=" + tcpNetworkRequestTimeout +
@@ -663,6 +669,7 @@ public String toString() {
663669
", minConnectionPoolSizePerEndpoint=" + minConnectionPoolSizePerEndpoint +
664670
", openConnectionsConcurrency=" + openConnectionsConcurrency +
665671
", aggressiveWarmupConcurrency=" + aggressiveWarmupConcurrency +
672+
", pendingAcquireMaxCount=" + this.pendingAcquireMaxCount != null ? String.valueOf(this.pendingAcquireMaxCount) : "DEFAULT" +
666673
'}';
667674
}
668675
}

sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/HttpClient.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ static HttpClient createFixed(HttpClientConfig httpClientConfig) {
4242

4343
ConnectionProvider.Builder fixedConnectionProviderBuilder = ConnectionProvider
4444
.builder(httpClientConfig.getConnectionPoolName());
45+
4546
fixedConnectionProviderBuilder.maxConnections(httpClientConfig.getMaxPoolSize());
47+
Integer customPendingAcquireMaxCount = httpClientConfig.getPendingAcquireMaxCount();
48+
if (customPendingAcquireMaxCount != null) {
49+
fixedConnectionProviderBuilder.pendingAcquireMaxCount(customPendingAcquireMaxCount);
50+
}
4651
fixedConnectionProviderBuilder.pendingAcquireTimeout(httpClientConfig.getConnectionAcquireTimeout());
4752
fixedConnectionProviderBuilder.maxIdleTime(httpClientConfig.getMaxIdleConnectionTimeout());
4853

sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/HttpClientConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public class HttpClientConfig {
1616
private final Configs configs;
1717
private Duration connectionAcquireTimeout = Configs.getConnectionAcquireTimeout();
1818
private int maxPoolSize = Configs.getDefaultHttpPoolSize();
19+
20+
private Integer pendingAcquireMaxCount = Configs.getPendingAcquireMaxCount();
1921
private Duration maxIdleConnectionTimeout = Configs.getMaxIdleConnectionTimeout();
2022
private Duration networkRequestTimeout = Duration.ofSeconds(Configs.getHttpResponseTimeoutInSeconds());
2123
private String connectionPoolName = Configs.getReactorNettyConnectionPoolName();
@@ -112,6 +114,10 @@ public int getMaxPoolSize() {
112114
return maxPoolSize;
113115
}
114116

117+
public Integer getPendingAcquireMaxCount() {
118+
return pendingAcquireMaxCount;
119+
}
120+
115121
public Duration getMaxIdleConnectionTimeout() {
116122
return maxIdleConnectionTimeout;
117123
}

0 commit comments

Comments
 (0)