zookeeper-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Edward Ribeiro <edward.ribe...@gmail.com>
Subject Re: Discover LEADER from JMX
Date Wed, 09 May 2018 12:29:57 GMT
Hi Enrico,

Well, I am not an expert on QuorumPeer either (not an expert on anything,
really), but maybe it's the variable and method below?

----------------- QuorumPeer ------------------

/**
 * This is who I think the leader currently is.
 */
volatile private Vote currentVote;

public synchronized Vote getCurrentVote(){
    return currentVote;
}

---------------------------------------


Then it's a matter of calling quorumPeer.getCurrentVote().getId() and
quorumPeer.getServerState()?

Btw, the Learner class has this handy method below (self is a QuorumPeer):

---------------- Learner --------------------

/**
 * Returns the address of the node we think is the leader.
 */
protected QuorumServer findLeader() {
    QuorumServer leaderServer = null;
    // Find the leader by id
    Vote current = self.getCurrentVote();
    for (QuorumServer s : self.getView().values()) {
        if (s.id == current.getId()) {
            leaderServer = s;
            break;
        }
    }
    if (leaderServer == null) {
        LOG.warn("Couldn't find the leader with id = "
                + current.getId());
    }
    return leaderServer;
}

---------------------------------------

By the way, as a side note, the map traversal could be changed by:

----------------------------

if (self.getView().contains(current.getId()) {

}

---------------------------



You can see above this method the quorumPeer.getView() returns a Map<sid,
QuorumServer> as below:

-------------QuorumPeer ---------

/**
 * A 'view' is a node's current opinion of the membership of the entire
 * ensemble.
 */
public Map<Long,QuorumPeer.QuorumServer> getView() {
    return Collections.unmodifiableMap(getQuorumVerifier().getAllMembers());
}

-----------------------------


And then it retrieves the QuorumServer that has many more information about
the node besides the sid (InetSocketAddress, hostname, etc). :)


Cheers,
Edward

On Wed, May 9, 2018 at 8:50 AM, Enrico Olivelli <eolivelli@gmail.com> wrote:

> So I am trying to create a patch in order to expose on JMX the id of the
> current "leader" (on the JVM of a follower)
>
> I am trying to find in ZK which is the variable which holds the ID of the
> current leader.
> I am new to the internal of QuorumPeer
>
> Can someone give me some hint ?
>
> Enrico
>
> Il giorno mar 8 mag 2018 alle ore 10:08 Ansel Zandegran <
> Ansel.Zandegran@infor.com> ha scritto:
>
> > Hi,
> > That is possible with 4 letter commands. We are using it now. In 3.5.x it
> > is going to be removed in favour of admin server (embedded web server).
> > We are running in an environment where it’s not possible to run JMX or
> > embedded web servers.
> >
> > So I am wondering if there is another way? It would be nice to have this
> > info as a znode.
> >
> > Best regards,
> > Ansel
> >
> > > On 8 May 2018, at 09:55, Flavio Junqueira <fpj@apache.org> wrote:
> > >
> > > Hi Enrico,
> > >
> > > You can determine the state of a server it via 4-letter commands. Would
> > that work for you?
> > >
> > > -Flavio
> > >
> > >> On 8 May 2018, at 09:09, Enrico Olivelli <eolivelli@gmail.com> wrote:
> > >>
> > >> Hi,
> > >> is there any way to see in JMX which is the leader of a ZooKeeper
> > cluster?
> > >>
> > >> My problem is: given access to any of the nodes of the cluster I want
> to
> > >> know from JMX which is the current leader.
> > >> It seems to me that this information is not available, you can know
> > only if
> > >> the local node is Leader or Follower.
> > >>
> > >> Cheers
> > >> Enrico
> > >
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message