[ https://issues.apache.org/jira/browse/HBASE-12644?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14242242#comment-14242242 ]
Jerry He commented on HBASE-12644: ---------------------------------- The race condition seems to be here: In ZKVisibilityLabelWatcher.writeToZookeeper() {code} ZKUtil.createWithParents(watcher, znode); ZKUtil.updateExistingNodeData(watcher, znode, data, -1); {code} Note that these are two separate calls. If the node does not exist (for example, user_auths node is getting created for the first time), the two calls will trigger two events: nodeCreated, and nodeDataChanged. On the receiving side, {code} public void nodeCreated(String path) { if (path.equals(labelZnode) || path.equals(userAuthsZnode)) { try { ZKUtil.watchAndCheckExists(watcher, path); } catch (KeeperException ke) { LOG.error("Error setting watcher on node " + path, ke); // only option is to abort watcher.abort("Zookeeper error obtaining label node children", ke); } } {code} If the nodeDataChanged event come in before the ZKUtil.watchAndCheckExists() when the first event is still being processed, then the second event is lost by this receiver. I am seeing even after the setAuths() is done, the scan still lacks the auth. It did not happen before in the tests is because we create the 'user_auths' node when adding the system and super user auths. Now with this patch, the creation of the node is postponed. > Visibility Labels: issue with storing super users in labels table > ----------------------------------------------------------------- > > Key: HBASE-12644 > URL: https://issues.apache.org/jira/browse/HBASE-12644 > Project: HBase > Issue Type: Bug > Components: security > Affects Versions: 0.98.8, 0.99.2 > Reporter: Jerry He > Assignee: Jerry He > Fix For: 1.0.0, 0.98.10 > > Attachments: HBASE-12644-master-v2.patch, HBASE-12644-master.patch > > > Super users have all the permissions for ACL and Visibility labels. > They are defined in hbase-site.xml. > Currently in VisibilityController, we persist super user with their system > permission in hbase:labels. > This makes change in super user difficult. > There are two issues: > In the current DefaultVisibilityLabelServiceImpl.addSystemLabel, we only add > super user when we initially create the 'system' label. > No additional update after that even if super user changed. See code for > details. > > Additionally, there is no mechanism to remove any super user from the labels > table. > > We probably should not persist super users in the labels table. > They are in hbase-site.xml and can just stay in labelsCache and used from > labelsCache after retrieval by Visibility Controller. -- This message was sent by Atlassian JIRA (v6.3.4#6332)