Repository: sentry Updated Branches: refs/heads/sentry-ha-redesign 18998c04e -> 39d7b6166
SENTRY-1759: UpdatableCache leaks connections (Alex Kolbasov, reviewed by: Vamsee Yarlagadda, Na Li, Sergio Pena and Kalyan Kalvagadda) Project: http://git-wip-us.apache.org/repos/asf/sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/39d7b616 Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/39d7b616 Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/39d7b616 Branch: refs/heads/sentry-ha-redesign Commit: 39d7b61665ead6ca7bd9d3a778c2ab6a3441b714 Parents: 18998c0 Author: Alexander Kolbasov <[email protected]> Authored: Wed May 10 09:41:30 2017 -0700 Committer: Alexander Kolbasov <[email protected]> Committed: Wed May 10 09:41:30 2017 -0700 ---------------------------------------------------------------------- .../provider/db/generic/UpdatableCache.java | 35 ++++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sentry/blob/39d7b616/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/generic/UpdatableCache.java ---------------------------------------------------------------------- diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/generic/UpdatableCache.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/generic/UpdatableCache.java index f272630..41708c3 100644 --- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/generic/UpdatableCache.java +++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/generic/UpdatableCache.java @@ -94,22 +94,29 @@ class UpdatableCache implements TableCache { String requestor; requestor = UserGroupInformation.getLoginUser().getShortUserName(); - final SentryGenericServiceClient client = getClient(); - final Set<TSentryRole> tSentryRoles = client.listAllRoles(requestor, componentType); - - for (TSentryRole tSentryRole : tSentryRoles) { - final String roleName = tSentryRole.getRoleName(); - final Set<TSentryPrivilege> tSentryPrivileges = client.listPrivilegesByRoleName(requestor, roleName, componentType, serviceName); - for (String group : tSentryRole.getGroups()) { - Set<String> currentPrivileges = tempCache.get(group, roleName); - if (currentPrivileges == null) { - currentPrivileges = new HashSet<>(); - tempCache.put(group, roleName, currentPrivileges); - } - for (TSentryPrivilege tSentryPrivilege : tSentryPrivileges) { - currentPrivileges.add(tSentryPrivilegeConverter.toString(tSentryPrivilege)); + SentryGenericServiceClient client = null; + try { + client = getClient(); + final Set<TSentryRole> tSentryRoles = client.listAllRoles(requestor, componentType); + + for (TSentryRole tSentryRole : tSentryRoles) { + final String roleName = tSentryRole.getRoleName(); + final Set<TSentryPrivilege> tSentryPrivileges = client.listPrivilegesByRoleName(requestor, roleName, componentType, serviceName); + for (String group : tSentryRole.getGroups()) { + Set<String> currentPrivileges = tempCache.get(group, roleName); + if (currentPrivileges == null) { + currentPrivileges = new HashSet<>(); + tempCache.put(group, roleName, currentPrivileges); + } + for (TSentryPrivilege tSentryPrivilege : tSentryPrivileges) { + currentPrivileges.add(tSentryPrivilegeConverter.toString(tSentryPrivilege)); + } } } + } finally { + if (client != null) { + client.close(); + } } return tempCache; }
