This is an automated email from the ASF dual-hosted git repository.
amagyar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new 5e4741d20 KNOX-3000 - Add configurable socket / read timeout parameter
to discovery client (#833)
5e4741d20 is described below
commit 5e4741d20e23378aeb31896aedab073ae9408f3a
Author: Attila Magyar <[email protected]>
AuthorDate: Thu Jan 18 17:53:50 2024 +0100
KNOX-3000 - Add configurable socket / read timeout parameter to discovery
client (#833)
---
.../ClouderaManagerServiceDiscoveryMessages.java | 3 +++
.../topology/discovery/cm/DiscoveryApiClient.java | 23 +++++++++++++++-------
.../gateway/config/impl/GatewayConfigImpl.java | 22 +++++++++++++++++++++
.../org/apache/knox/gateway/GatewayTestConfig.java | 14 +++++++++++++
.../apache/knox/gateway/config/GatewayConfig.java | 5 +++++
5 files changed, 60 insertions(+), 7 deletions(-)
diff --git
a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryMessages.java
b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryMessages.java
index c86fe2912..3bed0b53a 100644
---
a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryMessages.java
+++
b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryMessages.java
@@ -279,4 +279,7 @@ public interface ClouderaManagerServiceDiscoveryMessages {
@Message(level = MessageLevel.DEBUG, text = "Found downscale event for role:
{0} hosts: {1}")
void foundDownScaleEvent(String role, Set<String> hosts);
+
+ @Message(level = MessageLevel.DEBUG, text = "Service discovery client
connect timeout {0} ms, read timeout {1} ms, write timeout {2} ms")
+ void discoveryClientTimeout(long connectTimeout, long readTimeout, long
writeTimeout);
}
diff --git
a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/DiscoveryApiClient.java
b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/DiscoveryApiClient.java
index b1c9eacf1..5a74a9cc8 100644
---
a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/DiscoveryApiClient.java
+++
b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/DiscoveryApiClient.java
@@ -24,10 +24,16 @@ import java.security.KeyStore;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
-
+import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import javax.security.auth.Subject;
+import com.cloudera.api.swagger.client.ApiClient;
+import com.cloudera.api.swagger.client.Pair;
+import com.cloudera.api.swagger.client.auth.Authentication;
+import com.cloudera.api.swagger.client.auth.HttpBasicAuth;
+import com.squareup.okhttp.ConnectionSpec;
+import com.squareup.okhttp.OkHttpClient;
import org.apache.knox.gateway.config.ConfigurationException;
import org.apache.knox.gateway.config.GatewayConfig;
import org.apache.knox.gateway.i18n.messages.MessagesFactory;
@@ -38,12 +44,6 @@ import
org.apache.knox.gateway.topology.discovery.cm.auth.AuthUtils;
import
org.apache.knox.gateway.topology.discovery.cm.auth.SpnegoAuthInterceptor;
import org.apache.knox.gateway.util.TruststoreSSLContextUtils;
-import com.cloudera.api.swagger.client.ApiClient;
-import com.cloudera.api.swagger.client.Pair;
-import com.cloudera.api.swagger.client.auth.Authentication;
-import com.cloudera.api.swagger.client.auth.HttpBasicAuth;
-import com.squareup.okhttp.ConnectionSpec;
-
/**
* Cloudera Manager ApiClient extension for service discovery.
*/
@@ -134,10 +134,19 @@ public class DiscoveryApiClient extends ApiClient {
getHttpClient().interceptors().add(spnegoInterceptor);
}
}
+ configureTimeouts(gatewayConfig);
configureSsl(gatewayConfig, trustStore);
}
+ private void configureTimeouts(GatewayConfig config) {
+ OkHttpClient client = getHttpClient();
+ client.setConnectTimeout(config.getServiceDiscoveryConnectTimeoutMillis(),
TimeUnit.MILLISECONDS);
+ client.setReadTimeout(config.getServiceDiscoveryReadTimeoutMillis(),
TimeUnit.MILLISECONDS);
+ client.setWriteTimeout(config.getServiceDiscoveryWriteTimeoutMillis(),
TimeUnit.MILLISECONDS);
+ log.discoveryClientTimeout(client.getConnectTimeout(),
client.getReadTimeout(), client.getWriteTimeout());
+ }
+
@Override
public String buildUrl(String path, List<Pair> queryParams) {
// If kerberos is enabled, then for every request, we're going to include
a doAs query param
diff --git
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
index 3d3848921..f924d9773 100644
---
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
+++
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
@@ -287,6 +287,13 @@ public class GatewayConfigImpl extends Configuration
implements GatewayConfig {
private static final String
CLOUDERA_MANAGER_ADVANCED_SERVICE_DISCOVERY_CONF_MONITOR_INTERVAL =
GATEWAY_CONFIG_FILE_PREFIX +
".cloudera.manager.advanced.service.discovery.config.monitor.interval";
private static final String
CLOUDERA_MANAGER_SERVICE_DISCOVERY_REPOSITORY_CACHE_ENTRY_TTL =
GATEWAY_CONFIG_FILE_PREFIX +
".cloudera.manager.service.discovery.repository.cache.entry.ttl";
private static final String
CLOUDERA_MANAGER_SERVICE_DISCOVERY_MAX_RETRY_ATTEMPS =
GATEWAY_CONFIG_FILE_PREFIX +
".cloudera.manager.service.discovery.maximum.retry.attemps";
+ private static final String
CLOUDERA_MANAGER_SERVICE_DISCOVERY_CONNECT_TIMEOUT = GATEWAY_CONFIG_FILE_PREFIX
+ ".cloudera.manager.service.discovery.connect.timeout.ms";
+ private static final String CLOUDERA_MANAGER_SERVICE_DISCOVERY_READ_TIMEOUT
= GATEWAY_CONFIG_FILE_PREFIX +
".cloudera.manager.service.discovery.read.timeout.ms";
+ private static final String CLOUDERA_MANAGER_SERVICE_DISCOVERY_WRITE_TIMEOUT
= GATEWAY_CONFIG_FILE_PREFIX +
".cloudera.manager.service.discovery.write.timeout.ms";
+
+ private static final long
CLOUDERA_MANAGER_SERVICE_DISCOVERY_CONNECT_TIMEOUT_DEFAULT = 10000;
+ private static final long
CLOUDERA_MANAGER_SERVICE_DISCOVERY_READ_TIMEOUT_DEFAULT = 10000;
+ private static final long
CLOUDERA_MANAGER_SERVICE_DISCOVERY_WRITE_TIMEOUT_DEFAULT = 10000;
private static final String KNOX_TOKEN_EVICTION_INTERVAL =
GATEWAY_CONFIG_FILE_PREFIX + ".knox.token.eviction.interval";
private static final String KNOX_TOKEN_EVICTION_GRACE_PERIOD =
GATEWAY_CONFIG_FILE_PREFIX + ".knox.token.eviction.grace.period";
@@ -1501,6 +1508,21 @@ public class GatewayConfigImpl extends Configuration
implements GatewayConfig {
return getPathAliases(".application");
}
+ @Override
+ public long getServiceDiscoveryConnectTimeoutMillis() {
+ return getLong(CLOUDERA_MANAGER_SERVICE_DISCOVERY_CONNECT_TIMEOUT,
CLOUDERA_MANAGER_SERVICE_DISCOVERY_CONNECT_TIMEOUT_DEFAULT);
+ }
+
+ @Override
+ public long getServiceDiscoveryReadTimeoutMillis() {
+ return getLong(CLOUDERA_MANAGER_SERVICE_DISCOVERY_READ_TIMEOUT,
CLOUDERA_MANAGER_SERVICE_DISCOVERY_READ_TIMEOUT_DEFAULT);
+ }
+
+ @Override
+ public long getServiceDiscoveryWriteTimeoutMillis() {
+ return getLong(CLOUDERA_MANAGER_SERVICE_DISCOVERY_WRITE_TIMEOUT,
CLOUDERA_MANAGER_SERVICE_DISCOVERY_WRITE_TIMEOUT_DEFAULT);
+ }
+
private Map<String, Collection<String>> getPathAliases(String qualifier) {
final String prefix = GATEWAY_CONFIG_FILE_PREFIX + qualifier +
DEPLOYMENT_PATH_ALIAS;
final Map<String, Collection<String>> pathAliases = new HashMap<>();
diff --git
a/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
b/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
index 3162f7140..bf53c50da 100644
---
a/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
+++
b/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
@@ -1067,4 +1067,18 @@ public class GatewayTestConfig extends Configuration
implements GatewayConfig {
return Collections.emptyMap();
}
+ @Override
+ public long getServiceDiscoveryConnectTimeoutMillis() {
+ return -1;
+ }
+
+ @Override
+ public long getServiceDiscoveryReadTimeoutMillis() {
+ return -1;
+ }
+
+ @Override
+ public long getServiceDiscoveryWriteTimeoutMillis() {
+ return -1;
+ }
}
diff --git
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
index 83d1bb926..7159ebf27 100644
---
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
+++
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
@@ -898,4 +898,9 @@ public interface GatewayConfig {
Map<String, Collection<String>> getApplicationPathAliases();
+ long getServiceDiscoveryConnectTimeoutMillis();
+
+ long getServiceDiscoveryReadTimeoutMillis();
+
+ long getServiceDiscoveryWriteTimeoutMillis();
}