You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Alexander Shraer (JIRA)" <ji...@apache.org> on 2011/09/19 04:02:09 UTC

[jira] [Created] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
---------------------------------------------------------------------------------------

                 Key: ZOOKEEPER-1192
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
             Project: ZooKeeper
          Issue Type: Bug
          Components: server
            Reporter: Alexander Shraer
            Assignee: Alexander Shraer
            Priority: Critical
             Fix For: 3.4.0


A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 

But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.

Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
The guarded block introduced in ZK-1191 should be checking !electionFinished.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Resolved] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Mahadev konar (Resolved) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mahadev konar resolved ZOOKEEPER-1192.
--------------------------------------

       Resolution: Fixed
    Fix Version/s: 3.4.0

Just merged this into 3.4 branch. Thanks Alex.
                
> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0, 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Benjamin Reed (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benjamin Reed updated ZOOKEEPER-1192:
-------------------------------------

    Fix Version/s:     (was: 3.4.0)

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Alexander Shraer (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13108151#comment-13108151 ] 

Alexander Shraer commented on ZOOKEEPER-1192:
---------------------------------------------

the new test is Zab1_0Test.testAbandonBeforeACKEpoch(). It fails without the patch and passes with the patch.

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Camille Fournier (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13144571#comment-13144571 ] 

Camille Fournier commented on ZOOKEEPER-1192:
---------------------------------------------

Why wasn't this committed to 3.4? This seems like something that is definitely needed for future patches to work. Specifically, I'm having quite a time with 1264 and I suspect we'll have issues with 1270/1194. We really need to get some coherence here, bugs in election logic should absolutely be going into the 3.4 branch, not just trunk.
                
> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Alexander Shraer (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexander Shraer updated ZOOKEEPER-1192:
----------------------------------------

    Attachment: zookeeper-1192-ver1.patch

Includes a test that makes sure that leader doesn't adopt a new epoch that it proposed if it didn't get a quorum of followers to ack this epoch.

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Hadoop QA (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13107592#comment-13107592 ] 

Hadoop QA commented on ZOOKEEPER-1192:
--------------------------------------

-1 overall.  Here are the results of testing the latest attachment 
  http://issues.apache.org/jira/secure/attachment/12495007/zookeeper-1192.patch
  against trunk revision 1172406.

    +1 @author.  The patch does not contain any @author tags.

    -1 tests included.  The patch doesn't appear to include any new or modified tests.
                        Please justify why no new tests are needed for this patch.
                        Also please list what manual steps were performed to verify this patch.

    +1 javadoc.  The javadoc tool did not generate any warning messages.

    +1 javac.  The applied patch does not increase the total number of javac compiler warnings.

    +1 findbugs.  The patch does not introduce any new Findbugs (version 1.3.9) warnings.

    +1 release audit.  The applied patch does not increase the total number of release audit warnings.

    +1 core tests.  The patch passed core unit tests.

    +1 contrib tests.  The patch passed contrib unit tests.

Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/558//testReport/
Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/558//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html
Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/558//console

This message is automatically generated.

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Hadoop QA (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13112350#comment-13112350 ] 

Hadoop QA commented on ZOOKEEPER-1192:
--------------------------------------

+1 overall.  Here are the results of testing the latest attachment 
  http://issues.apache.org/jira/secure/attachment/12496069/ZOOKEEPER-1192.patch
  against trunk revision 1172406.

    +1 @author.  The patch does not contain any @author tags.

    +1 tests included.  The patch appears to include 3 new or modified tests.

    +1 javadoc.  The javadoc tool did not generate any warning messages.

    +1 javac.  The applied patch does not increase the total number of javac compiler warnings.

    +1 findbugs.  The patch does not introduce any new Findbugs (version 1.3.9) warnings.

    +1 release audit.  The applied patch does not increase the total number of release audit warnings.

    +1 core tests.  The patch passed core unit tests.

    +1 contrib tests.  The patch passed contrib unit tests.

Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/577//testReport/
Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/577//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html
Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/577//console

This message is automatically generated.

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0, 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Reopened] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Camille Fournier (Reopened) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Camille Fournier reopened ZOOKEEPER-1192:
-----------------------------------------


Please make sure this is put in 3.4 as well.
                
> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Patrick Hunt (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Patrick Hunt updated ZOOKEEPER-1192:
------------------------------------

    Fix Version/s: 3.5.0

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0, 3.5.0
>
>         Attachments: zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Benjamin Reed (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13109887#comment-13109887 ] 

Benjamin Reed commented on ZOOKEEPER-1192:
------------------------------------------

+1 looks great alex. i think it is ready to commit. do you want it committed to the 3.4 branch mahadev?

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Camille Fournier (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13141538#comment-13141538 ] 

Camille Fournier commented on ZOOKEEPER-1192:
---------------------------------------------

Can this issue be closed?
                
> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Patrick Hunt (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13107949#comment-13107949 ] 

Patrick Hunt commented on ZOOKEEPER-1192:
-----------------------------------------

It would be good to have a test for this.

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Benjamin Reed (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benjamin Reed updated ZOOKEEPER-1192:
-------------------------------------

    Attachment: ZOOKEEPER-1192.patch

the patch with the tabs and ^Ms fixed

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0, 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Alexander Shraer (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexander Shraer updated ZOOKEEPER-1192:
----------------------------------------

    Attachment: zookeeper-1192.patch

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Hudson (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13112515#comment-13112515 ] 

Hudson commented on ZOOKEEPER-1192:
-----------------------------------

Integrated in ZooKeeper-trunk #1311 (See [https://builds.apache.org/job/ZooKeeper-trunk/1311/])
    ZOOKEEPER-1191. Synchronization issue - wait not in guarded block
ZOOKEEPER-1192. Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

breed : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1173949
Files : 
* /zookeeper/trunk/CHANGES.txt
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java
* /zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java


> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0, 3.5.0
>
>         Attachments: ZOOKEEPER-1192.patch, zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ZOOKEEPER-1192) Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished

Posted by "Hadoop QA (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ZOOKEEPER-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13108173#comment-13108173 ] 

Hadoop QA commented on ZOOKEEPER-1192:
--------------------------------------

+1 overall.  Here are the results of testing the latest attachment 
  http://issues.apache.org/jira/secure/attachment/12495146/zookeeper-1192-ver1.patch
  against trunk revision 1172406.

    +1 @author.  The patch does not contain any @author tags.

    +1 tests included.  The patch appears to include 3 new or modified tests.

    +1 javadoc.  The javadoc tool did not generate any warning messages.

    +1 javac.  The applied patch does not increase the total number of javac compiler warnings.

    +1 findbugs.  The patch does not introduce any new Findbugs (version 1.3.9) warnings.

    +1 release audit.  The applied patch does not increase the total number of release audit warnings.

    +1 core tests.  The patch passed core unit tests.

    +1 contrib tests.  The patch passed contrib unit tests.

Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/564//testReport/
Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/564//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html
Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/564//console

This message is automatically generated.

> Leader.waitForEpochAck() checks waitingForNewEpoch instead of checking electionFinished
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1192
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1192
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Alexander Shraer
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.4.0
>
>         Attachments: zookeeper-1192-ver1.patch, zookeeper-1192.patch
>
>
> A follower/leader should block in Leader.waitForEpochAck() until either electingFollowers contains a quorum and electionFinished=true or until a timeout occurs. A timeout means that a quorum of followers didn't ack the epoch on time, which is an error. 
> But the check in Leader.waitForEpochAck() is "if (waitingForNewEpoch) throw..." and this will never be triggered, even if the wait statement just timed out,  because Leader.getEpochToPropose() completes and sets waitingForNewEpoch to false before Leader.waitForEpochAck() is invoked.
> Instead of "if (waitingForNewEpoch) throw" the condition in Leader.waitForEpochAck() should be "if (!electionFinished) throw".
> The guarded block introduced in ZK-1191 should be checking !electionFinished.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira