[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-2080?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15495429#comment-15495429
 ] 

Alexander Shraer commented on ZOOKEEPER-2080:
---------------------------------------------

There is a lot of accesses to the config info from this function, and the 
synchronization may be needed
to make sure all of them return a state which is consistent. getView returns 
the last committed
config and getLastSeenQuorumVerifier returns the last proposed config. If we 
wouldn't be in a synchronized block, and the committed view changed (reconfig 
commits while we're in this function), it seems possible that sid
moves from last proposed to last committed config and we will never try to 
connect to it.

First, getLastSeenQuorumVerifier and getView shouldn't be accessed more than 
once (currently 4 and 3 times each).
We can just store the result and use that. 

To remove the synchronized block completely you could create a synchronized 
function in QuorumPeer that returns a pair: last committed and last proposed 
view, and call that function once from connectOne.


> ReconfigRecoveryTest fails intermittently
> -----------------------------------------
>
>                 Key: ZOOKEEPER-2080
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2080
>             Project: ZooKeeper
>          Issue Type: Sub-task
>            Reporter: Ted Yu
>            Assignee: Michael Han
>             Fix For: 3.5.3, 3.6.0
>
>         Attachments: ZOOKEEPER-2080.patch, ZOOKEEPER-2080.patch, 
> ZOOKEEPER-2080.patch, ZOOKEEPER-2080.patch, ZOOKEEPER-2080.patch, 
> jacoco-ZOOKEEPER-2080.unzip-grows-to-70MB.7z, repro-20150816.log, 
> threaddump.log
>
>
> I got the following test failure on MacBook with trunk code:
> {code}
> Testcase: testCurrentObserverIsParticipantInNewConfig took 93.628 sec
>   FAILED
> waiting for server 2 being up
> junit.framework.AssertionFailedError: waiting for server 2 being up
>   at 
> org.apache.zookeeper.server.quorum.ReconfigRecoveryTest.testCurrentObserverIsParticipantInNewConfig(ReconfigRecoveryTest.java:529)
>   at 
> org.apache.zookeeper.JUnit4ZKTestRunner$LoggedInvokeMethod.evaluate(JUnit4ZKTestRunner.java:52)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to