[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1789?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Shraer updated ZOOKEEPER-1789:
----------------------------------------

    Attachment: ZOOKEEPER-1789.patch

Added a test and verified that it fails without the fix.

Although this should resolve the current JIRA I still don't know whether or not 
there is a problem with anonymous observers that connect with id  OBSERVER_ID = 
Long.MAX_VALUE. Looking at the code of receiveConnection and connectOne in 
3.4.6, I don't understand how a server receiving the connection attempt from 
such an observer would be able to connect back (is it in the view ? if not how 
where is its address coming from ?) 

> 3.4.x observer causes NPE on 3.5.0 (trunk) participants
> -------------------------------------------------------
>
>                 Key: ZOOKEEPER-1789
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1789
>             Project: ZooKeeper
>          Issue Type: Bug
>    Affects Versions: 3.5.0
>            Reporter: Raul Gutierrez Segales
>            Assignee: Alexander Shraer
>            Priority: Critical
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1789.patch
>
>
> (assigning to Alex because this was introduced by ZOOKEEPER-107, but will 
> upload a patch as well.)
> I have a 5 participants cluster running what will be 3.5.0 (i.e.: trunk as of 
> today) and an observer running 3.4 (trunk from 3.4 branch). When the observer 
> tries to establish a connection to the participants I get:
> {noformat}
> Thread Thread[10.40.78.121:3888,5,main] died java.lang.NullPointerException 
> at 
> org.apache.zookeeper.server.quorum.QuorumCnxManager.receiveConnection(QuorumCnxManager.java:240)
>         at 
> org.apache.zookeeper.server.quorum.QuorumCnxManager$Listener.run(QuorumCnxManager.java:552)
> {noformat}
> Looking at QuorumCnxManager.java:240:
> {noformat}
>             if (protocolVersion >= 0) { // this is a server id and not a 
> protocol version                                                             
>                sid = protocolVersion;
>                 electionAddr = self.getVotingView().get(sid).electionAddr;
>             } else {
> {noformat}
> and self.getVotingView().get(sid) will be null for Observers.  So this block 
> should cover that case.  



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to