Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,9 @@
import com.azure.cosmos.implementation.DatabaseAccount;
import com.azure.cosmos.implementation.Document;
import com.azure.cosmos.implementation.FeedResponseDiagnostics;
import com.azure.cosmos.implementation.HttpConstants;
import com.azure.cosmos.implementation.JsonSerializable;
import com.azure.cosmos.implementation.MetadataDiagnosticsContext;
import com.azure.cosmos.implementation.QueryMetrics;
import com.azure.cosmos.implementation.RMResources;
import com.azure.cosmos.implementation.ReplicationPolicy;
import com.azure.cosmos.implementation.RequestTimeline;
import com.azure.cosmos.implementation.Resource;
Expand All @@ -24,7 +22,6 @@
import com.azure.cosmos.implementation.SerializationDiagnosticsContext;
import com.azure.cosmos.implementation.ServiceUnavailableException;
import com.azure.cosmos.implementation.StoredProcedureResponse;
import com.azure.cosmos.implementation.Strings;
import com.azure.cosmos.implementation.Warning;
import com.azure.cosmos.implementation.directconnectivity.StoreResponse;
import com.azure.cosmos.implementation.directconnectivity.StoreResult;
Expand All @@ -43,6 +40,7 @@

import java.net.URI;
import java.nio.ByteBuffer;
import java.time.Duration;
import java.time.Instant;
import java.util.Collection;
import java.util.List;
Expand Down Expand Up @@ -494,4 +492,14 @@ public static ConsistencyLevel fromServiceSerializedFormat(String consistencyLev
public static CosmosException createServiceUnavailableException(Exception innerException) {
return new ServiceUnavailableException(innerException.getMessage(), innerException, null, null);
}

@Warning(value = INTERNAL_USE_ONLY_WARNING)
public static Duration getRequestTimeoutFromDirectConnectionConfig(DirectConnectionConfig directConnectionConfig) {
return directConnectionConfig.getRequestTimeout();
}

@Warning(value = INTERNAL_USE_ONLY_WARNING)
public static Duration getRequestTimeoutFromGatewayConnectionConfig(GatewayConnectionConfig gatewayConnectionConfig) {
return gatewayConnectionConfig.getRequestTimeout();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@
public final class DirectConnectionConfig {
// Constants
private static final Duration DEFAULT_IDLE_ENDPOINT_TIMEOUT = Duration.ofSeconds(70L);
private static final Duration DEFAULT_CONNECTION_TIMEOUT = Duration.ofSeconds(60L);
private static final Duration DEFAULT_REQUEST_TIMEOUT = Duration.ofSeconds(60L);
private static final Duration DEFAULT_CONNECT_TIMEOUT = Duration.ofSeconds(60L);
private static final Duration DEFAULT_REQUEST_TIMEOUT = Duration.ofSeconds(5L);
private static final int DEFAULT_MAX_CONNECTIONS_PER_ENDPOINT = 30;
private static final int DEFAULT_MAX_REQUESTS_PER_CONNECTION = 10;

private Duration connectionTimeout;
private Duration connectTimeout;
private Duration idleConnectionTimeout;
private Duration idleEndpointTimeout;
private Duration requestTimeout;
Expand All @@ -32,7 +32,7 @@ public final class DirectConnectionConfig {
* Constructor.
*/
public DirectConnectionConfig() {
this.connectionTimeout = DEFAULT_CONNECTION_TIMEOUT;
this.connectTimeout = DEFAULT_CONNECT_TIMEOUT;
this.idleConnectionTimeout = Duration.ZERO;
this.idleEndpointTimeout = DEFAULT_IDLE_ENDPOINT_TIMEOUT;
this.maxConnectionsPerEndpoint = DEFAULT_MAX_CONNECTIONS_PER_ENDPOINT;
Expand All @@ -50,32 +50,32 @@ public static DirectConnectionConfig getDefaultConfig() {
}

/**
* Gets the connection timeout for direct client,
* Gets the connect timeout for direct client,
* represents timeout for establishing connections with an endpoint.
*
* Configures timeout for underlying Netty Channel {@link ChannelOption#CONNECT_TIMEOUT_MILLIS}
*
* By default, the connection timeout is 60 seconds.
* By default, the connect timeout is 60 seconds.
*
* @return direct connection timeout
* @return direct connect timeout
*/
public Duration getConnectionTimeout() {
return connectionTimeout;
public Duration getConnectTimeout() {
return connectTimeout;
}

/**
* Sets the connection timeout for direct client,
* Sets the connect timeout for direct client,
* represents timeout for establishing connections with an endpoint.
*
* Configures timeout for underlying Netty Channel {@link ChannelOption#CONNECT_TIMEOUT_MILLIS}
*
* By default, the connection timeout is 60 seconds.
* By default, the connect timeout is 60 seconds.
*
* @param connectionTimeout the connection timeout
* @param connectTimeout the connection timeout
* @return the {@link DirectConnectionConfig}
*/
public DirectConnectionConfig setConnectionTimeout(Duration connectionTimeout) {
this.connectionTimeout = connectionTimeout;
public DirectConnectionConfig setConnectTimeout(Duration connectTimeout) {
this.connectTimeout = connectTimeout;
return this;
}

Expand Down Expand Up @@ -201,33 +201,32 @@ public DirectConnectionConfig setMaxRequestsPerConnection(int maxRequestsPerConn
*
* @return the request timeout interval
*/
public Duration getRequestTimeout() {
Duration getRequestTimeout() {
return requestTimeout;
}

/**
* Sets the request timeout interval
* This represents the timeout interval for requests
*
* Default value is 60 seconds
* Default value is 5 seconds
*
* @param requestTimeout the request timeout interval
* @return the {@link DirectConnectionConfig}
*/
public DirectConnectionConfig setRequestTimeout(Duration requestTimeout) {
DirectConnectionConfig setRequestTimeout(Duration requestTimeout) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does consistency stack use this timeout?

Copy link
Member Author

@xinlian12 xinlian12 Jun 3, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From my current understanding. the consistency stack is not using it.

For the request happens the first time, it is using 60s which comes from InitialArgumentValuePolicyArg = Quadruple.with(false, false,Duration.ofSeconds(60), 0);

For backoff retry, it is using timeout based on different consistency level, could be 30s or 60s

this.requestTimeout = requestTimeout;
return this;
}

@Override
public String toString() {
return "DirectConnectionConfig{" +
"connectionTimeout=" + connectionTimeout +
"connectTimeout=" + connectTimeout +
", idleConnectionTimeout=" + idleConnectionTimeout +
", idleEndpointTimeout=" + idleEndpointTimeout +
", maxConnectionsPerEndpoint=" + maxConnectionsPerEndpoint +
", maxRequestsPerConnection=" + maxRequestsPerConnection +
", requestTimeout=" + requestTimeout +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
*/
public final class GatewayConnectionConfig {
// Constants
private static final Duration DEFAULT_REQUEST_TIMEOUT = Duration.ofSeconds(60);
private static final Duration DEFAULT_REQUEST_TIMEOUT = Duration.ofSeconds(5);
private static final Duration DEFAULT_IDLE_CONNECTION_TIMEOUT = Duration.ofSeconds(60);
private static final int DEFAULT_MAX_CONNECTION_POOL_SIZE = 1000;

Expand Down Expand Up @@ -44,18 +44,18 @@ public static GatewayConnectionConfig getDefaultConfig() {
*
* @return the request timeout duration.
*/
public Duration getRequestTimeout() {
Duration getRequestTimeout() {
return this.requestTimeout;
}

/**
* Sets the request timeout (time to wait for response from network peer).
* The default is 60 seconds.
* The default is 5 seconds.
*
* @param requestTimeout the request timeout duration.
* @return the {@link GatewayConnectionConfig}.
*/
public GatewayConnectionConfig setRequestTimeout(Duration requestTimeout) {
GatewayConnectionConfig setRequestTimeout(Duration requestTimeout) {
this.requestTimeout = requestTimeout;
return this;
}
Expand Down Expand Up @@ -136,7 +136,6 @@ public String toString() {
String proxyAddress = proxy != null ? proxy.getAddress().toString() : null;

return "GatewayConnectionConfig{" +
"requestTimeout=" + requestTimeout +
", maxConnectionPoolSize=" + maxConnectionPoolSize +
", idleConnectionTimeout=" + idleConnectionTimeout +
", proxyType=" + proxyType +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package com.azure.cosmos.implementation;

import com.azure.core.http.ProxyOptions;
import com.azure.cosmos.BridgeInternal;
import com.azure.cosmos.ConnectionMode;
import com.azure.cosmos.DirectConnectionConfig;
import com.azure.cosmos.GatewayConnectionConfig;
Expand Down Expand Up @@ -39,7 +40,7 @@ public final class ConnectionPolicy {
private ProxyOptions proxy;

// Direct connection config properties
private Duration connectionTimeout;
private Duration connectTimeout;
private Duration idleEndpointTimeout;
private int maxConnectionsPerEndpoint;
private int maxRequestsPerConnection;
Expand All @@ -51,18 +52,18 @@ public ConnectionPolicy(GatewayConnectionConfig gatewayConnectionConfig) {
this(ConnectionMode.GATEWAY);
this.idleConnectionTimeout = gatewayConnectionConfig.getIdleConnectionTimeout();
this.maxConnectionPoolSize = gatewayConnectionConfig.getMaxConnectionPoolSize();
this.requestTimeout = gatewayConnectionConfig.getRequestTimeout();
this.requestTimeout = BridgeInternal.getRequestTimeoutFromGatewayConnectionConfig(gatewayConnectionConfig);
this.proxy = gatewayConnectionConfig.getProxy();
}

public ConnectionPolicy(DirectConnectionConfig directConnectionConfig) {
this(ConnectionMode.DIRECT);
this.connectionTimeout = directConnectionConfig.getConnectionTimeout();
this.connectTimeout = directConnectionConfig.getConnectTimeout();
this.idleConnectionTimeout = directConnectionConfig.getIdleConnectionTimeout();
this.idleEndpointTimeout = directConnectionConfig.getIdleEndpointTimeout();
this.maxConnectionsPerEndpoint = directConnectionConfig.getMaxConnectionsPerEndpoint();
this.maxRequestsPerConnection = directConnectionConfig.getMaxRequestsPerConnection();
this.requestTimeout = directConnectionConfig.getRequestTimeout();
this.requestTimeout = BridgeInternal.getRequestTimeoutFromDirectConnectionConfig(directConnectionConfig);
}

private ConnectionPolicy(ConnectionMode connectionMode) {
Expand Down Expand Up @@ -373,20 +374,20 @@ public ConnectionPolicy setProxy(ProxyOptions proxy) {
}

/**
* Gets the direct connection timeout
* @return direct connection timeout
* Gets the direct connect timeout
* @return direct connect timeout
*/
public Duration getConnectionTimeout() {
return connectionTimeout;
public Duration getConnectTimeout() {
return connectTimeout;
}

/**
* Sets the direct connection timeout
* @param connectionTimeout the connection timeout
* Sets the direct connect timeout
* @param connectTimeout the connect timeout
* @return the {@link ConnectionPolicy}
*/
public ConnectionPolicy setConnectionTimeout(Duration connectionTimeout) {
this.connectionTimeout = connectionTimeout;
public ConnectionPolicy setConnectTimeout(Duration connectTimeout) {
this.connectTimeout = connectTimeout;
return this;
}

Expand Down Expand Up @@ -459,7 +460,7 @@ public String toString() {
", proxyType=" + proxy.getType() +
", inetSocketProxyAddress=" + proxy.getAddress() +
", readRequestsFallbackEnabled=" + readRequestsFallbackEnabled +
", connectionTimeout=" + connectionTimeout +
", connectTimeout=" + connectTimeout +
", idleEndpointTimeout=" + idleEndpointTimeout +
", maxConnectionsPerEndpoint=" + maxConnectionsPerEndpoint +
", maxRequestsPerConnection=" + maxRequestsPerConnection +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public static final class Options {
private final Duration connectionAcquisitionTimeout;

@JsonProperty()
private final Duration connectionTimeout;
private final Duration connectTimeout;

@JsonProperty()
private final Duration idleChannelTimeout;
Expand Down Expand Up @@ -239,15 +239,15 @@ private Options(final Builder builder) {
this.threadCount = builder.threadCount;
this.userAgent = builder.userAgent;

this.connectionTimeout = builder.connectionTimeout == null
this.connectTimeout = builder.connectTimeout == null
? builder.requestTimeout
: builder.connectionTimeout;
: builder.connectTimeout;
}

private Options(final ConnectionPolicy connectionPolicy) {
this.bufferPageSize = 8192;
this.connectionAcquisitionTimeout = Duration.ZERO;
this.connectionTimeout = connectionPolicy.getConnectionTimeout();
this.connectTimeout = connectionPolicy.getConnectTimeout();
this.idleChannelTimeout = connectionPolicy.getIdleConnectionTimeout();
this.idleEndpointTimeout = Duration.ofSeconds(70L);
this.maxBufferCapacity = 8192 << 10;
Expand Down Expand Up @@ -275,8 +275,8 @@ public Duration connectionAcquisitionTimeout() {
return this.connectionAcquisitionTimeout;
}

public Duration connectionTimeout() {
return this.connectionTimeout;
public Duration connectTimeout() {
return this.connectTimeout;
}

public Duration idleChannelTimeout() {
Expand Down Expand Up @@ -367,7 +367,7 @@ public String toString() {
* <pre>{@code RntbdTransportClient.class.getClassLoader().getResourceAsStream("azure.cosmos.directTcp.defaultOptions.json")}</pre>
* <p>Example: <pre>{@code {
* "bufferPageSize": 8192,
* "connectionTimeout": "PT1M",
* "connectTimeout": "PT1M",
* "idleChannelTimeout": "PT0S",
* "idleEndpointTimeout": "PT1M10S",
* "maxBufferCapacity": 8388608,
Expand Down Expand Up @@ -454,7 +454,7 @@ public static class Builder {

private int bufferPageSize;
private Duration connectionAcquisitionTimeout;
private Duration connectionTimeout;
private Duration connectTimeout;
private Duration idleChannelTimeout;
private Duration idleEndpointTimeout;
private int maxBufferCapacity;
Expand All @@ -477,7 +477,7 @@ public Builder(ConnectionPolicy connectionPolicy) {

this.bufferPageSize = DEFAULT_OPTIONS.bufferPageSize;
this.connectionAcquisitionTimeout = DEFAULT_OPTIONS.connectionAcquisitionTimeout;
this.connectionTimeout = connectionPolicy.getConnectionTimeout();
this.connectTimeout = connectionPolicy.getConnectTimeout();
this.idleChannelTimeout = connectionPolicy.getIdleConnectionTimeout();
this.idleEndpointTimeout = DEFAULT_OPTIONS.idleEndpointTimeout;
this.maxBufferCapacity = DEFAULT_OPTIONS.maxBufferCapacity;
Expand Down Expand Up @@ -515,15 +515,15 @@ public Options build() {

public Builder connectionAcquisitionTimeout(final Duration value) {
checkNotNull(value, "expected non-null value");
this.connectionTimeout = value.compareTo(Duration.ZERO) < 0 ? Duration.ZERO : value;
this.connectTimeout = value.compareTo(Duration.ZERO) < 0 ? Duration.ZERO : value;
return this;
}

public Builder connectionTimeout(final Duration value) {
checkArgument(value == null || value.compareTo(Duration.ZERO) > 0,
"expected positive value, not %s",
value);
this.connectionTimeout = value;
this.connectTimeout = value;
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ public long connectionAcquisitionTimeoutInNanos() {
}

@JsonProperty
public int connectionTimeoutInMillis() {
final long value = this.options.connectionTimeout().toMillis();
public int connectTimeoutInMillis() {
final long value = this.options.connectTimeout().toMillis();
assert value <= Integer.MAX_VALUE;
return (int)value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private RntbdServiceEndpoint(
.group(group)
.option(ChannelOption.ALLOCATOR, config.allocator())
.option(ChannelOption.AUTO_READ, true)
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.connectionTimeoutInMillis())
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.connectTimeoutInMillis())
.option(ChannelOption.RCVBUF_ALLOCATOR, receiveBufferAllocator)
.option(ChannelOption.SO_KEEPALIVE, true)
.remoteAddress(physicalAddress.getHost(), physicalAddress.getPort());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public void buildClient_withDefaultDirectConnectionConfig() {
@Test(groups = { "emulator" })
public void buildClient_withCustomDirectConnectionConfig() {
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();
directConnectionConfig.setConnectionTimeout(CONNECTION_TIMEOUT);
directConnectionConfig.setConnectTimeout(CONNECTION_TIMEOUT);
directConnectionConfig.setIdleConnectionTimeout(IDLE_CHANNEL_TIMEOUT);
directConnectionConfig.setIdleEndpointTimeout(IDLE_ENDPOINT_TIMEOUT);
directConnectionConfig.setMaxConnectionsPerEndpoint(100);
Expand Down Expand Up @@ -191,7 +191,7 @@ private void validateGatewayConfig(ConnectionPolicy connectionPolicy, GatewayCon
}

private void validateDirectConfig(ConnectionPolicy connectionPolicy, DirectConnectionConfig directConnectionConfig) {
assertThat(Objects.equals(connectionPolicy.getConnectionTimeout(), directConnectionConfig.getConnectionTimeout()));
assertThat(Objects.equals(connectionPolicy.getConnectTimeout(), directConnectionConfig.getConnectTimeout()));
assertThat(Objects.equals(connectionPolicy.getIdleConnectionTimeout(), directConnectionConfig.getIdleConnectionTimeout()));
assertThat(Objects.equals(connectionPolicy.getIdleEndpointTimeout(), directConnectionConfig.getIdleEndpointTimeout()));
assertThat(Objects.equals(connectionPolicy.getMaxConnectionsPerEndpoint(), directConnectionConfig.getMaxConnectionsPerEndpoint()));
Expand Down