[
https://issues.apache.org/jira/browse/ZOOKEEPER-2808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16052527#comment-16052527
]
ASF GitHub Bot commented on ZOOKEEPER-2808:
-------------------------------------------
GitHub user lvfangmin opened a pull request:
https://github.com/apache/zookeeper/pull/284
ZOOKEEPER-2808: fix miss-referenced ACL count issue when upgrading the
ZooKeeper
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/lvfangmin/zookeeper ZOOKEEPER-2808
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/zookeeper/pull/284.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #284
----
commit 295b9b782ac499814f6ccf149ecd17d15d3bf5bc
Author: Fangmin Lyu <[email protected]>
Date: 2017-06-16T23:38:43Z
fix miss-referenced ACL count issue when upgrading the ZooKeeper
----
> ACL with index 1 might be removed if it's only being used once
> --------------------------------------------------------------
>
> Key: ZOOKEEPER-2808
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2808
> Project: ZooKeeper
> Issue Type: Bug
> Components: server
> Affects Versions: 3.6.0
> Reporter: Fangmin Lv
> Priority: Critical
>
> When Zeus start up, it will create DataTree instance, in which the empty
> config znode is created with READ_UNSAFE acl, the acl will be stored in a map
> with index 1. Then it's going to load the snapshot from disk, the nodes and
> acl map will be cleared, but the reconfig znode is still reference to acl
> index 1. The reconfig znode will be reused, so actually it may reference to a
> different ACL stored in the snasphot. After leader-follower syncing, the
> reconfig znode will be added back again (if it doesn't exist), which will
> remove the previous reference to ACL index 1, if the index 1 has 0 reference
> it will be removed from the ACL map, which could cause that ACL un-usable,
> and that znode will not be readable.
> Error logs related:
> -----------------------------
> 2017-06-12 12:02:21,443 [myid:2] - ERROR
> [CommitProcWorkThread-14:DataTree@249] - ERROR: ACL not available for long 1
> 2017-06-12 12:02:21,444 [myid:2] - ERROR
> [CommitProcWorkThread-14:FinalRequestProcessor@567] - Failed to process
> sessionid:0x201035cc882002d type:getChildren cxid:0x1 zxid:0xfffffffffffffffe
> txntype:unknown reqpath:n/a
> java.lang.RuntimeException: Failed to fetch acls for 1
> at org.apache.zookeeper.server.DataTree.convertLong(DataTree.java:250)
> at org.apache.zookeeper.server.DataTree.getACL(DataTree.java:799)
> at org.apache.zookeeper.server.ZKDatabase.getACL(ZKDatabase.java:574)
> at
> org.apache.zookeeper.server.FinalRequestProcessor.processRequest(FinalRequestProcessor.java:463)
> at
> org.apache.zookeeper.server.quorum.CommitProcessor$CommitWorkRequest.doWork(CommitProcessor.java:439)
> at
> org.apache.zookeeper.server.WorkerService$ScheduledWorkRequest.run(WorkerService.java:151)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)