From ba328d26eab8bc82d6c7e3a11f4254cb036b4d23 Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Wed, 12 Aug 2015 13:25:29 -0700 Subject: [PATCH] HBASE-14209 TestShell visibility tests failing --- .../visibility/VisibilityLabelsCache.java | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java index 4cf39c73470..763a6247bc0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java @@ -206,27 +206,37 @@ public class VisibilityLabelsCache implements VisibilityLabelOrdinalProvider { } public List getUserAuths(String user) { - List auths = EMPTY_LIST; - Set authOrdinals = getUserAuthsAsOrdinals(user); - if (!authOrdinals.equals(EMPTY_SET)) { - auths = new ArrayList(authOrdinals.size()); - for (Integer authOrdinal : authOrdinals) { - auths.add(ordinalVsLabels.get(authOrdinal)); + this.lock.readLock().lock(); + try { + List auths = EMPTY_LIST; + Set authOrdinals = getUserAuthsAsOrdinals(user); + if (!authOrdinals.equals(EMPTY_SET)) { + auths = new ArrayList(authOrdinals.size()); + for (Integer authOrdinal : authOrdinals) { + auths.add(ordinalVsLabels.get(authOrdinal)); + } } + return auths; + } finally { + this.lock.readLock().unlock(); } - return auths; } public List getGroupAuths(String[] groups) { - List auths = EMPTY_LIST; - Set authOrdinals = getGroupAuthsAsOrdinals(groups); - if (!authOrdinals.equals(EMPTY_SET)) { - auths = new ArrayList(authOrdinals.size()); - for (Integer authOrdinal : authOrdinals) { - auths.add(ordinalVsLabels.get(authOrdinal)); + this.lock.readLock().lock(); + try { + List auths = EMPTY_LIST; + Set authOrdinals = getGroupAuthsAsOrdinals(groups); + if (!authOrdinals.equals(EMPTY_SET)) { + auths = new ArrayList(authOrdinals.size()); + for (Integer authOrdinal : authOrdinals) { + auths.add(ordinalVsLabels.get(authOrdinal)); + } } + return auths; + } finally { + this.lock.readLock().unlock(); } - return auths; } /** @@ -270,7 +280,15 @@ public class VisibilityLabelsCache implements VisibilityLabelOrdinalProvider { } } - public void writeToZookeeper(byte[] data, boolean labelsOrUserAuths) { + public void writeToZookeeper(byte[] data, boolean labelsOrUserAuths) throws IOException { + // Update local state, then send it to zookeeper + if (labelsOrUserAuths) { + // True for labels + this.refreshLabelsCache(data); + } else { + // False for user auths + this.refreshUserAuthsCache(data); + } this.zkVisibilityWatcher.writeToZookeeper(data, labelsOrUserAuths); } }