You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by am...@apache.org on 2024/01/18 16:53:55 UTC
(knox) branch master updated: KNOX-3000 - Add configurable socket / read timeout parameter to discovery client (#833)
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 <m....@gmail.com>
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();
}