SENTRY-1759: UpdatableCache leaks connections (Alex Kolbasov, reviewed by: Vamsee Yarlagadda, Na Li, Sergio Pena and Kalyan Kalvagadda)
Change-Id: Ifc8462e9a9f57cc906a46de33c29b5235f70631a Reviewed-on: http://gerrit.sjc.cloudera.com:8080/22476 Tested-by: Jenkins User Reviewed-by: Alexander Kolbasov <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/d8e22821 Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/d8e22821 Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/d8e22821 Branch: refs/for/cdh5-1.5.1_ha Commit: d8e228212fa2d87c8850a4814c5b9b6f6aca8565 Parents: a32f977 Author: Alexander Kolbasov <[email protected]> Authored: Wed May 10 13:50:59 2017 -0700 Committer: Alexander Kolbasov <[email protected]> Committed: Wed May 10 16:43:56 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/d8e22821/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..a126f35 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(); // will be closed in finaly clause + 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; }
