Github user eribeiro commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/632#discussion_r225016431
  
    --- Diff: 
zookeeper-server/src/main/java/org/apache/zookeeper/server/DataTree.java ---
    @@ -154,6 +160,26 @@
     
         private final ReferenceCountedACLCache aclCache = new 
ReferenceCountedACLCache();
     
    +    // The maximum number of tree digests that we will keep in our history
    +    public static final int DIGEST_LOG_LIMIT = 1024;
    +
    +    // Dump digest every 128 txns, in hex it's 80, which will make it 
easier 
    +    // to align and compare between servers.
    +    public static final int DIGEST_LOG_INTERVAL = 128;
    +
    +    // If this is not null, we are actively looking for a target zxid that 
we
    +    // want to validate the digest for
    +    private ZxidDigest digestFromLoadedSnapshot;
    +
    +    // The digest associated with the highest zxid in the data tree.
    +    private volatile ZxidDigest lastProcessedZxidDigest;
    +
    +    // Will be notified when digest mismatch event triggered.
    +    private List<DigestWatcher> digestWatchers = new ArrayList<>();
    --- End diff --
    
    Oh, good points. Firstly, one thing is: this list could be made `final`, 
right? :)
    
    > We won't have concurrent modification here
    
    So, `public void addDigestWatcher(DigestWatcher digestWatcher)` couldn't 
under any circumstances be called while `reportDigestMismatch` executes the 
loop at line 1669? Both are public methods, so that motivated me to write the 
first observation about this, but I can surely be missing something obvious...



---

Reply via email to