Repository: sentry Updated Branches: refs/heads/master 1e29fa981 -> 8474ec7de
SENTRY-1906: Sentry clients to retry connections to server with delay to avoid failing fast (Vamsee Yarlagadda, Reviewed by: Alexander Kolbasov, Na Li) Project: http://git-wip-us.apache.org/repos/asf/sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/8474ec7d Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/8474ec7d Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/8474ec7d Branch: refs/heads/master Commit: 8474ec7de7d973895ffaa603b2adb94ae43820d8 Parents: 1e29fa9 Author: Vamsee Yarlagadda <[email protected]> Authored: Tue Aug 29 18:27:07 2017 -0700 Committer: Vamsee Yarlagadda <[email protected]> Committed: Thu Aug 31 10:26:30 2017 -0700 ---------------------------------------------------------------------- .../transport/RetryClientInvocationHandler.java | 11 +++++++++ .../SentryClientTransportConfigInterface.java | 7 ++++++ .../SentryClientTransportConstants.java | 25 +++++++++++++++++--- .../SentryHDFSClientTransportConfig.java | 5 ++++ .../SentryPolicyClientTransportConfig.java | 5 ++++ 5 files changed, 50 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sentry/blob/8474ec7d/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/RetryClientInvocationHandler.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/RetryClientInvocationHandler.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/RetryClientInvocationHandler.java index d400f89..1161238 100644 --- a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/RetryClientInvocationHandler.java +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/RetryClientInvocationHandler.java @@ -50,6 +50,7 @@ public final class RetryClientInvocationHandler extends SentryClientInvocationHa LoggerFactory.getLogger(RetryClientInvocationHandler.class); private SentryConnection client = null; private final int maxRetryCount; + private final long connRetryDelayInMs; /** * Initialize the sentry configurations, including rpc retry count and client connection @@ -61,6 +62,7 @@ public final class RetryClientInvocationHandler extends SentryClientInvocationHa Preconditions.checkNotNull(clientObject, "Client Object cannot be null"); client = clientObject; maxRetryCount = transportConfig.getSentryRpcRetryTotal(conf); + connRetryDelayInMs = transportConfig.getSentryRpcConnRetryDelayInMs(conf); } /** @@ -150,6 +152,15 @@ public final class RetryClientInvocationHandler extends SentryClientInvocationHa } lastExc = causeException; } + + // Sleep until connection retry delay + try { + Thread.sleep(connRetryDelayInMs); + } catch (InterruptedException ex) { + // Resetting the interrupt flag + Thread.currentThread().interrupt(); + throw ex; + } } assert lastExc != null; throw new SentryUserException (lastExc.getMessage(), lastExc); http://git-wip-us.apache.org/repos/asf/sentry/blob/8474ec7d/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConfigInterface.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConfigInterface.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConfigInterface.java index 9fd4013..27759bb 100644 --- a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConfigInterface.java +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConfigInterface.java @@ -39,6 +39,13 @@ interface SentryClientTransportConfigInterface { /** * @param conf configuration + * @return time interval in milli-secs that the client should wait before + * retrying to establish connection to the server. + */ + long getSentryRpcConnRetryDelayInMs(Configuration conf); + + /** + * @param conf configuration * @return True, if kerberos should be enabled. * False, Iff kerberos is enabled. */ http://git-wip-us.apache.org/repos/asf/sentry/blob/8474ec7d/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConstants.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConstants.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConstants.java index 358d282..d7f43dd 100644 --- a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConstants.java +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryClientTransportConstants.java @@ -36,7 +36,12 @@ public final class SentryClientTransportConstants { * {link RetryClientInvocationHandler#invokeImpl(Object, Method, Object[])} */ static final String SENTRY_RPC_RETRY_TOTAL = "sentry.service.client.rpc.retry-total"; - static final int SENTRY_RPC_RETRY_TOTAL_DEFAULT = 3; + static final int SENTRY_RPC_RETRY_TOTAL_DEFAULT = 5; + + static final String SERVER_RPC_CONN_RETRY_DELAY_MS = "sentry.service.client.rpc.retry.interval.msec"; + // Default of 3 seconds time for retry + static final long SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT = + TimeUnit.MILLISECONDS.convert(3, TimeUnit.SECONDS); /** * full retry num for getting the connection in non-pool model @@ -97,7 +102,14 @@ public final class SentryClientTransportConstants { * {link RetryClientInvocationHandler#invokeImpl(Object, Method, Object[])} */ static final String SENTRY_RPC_RETRY_TOTAL = "sentry.service.client.rpc.retry-total"; - static final int SENTRY_RPC_RETRY_TOTAL_DEFAULT = 3; + static final int SENTRY_RPC_RETRY_TOTAL_DEFAULT = + SentryClientTransportConstants.SENTRY_RPC_RETRY_TOTAL_DEFAULT; + + // Wait interval before retrying connections + static final String SERVER_RPC_CONN_RETRY_DELAY_MS = + SentryClientTransportConstants.SERVER_RPC_CONN_RETRY_DELAY_MS; + static final long SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT = + SentryClientTransportConstants.SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT; // commons-pool configuration static final String SENTRY_POOL_ENABLE = "sentry.service.client.connection.pool.enabled"; @@ -174,7 +186,14 @@ public final class SentryClientTransportConstants { static final String SENTRY_RPC_RETRY_TOTAL = SentryClientTransportConstants.SENTRY_RPC_RETRY_TOTAL; - static final int SENTRY_RPC_RETRY_TOTAL_DEFAULT = 3; + static final int SENTRY_RPC_RETRY_TOTAL_DEFAULT = + SentryClientTransportConstants.SENTRY_RPC_RETRY_TOTAL_DEFAULT; + + // Wait interval before retrying connections + static final String SERVER_RPC_CONN_RETRY_DELAY_MS = + SentryClientTransportConstants.SERVER_RPC_CONN_RETRY_DELAY_MS; + static final long SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT = + SentryClientTransportConstants.SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT; // commons-pool configuration - disable pool for HDFS clients static final String SENTRY_POOL_ENABLE = "sentry.hdfs.service.client.connection.pool.enable"; http://git-wip-us.apache.org/repos/asf/sentry/blob/8474ec7d/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryHDFSClientTransportConfig.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryHDFSClientTransportConfig.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryHDFSClientTransportConfig.java index 1724e7f..b07bc2c 100644 --- a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryHDFSClientTransportConfig.java +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryHDFSClientTransportConfig.java @@ -45,6 +45,11 @@ public final class SentryHDFSClientTransportConfig } @Override + public long getSentryRpcConnRetryDelayInMs(Configuration conf) { + return conf.getLong(SERVER_RPC_CONN_RETRY_DELAY_MS, SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT); + } + + @Override public boolean useUserGroupInformation(Configuration conf) { return Boolean.parseBoolean(conf.get(SECURITY_USE_UGI_TRANSPORT, "true")); } http://git-wip-us.apache.org/repos/asf/sentry/blob/8474ec7d/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryPolicyClientTransportConfig.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryPolicyClientTransportConfig.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryPolicyClientTransportConfig.java index 45522df..4cb8b9c 100644 --- a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryPolicyClientTransportConfig.java +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/core/common/transport/SentryPolicyClientTransportConfig.java @@ -46,6 +46,11 @@ public final class SentryPolicyClientTransportConfig } @Override + public long getSentryRpcConnRetryDelayInMs(Configuration conf) { + return conf.getLong(SERVER_RPC_CONN_RETRY_DELAY_MS, SERVER_RPC_CONN_RETRY_DELAY_MS_DEFAULT); + } + + @Override public boolean useUserGroupInformation(Configuration conf) { return Boolean.valueOf(conf.get(SECURITY_USE_UGI_TRANSPORT, "true")); }
