/** * Returns the current leader. * * @return null if the leader is not known. */ public Member getLeader() { return getMember(cmember.getLeaderId()); }
/** * ***************************** role ********************************* */ void become(Role role, int leaderId) throws GondolaException { // Clear peers and reset storage state peers.forEach((id, p) -> p.reset()); slaves.forEach(p -> p.reset()); saveQueue.settle(savedRid); sentRid.set(savedRid); Role oldRole = this.role; this.role = role; this.leaderId = leaderId; // Clear any waiting committers if (role != Role.LEADER) { CoreCmd ccmd = waitQueue.peek(); while (ccmd != null) { ccmd.update(Command.STATUS_NOT_LEADER, leaderId); waitQueue.poll(); ccmd = waitQueue.peek(); } } // Notify gondola listeners of role change. if (role != oldRole) { gondola.notifyRoleChange( new RoleChangeEvent(shard, shard.getMember(memberId), shard.getMember(leaderId), oldRole, role)); } }