Repository: sentry Updated Branches: refs/heads/sentry-ha-redesign 33d9f6fe4 -> 21fbb9d43
SENTRY-1635: Limit HMS connections only to the leader of the sentry servers Project: http://git-wip-us.apache.org/repos/asf/sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/21fbb9d4 Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/21fbb9d4 Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/21fbb9d4 Branch: refs/heads/sentry-ha-redesign Commit: 21fbb9d43fa850cdac536958732ecd50149701ac Parents: 33d9f6f Author: Vamsee Yarlagadda <[email protected]> Authored: Fri Feb 17 11:52:13 2017 -0600 Committer: Vamsee Yarlagadda <[email protected]> Committed: Tue Feb 21 18:53:30 2017 -0600 ---------------------------------------------------------------------- .../sentry/service/thrift/HMSFollower.java | 43 ++++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sentry/blob/21fbb9d4/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java ---------------------------------------------------------------------- diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java index f88f6f1..1a99a04 100644 --- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java +++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java @@ -184,6 +184,13 @@ public class HMSFollower implements Runnable { @Override public void run() { + // Only the leader should listen to HMS updates + if ((leaderMonitor != null) && !leaderMonitor.isLeader()) { + // Close any outstanding connections to HMS + closeHMSConnection(); + return; + } + if (client == null) { try { client = getMetaStoreClient(authzConf); @@ -200,11 +207,6 @@ public class HMSFollower implements Runnable { } } - // Only the leader should listen to HMS updates - if ((leaderMonitor != null) && !leaderMonitor.isLeader()) { - return; - } - try { if (needHiveSnapshot) { // TODO: expose time used for full update in the metrics @@ -255,18 +257,7 @@ public class HMSFollower implements Runnable { // If the underlying exception is around socket exception, it is better to retry connection to HMS if (e.getCause() instanceof SocketException) { LOGGER.error("Encountered Socket Exception during fetching Notification entries, will reconnect to HMS", e); - try { - if (client != null) { - client.close(); - client = null; - } - if (kerberosContext != null) { - kerberosContext.shutDown(); - kerberosContext = null; - } - } catch (LoginException le) { - LOGGER.warn("Failed to stop kerberos context (potential to cause thread leak)", le); - } + closeHMSConnection(); } else { LOGGER.error("ThriftException occured fetching Notification entries, will try", e); } @@ -280,6 +271,24 @@ public class HMSFollower implements Runnable { } /** + * Function to close HMS connection and any associated kerberos context (if applicable) + */ + private void closeHMSConnection() { + try { + if (client != null) { + client.close(); + client = null; + } + if (kerberosContext != null) { + kerberosContext.shutDown(); + kerberosContext = null; + } + } catch (LoginException le) { + LOGGER.warn("Failed to stop kerberos context (potential to cause thread leak)", le); + } + } + + /** * Retrieve HMS full snapshot. */ private void fetchFullUpdate() throws ExecutionException, InterruptedException, TException {
