Andor,

I had already tried that way but without success.
I have updated the patch with a proposal.
Thanks

Enrico

Il gio 21 giu 2018, 13:20 Andor Molnar <an...@cloudera.com.invalid> ha
scritto:

> Hi Enrico!
>
> Take a look at testElectionFraud(), it might be useful to you.
>
> Regards,
> Andor
>
>
>
> On Thu, Jun 21, 2018 at 12:00 PM, Enrico Olivelli <eolive...@gmail.com>
> wrote:
>
> > Norbert,
> > thank you for taking a look
> >
> > Il giorno gio 21 giu 2018 alle ore 11:58 Norbert Kalmar
> > <nkal...@cloudera.com.invalid> ha scritto:
> >
> > > Good question. Wouldn't just killing the leader do the job?
> > >
> >
> > It seems to me that is it not "immediate" to "kill" a QuorumPeer inside
> > such test.
> > If you "shutdown" it you cannot 'start' it anymore.
> >
> > This is why I am asking for help.
> >
> > -- Enrico
> >
> >
> >
> > >
> > > Regards,
> > > Norbert
> > >
> > > On Thu, Jun 21, 2018 at 3:51 AM Enrico Olivelli <eolive...@gmail.com>
> > > wrote:
> > >
> > > > This is my patch
> > > > https://github.com/apache/zookeeper/pull/546
> > > >
> > > > One question:
> > > > I would like to force the cluster to change leader in
> > > > HierarchicalQuorumTest, so that I can test that JMX will reflect the
> > new
> > > > status of the group.
> > > > Any idea about how to bounce the leader ?
> > > >
> > > > Cheers
> > > > Enrico
> > > >
> > > > Il giorno mer 20 giu 2018 alle ore 13:45 Enrico Olivelli <
> > > > eolive...@gmail.com> ha scritto:
> > > >
> > > > > This is my JIRA
> > > > > I am going to work on a patch
> > > > >
> > > > > https://issues.apache.org/jira/browse/ZOOKEEPER-3066
> > > > >
> > > > > Enrico
> > > > >
> > > > > Il gio 10 mag 2018, 19:47 Andor Molnar <an...@cloudera.com> ha
> > > scritto:
> > > > >
> > > > >> "in order to guess which is the leader I have to ask to all of the
> > > three
> > > > >> nodes in the cluster"
> > > > >>
> > > > >> That's correct.
> > > > >>
> > > > >> Regards,
> > > > >> Andor
> > > > >>
> > > > >>
> > > > >>
> > > > >> On Thu, May 10, 2018 at 4:07 AM, Enrico Olivelli <
> > eolive...@gmail.com
> > > >
> > > > >> wrote:
> > > > >>
> > > > >> > Il giorno mer 9 mag 2018 alle ore 20:24 Patrick Hunt <
> > > > ph...@apache.org>
> > > > >> ha
> > > > >> > scritto:
> > > > >> >
> > > > >> > > iiuc what you are interested in the information is already
> > > > available.
> > > > >> The
> > > > >> > > beans have a "state" attribute which indicates following vs
> > > leading.
> > > > >> > >
> > > > >> > > Try attaching a jconsole to the running servers, use the
> > "mbeans"
> > > > tab
> > > > >> and
> > > > >> > > open org.apache.ZooKeeperService -> replicatedserver ->
> replica
> > ->
> > > > >> > > attributes, you'll see the "state" attribute there.
> > > > >> > >
> > > > >> >
> > > > >> >
> > > > >> > Patrick,
> > > > >> > I can't find this information.
> > > > >> > If I log into a "follower" I get this info only for the 'current
> > > > >> replica'
> > > > >> >
> > > > >> > Example, I have three peers,  the first one is a "Follower", on
> > JMX
> > > I
> > > > >> have
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 -
> > > > ClientAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 -
> > > > >> ElectionAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 -
> > > LearnerType
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 - Name
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 -
> > > > QuorumAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 -
> State =
> > > > >> > following
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_1 -
> > > > ConfigVersion
> > > > >> > .....
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> > for other peers I see only
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_2 -
> > > > ClientAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_2 -
> > > > >> ElectionAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_2 -
> > > LearnerType
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_2 - Name
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_2 -
> > > > QuorumAddress
> > > > >> >
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_3 -
> > > > ClientAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_3 -
> > > > >> ElectionAddress
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_3 -
> > > LearnerType
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_3 - Name
> > > > >> > o.a.ZookKeeperService - ReplicatedServer_id1 - replica_3 -
> > > > QuorumAddress
> > > > >> >
> > > > >> >
> > > > >> > so quering only this server I cannot guess which is the current
> > > > leader,
> > > > >> the
> > > > >> > only information I can extract is:
> > > > >> > - I am a follower
> > > > >> > - We are a cluster of three
> > > > >> > - Every of the three is a PARTECIPANT (no observers)
> > > > >> >
> > > > >> > in order to guess which is the leader I have to ask to all of
> the
> > > > three
> > > > >> > nodes in the cluster
> > > > >> >
> > > > >> > Am I missing something ? I am running 3.5.3-BETA
> > > > >> >
> > > > >> > Enrico
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> > >
> > > > >> > > Patrick
> > > > >> > >
> > > > >> > > On Wed, May 9, 2018 at 8:02 AM, Enrico Olivelli <
> > > > eolive...@gmail.com>
> > > > >> > > wrote:
> > > > >> > >
> > > > >> > > > Thank you Edward
> > > > >> > > >
> > > > >> > > > I will pack all together and send out a patch as soon as I
> > have
> > > > >> time.
> > > > >> > > > I am running 3.5 in production and given than an RC for
> 3.5.4
> > is
> > > > >> going
> > > > >> > to
> > > > >> > > > be cut soon I will have to wait for 3.5.5 and I assume it
> > won't
> > > be
> > > > >> > > > immediate.
> > > > >> > > >
> > > > >> > > > Cheers
> > > > >> > > > Enrico
> > > > >> > > >
> > > > >> > > > Il giorno mer 9 mag 2018 alle ore 14:37 Edward Ribeiro <
> > > > >> > > > edward.ribe...@gmail.com> ha scritto:
> > > > >> > > >
> > > > >> > > > > Sent before finishing the previous email. Only to
> > complement,
> > > > the
> > > > >> > > > > findLeader() could have been as below, but this change is
> > > only a
> > > > >> > nitty
> > > > >> > > > > detail and totally irrelevant to the questions you are
> > asking.
> > > > :)
> > > > >> > > > >
> > > > >> > > > > /**
> > > > >> > > > >  * Returns the address of the node we think is the leader.
> > > > >> > > > >  */
> > > > >> > > > > protected QuorumServer findLeader() {
> > > > >> > > > >
> > > > >> > > > >     // Find the leader by id
> > > > >> > > > >     long currentLeader = self.getCurrentVote().getId();
> > > > >> > > > >
> > > > >> > > > >     QuorumServer leaderServer =
> > > > self.getView().get(currentLeader);
> > > > >> > > > >
> > > > >> > > > >     if (leaderServer == null) {
> > > > >> > > > >         LOG.warn("Couldn't find the leader with id = {}",
> > > > >> > > currentLeader);
> > > > >> > > > >     }
> > > > >> > > > >     return leaderServer;
> > > > >> > > > > }
> > > > >> > > > >
> > > > >> > > > > Edward
> > > > >> > > > >
> > > > >> > > > > On Wed, May 9, 2018 at 9:29 AM, Edward Ribeiro <
> > > > >> > > edward.ribe...@gmail.com
> > > > >> > > > >
> > > > >> > > > > wrote:
> > > > >> > > > >
> > > > >> > > > > > 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 <
> > > > >> > eolive...@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.zandeg...@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 <
> > > > f...@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 <
> > > > >> > eolive...@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
> > > > >> > > > > >> > >
> > > > >> > > > > >> >
> > > > >> > > > > >> >
> > > > >> > > > > >>
> > > > >> > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > > > --
> > > > >
> > > > >
> > > > > -- Enrico Olivelli
> > > > >
> > > >
> > >
> >
>
-- 


-- Enrico Olivelli

Reply via email to