Class QuorumPeer
java.lang.Object
java.lang.Thread
org.apache.zookeeper.server.ZooKeeperThread
org.apache.zookeeper.server.quorum.QuorumPeer
- All Implemented Interfaces:
Runnable,QuorumStats.Provider
This class manages the quorum protocol. There are three states this server
can be in:
- Leader election - each server will elect a leader (proposing itself as a leader initially).
- Follower - the server will synchronize with the leader and replicate any transactions.
- Leader - the server will process requests and forward them to followers. A majority of followers must log the request before it can be accepted.
int xid; long myid; long leader_id; long leader_zxid;The request for the current leader will consist solely of an xid: int xid;
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classstatic enumstatic classstatic enumstatic enum(Used for monitoring) When peer is in synchronization phase, this shows which synchronization mechanism is being usedstatic enum(Used for monitoring) shows the current phase of Zab protocol that peer is running.Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringprotected intThe ZooKeeper server's socket backlog length.static final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringprotected intThe number of ticks that can pass before retrying to connect to learner masterstatic final Stringlongstatic final Stringprotected intThe number of ticks that the initial synchronization phase can takeprotected booleanWhether learners in this quorum should create new sessions as local.protected booleanWhether learners in this quorum should upgrade local sessions to global.protected intMaximum number of milliseconds to allow for session timeout.protected intMinimum number of milliseconds to allow for session timeout.static final Stringprotected intThe maximum number of threads to allow in the connectionExecutors thread pool which will be used to initiate quorum server connections.protected StringQuorum learner login context name in jaas-conf file to read the kerberos security details.protected booleanIf this is false, quorum peer learner will talk to quorum peer server without authentication.protected booleanWhether or not to listen on all IPs for the two quorum ports (broadcast and fast leader election).protected booleanEnable/Disables quorum authentication using sasl.protected StringQuorum server login context name in jaas-conf file to read the kerberos security details.protected booleanIf this is false, quorum peer server will accept another quorum peer client connection even if the authentication did not succeed.protected StringKerberos quorum service principal.longstatic final StringThe syncEnabled can also be set via a system property.protected booleanEnables/Disables sync request processor.protected intThe number of ticks that can pass between sending a request and getting an acknowledgmentprotected AtomicIntegerThe current tickprotected intThe number of milliseconds of each tickFields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITYFields inherited from interface org.apache.zookeeper.server.quorum.QuorumStats.Provider
FOLLOWING_STATE, LEADING_STATE, LOOKING_STATE, OBSERVING_STATE, UNKNOWN_STATE -
Constructor Summary
ConstructorsConstructorDescriptionQuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File snapDir, File logDir, int clientPort, int electionAlg, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit) This constructor is only used by the existing unit test code.QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File snapDir, File logDir, int clientPort, int electionAlg, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, String oraclePath) QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File snapDir, File logDir, int clientPort, int electionAlg, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, QuorumVerifier quorumConfig) This constructor is only used by the existing unit test code.QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File dataDir, File dataLogDir, int electionType, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, boolean quorumListenOnAllIPs, ServerCnxnFactory cnxnFactory, QuorumVerifier quorumConfig) QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File dataDir, File dataLogDir, int electionType, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, ServerCnxnFactory cnxnFactory) For backward compatibility purposes, we instantiate QuorumMaj by default. -
Method Summary
Modifier and TypeMethodDescriptionbooleanWhether local sessions are enabledvoidprotected static intCount the number of nodes in the map that could be followers.protected ElectioncreateElectionAlgorithm(int electionAlgorithm) static QuorumPeercreateFromConfig(QuorumPeerConfig config) Create a new QuorumPeer and apply all the values per the already-parsed config.voidenableLocalSessions(boolean flag) Whether to enable local sessionsvoidenableLocalSessionsUpgrading(boolean flag) Whether to allow local sessions to upgrade to global sessionslongintintThe server socket's listen backlog lengthintGet the connectToLearnerMasterLimitlongGet an instance of LeaderElectionintGets the election typelonggetId()get the id of this quorum peer.intGet the number of ticks that the initial synchronization phase can takelongreturns the highest zxid that this host has seenReturn QuorumVerifier object for the last proposed configuration.longintMaximum number of connections allowed from particular host (ip)intmaximum session timeout in millisecondsintminimum session timeout in millisecondsintintReturns only observers, no followers.get reference to QuorumCnxManagerbooleanString[]Only used by QuorumStats at the momentintReturn QuorumVerifier object for the last committed configuration.booleanReturn syncEnabled.intGet the synclimitintgetTick()Get the current tickintGet the number of milliseconds of each tickgetView()A 'view' is a node's current opinion of the membership of the entire ensemble.Observers are not contained in this view, only nodes with PeerType=PARTICIPANT.protected ZKDatabasegetZkDb()voidvoidbooleanWhether local sessions are allowed to upgrade to global sessionsbooleanbooleanbooleanbooleanbooleanbooleanprotected FollowermakeFollower(FileTxnSnapLog logFactory) protected LeadermakeLeader(FileTxnSnapLog logFactory) protected Electionprotected ObservermakeObserver(FileTxnSnapLog logFactory) booleanprocessReconfig(QuorumVerifier qv, Long suggestedLeaderId, Long zxid, boolean restartLE) voidvoidvoidrecreateSocketAddresses(long id) Resolves hostname for a given server ID.voidrestartLeaderElection(QuorumVerifier qvOLD, QuorumVerifier qvNEW) voidrun()voidsetAcceptedEpoch(long e) voidsetClientPortListenBacklog(int backlog) Sets the server socket's listen backlog length.voidsetCnxnFactory(ServerCnxnFactory cnxnFactory) protected voidvoidsetConnectToLearnerMasterLimit(int connectToLearnerMasterLimit) Set the connectToLearnerMasterLimitvoidsetCurrentEpoch(long e) voidvoidsetElectionType(int electionType) Sets the election typeprotected voidsetFollower(Follower newFollower) voidsetInitialConfig(String initialConfig) voidsetInitLimit(int initLimit) Set the number of ticks that the initial synchronization phase can takevoidsetJvmPauseMonitor(JvmPauseMonitor jvmPauseMonitor) voidsetLastSeenQuorumVerifier(QuorumVerifier qv, boolean writeToDisk) protected voidvoidsetLeaderAddressAndId(MultipleAddresses addr, long newId) voidSets the LearnerTypevoidsetMaxSessionTimeout(int max) maximum session timeout in millisecondsvoidsetMinSessionTimeout(int min) minimum session timeout in millisecondsvoidsetMultiAddressEnabled(boolean multiAddressEnabled) voidsetMultiAddressReachabilityCheckEnabled(boolean multiAddressReachabilityCheckEnabled) voidsetMultiAddressReachabilityCheckTimeoutMs(int multiAddressReachabilityCheckTimeoutMs) voidsetMyid(long myid) set the id of this quorum peer.protected voidsetObserver(Observer newObserver) voidsetObserverMasterPort(int observerMasterPort) voidsetPeerState(QuorumPeer.ServerState newState) voidsetQuorumListenOnAllIPs(boolean quorumListenOnAllIPs) setQuorumVerifier(QuorumVerifier qv, boolean writeToDisk) voidsetSecureCnxnFactory(ServerCnxnFactory secureCnxnFactory) voidsetSslQuorum(boolean sslQuorum) voidsetSyncEnabled(boolean syncEnabled) Set syncEnabled.voidsetSyncLimit(int syncLimit) Set the synclimitvoidsetSyncMode(QuorumPeer.SyncMode syncMode) voidsetTickTime(int tickTime) Set the number of milliseconds of each tickvoidsetTxnFactory(FileTxnSnapLog factory) voidsetUsePortUnification(boolean shouldUsePortUnification) voidsetZabState(QuorumPeer.ZabState zabState) voidsetZKDatabase(ZKDatabase database) set zk database for this nodevoidbooleanvoidshutdown()voidstart()voidvoidstatic QuorumPeerprotected voidupdateElectionVote(long newEpoch) Updates leader election info to avoid inconsistencies when a new server tries to join the ensemble.booleanviewContains(Long sid) Check if a node is in the current view.Methods inherited from class org.apache.zookeeper.server.ZooKeeperThread
handleExceptionMethods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, stop, stop, suspend, toString, yield
-
Field Details
-
CONFIG_KEY_KERBEROS_CANONICALIZE_HOST_NAMES
- See Also:
-
CONFIG_DEFAULT_KERBEROS_CANONICALIZE_HOST_NAMES
- See Also:
-
CONFIG_KEY_MULTI_ADDRESS_ENABLED
- See Also:
-
CONFIG_DEFAULT_MULTI_ADDRESS_ENABLED
- See Also:
-
CONFIG_KEY_MULTI_ADDRESS_REACHABILITY_CHECK_TIMEOUT_MS
- See Also:
-
CONFIG_KEY_MULTI_ADDRESS_REACHABILITY_CHECK_ENABLED
- See Also:
-
start_fle
public long start_fle -
end_fle
public long end_fle -
FLE_TIME_UNIT
- See Also:
-
tickTime
protected int tickTimeThe number of milliseconds of each tick -
localSessionsEnabled
protected boolean localSessionsEnabledWhether learners in this quorum should create new sessions as local. False by default to preserve existing behavior. -
localSessionsUpgradingEnabled
protected boolean localSessionsUpgradingEnabledWhether learners in this quorum should upgrade local sessions to global. Only matters if local sessions are enabled. -
minSessionTimeout
protected int minSessionTimeoutMinimum number of milliseconds to allow for session timeout. A value of -1 indicates unset, use default. -
maxSessionTimeout
protected int maxSessionTimeoutMaximum number of milliseconds to allow for session timeout. A value of -1 indicates unset, use default. -
clientPortListenBacklog
protected int clientPortListenBacklogThe ZooKeeper server's socket backlog length. The number of connections that will be queued to be read before new connections are dropped. A value of one indicates the default backlog will be used. -
initLimit
protected volatile int initLimitThe number of ticks that the initial synchronization phase can take -
syncLimit
protected volatile int syncLimitThe number of ticks that can pass between sending a request and getting an acknowledgment -
connectToLearnerMasterLimit
protected volatile int connectToLearnerMasterLimitThe number of ticks that can pass before retrying to connect to learner master -
syncEnabled
protected boolean syncEnabledEnables/Disables sync request processor. This option is enabled by default and is to be used with observers. -
tick
The current tick -
quorumListenOnAllIPs
protected boolean quorumListenOnAllIPsWhether or not to listen on all IPs for the two quorum ports (broadcast and fast leader election). -
quorumSaslEnableAuth
protected boolean quorumSaslEnableAuthEnable/Disables quorum authentication using sasl. Defaulting to false. -
quorumServerSaslAuthRequired
protected boolean quorumServerSaslAuthRequiredIf this is false, quorum peer server will accept another quorum peer client connection even if the authentication did not succeed. This can be used while upgrading ZooKeeper server. Defaulting to false (required). -
quorumLearnerSaslAuthRequired
protected boolean quorumLearnerSaslAuthRequiredIf this is false, quorum peer learner will talk to quorum peer server without authentication. This can be used while upgrading ZooKeeper server. Defaulting to false (required). -
quorumServicePrincipal
Kerberos quorum service principal. Defaulting to 'zkquorum/localhost'. -
quorumLearnerLoginContext
Quorum learner login context name in jaas-conf file to read the kerberos security details. Defaulting to 'QuorumLearner'. -
quorumServerLoginContext
Quorum server login context name in jaas-conf file to read the kerberos security details. Defaulting to 'QuorumServer'. -
quorumCnxnThreadsSize
protected int quorumCnxnThreadsSizeThe maximum number of threads to allow in the connectionExecutors thread pool which will be used to initiate quorum server connections. -
QUORUM_CNXN_TIMEOUT_MS
- See Also:
-
follower
-
leader
-
observer
-
SYNC_ENABLED
The syncEnabled can also be set via a system property.- See Also:
-
CURRENT_EPOCH_FILENAME
- See Also:
-
ACCEPTED_EPOCH_FILENAME
- See Also:
-
-
Constructor Details
-
QuorumPeer
- Throws:
SaslException
-
QuorumPeer
public QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File dataDir, File dataLogDir, int electionType, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, ServerCnxnFactory cnxnFactory) throws IOExceptionFor backward compatibility purposes, we instantiate QuorumMaj by default.- Throws:
IOException
-
QuorumPeer
public QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File dataDir, File dataLogDir, int electionType, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, boolean quorumListenOnAllIPs, ServerCnxnFactory cnxnFactory, QuorumVerifier quorumConfig) throws IOException- Throws:
IOException
-
QuorumPeer
public QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File snapDir, File logDir, int clientPort, int electionAlg, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit) throws IOExceptionThis constructor is only used by the existing unit test code. It defaults to FileLogProvider persistence provider.- Throws:
IOException
-
QuorumPeer
public QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File snapDir, File logDir, int clientPort, int electionAlg, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, String oraclePath) throws IOException- Throws:
IOException
-
QuorumPeer
public QuorumPeer(Map<Long, QuorumPeer.QuorumServer> quorumPeers, File snapDir, File logDir, int clientPort, int electionAlg, long myid, int tickTime, int initLimit, int syncLimit, int connectToLearnerMasterLimit, QuorumVerifier quorumConfig) throws IOExceptionThis constructor is only used by the existing unit test code. It defaults to FileLogProvider persistence provider.- Throws:
IOException
-
-
Method Details
-
getObserverMasterPort
public int getObserverMasterPort() -
setObserverMasterPort
public void setObserverMasterPort(int observerMasterPort) -
isMultiAddressEnabled
public boolean isMultiAddressEnabled() -
setMultiAddressEnabled
public void setMultiAddressEnabled(boolean multiAddressEnabled) -
getMultiAddressReachabilityCheckTimeoutMs
public int getMultiAddressReachabilityCheckTimeoutMs() -
setMultiAddressReachabilityCheckTimeoutMs
public void setMultiAddressReachabilityCheckTimeoutMs(int multiAddressReachabilityCheckTimeoutMs) -
isMultiAddressReachabilityCheckEnabled
public boolean isMultiAddressReachabilityCheckEnabled() -
setMultiAddressReachabilityCheckEnabled
public void setMultiAddressReachabilityCheckEnabled(boolean multiAddressReachabilityCheckEnabled) -
getLearnerType
-
setLearnerType
Sets the LearnerType -
setConfigFileName
-
getQuorumSize
public int getQuorumSize() -
setJvmPauseMonitor
-
getId
public long getId()get the id of this quorum peer. -
isSslQuorum
public boolean isSslQuorum() -
shouldUsePortUnification
public boolean shouldUsePortUnification() -
getCurrentVote
-
setCurrentVote
-
setPeerState
-
setZabState
-
setSyncMode
-
getZabState
-
getSyncMode
-
setLeaderAddressAndId
-
getLeaderAddress
-
getLeaderId
public long getLeaderId() -
getDetailedPeerState
-
reconfigFlagSet
public void reconfigFlagSet() -
reconfigFlagClear
public void reconfigFlagClear() -
isReconfigStateChange
public boolean isReconfigStateChange() -
getPeerState
-
recreateSocketAddresses
public void recreateSocketAddresses(long id) Resolves hostname for a given server ID. This method resolves hostname for a given server ID in both quorumVerifer and lastSeenQuorumVerifier. If the server ID matches the local server ID, it also updates myAddrs. -
getQuorumAddress
-
getElectionAddress
-
getClientAddress
-
testingQuorumPeer
- Throws:
SaslException
-
initialize
- Throws:
SaslException
-
start
public void start() -
stopLeaderElection
public void stopLeaderElection() -
startLeaderElection
public void startLeaderElection() -
countParticipants
Count the number of nodes in the map that could be followers.- Parameters:
peers-- Returns:
- The number of followers in the map
-
getLastLoggedZxid
public long getLastLoggedZxid()returns the highest zxid that this host has seen- Returns:
- the highest zxid for this host
-
makeFollower
- Throws:
IOException
-
makeLeader
- Throws:
IOExceptionX509Exception
-
makeObserver
- Throws:
IOException
-
createElectionAlgorithm
-
makeLEStrategy
-
setLeader
-
setFollower
-
setObserver
-
getActiveServer
-
run
public void run() -
shutdown
public void shutdown() -
getView
A 'view' is a node's current opinion of the membership of the entire ensemble. -
getVotingView
Observers are not contained in this view, only nodes with PeerType=PARTICIPANT. -
getObservingView
Returns only observers, no followers. -
getCurrentAndNextConfigVoters
-
viewContains
Check if a node is in the current view. With static membership, the result of this check will never change; only when dynamic membership is introduced will this be more useful. -
getQuorumPeers
Only used by QuorumStats at the moment- Specified by:
getQuorumPeersin interfaceQuorumStats.Provider
-
getServerState
- Specified by:
getServerStatein interfaceQuorumStats.Provider
-
setMyid
public void setMyid(long myid) set the id of this quorum peer. -
setInitialConfig
-
getInitialConfig
-
getTickTime
public int getTickTime()Get the number of milliseconds of each tick -
setTickTime
public void setTickTime(int tickTime) Set the number of milliseconds of each tick -
getMaxClientCnxnsPerHost
public int getMaxClientCnxnsPerHost()Maximum number of connections allowed from particular host (ip) -
areLocalSessionsEnabled
public boolean areLocalSessionsEnabled()Whether local sessions are enabled -
enableLocalSessions
public void enableLocalSessions(boolean flag) Whether to enable local sessions -
isLocalSessionsUpgradingEnabled
public boolean isLocalSessionsUpgradingEnabled()Whether local sessions are allowed to upgrade to global sessions -
enableLocalSessionsUpgrading
public void enableLocalSessionsUpgrading(boolean flag) Whether to allow local sessions to upgrade to global sessions -
getMinSessionTimeout
public int getMinSessionTimeout()minimum session timeout in milliseconds -
setMinSessionTimeout
public void setMinSessionTimeout(int min) minimum session timeout in milliseconds -
getMaxSessionTimeout
public int getMaxSessionTimeout()maximum session timeout in milliseconds -
setMaxSessionTimeout
public void setMaxSessionTimeout(int max) maximum session timeout in milliseconds -
getClientPortListenBacklog
public int getClientPortListenBacklog()The server socket's listen backlog length -
setClientPortListenBacklog
public void setClientPortListenBacklog(int backlog) Sets the server socket's listen backlog length. -
getInitLimit
public int getInitLimit()Get the number of ticks that the initial synchronization phase can take -
setInitLimit
public void setInitLimit(int initLimit) Set the number of ticks that the initial synchronization phase can take -
getTick
public int getTick()Get the current tick -
configFromString
public QuorumVerifier configFromString(String s) throws IOException, QuorumPeerConfig.ConfigException -
getQuorumVerifier
Return QuorumVerifier object for the last committed configuration. -
getLastSeenQuorumVerifier
Return QuorumVerifier object for the last proposed configuration. -
restartLeaderElection
-
getNextDynamicConfigFilename
-
setLastSeenQuorumVerifier
-
setQuorumVerifier
-
getElectionAlg
Get an instance of LeaderElection -
getSyncLimit
public int getSyncLimit()Get the synclimit -
setSyncLimit
public void setSyncLimit(int syncLimit) Set the synclimit -
getConnectToLearnerMasterLimit
public int getConnectToLearnerMasterLimit()Get the connectToLearnerMasterLimit -
setConnectToLearnerMasterLimit
public void setConnectToLearnerMasterLimit(int connectToLearnerMasterLimit) Set the connectToLearnerMasterLimit -
getSyncEnabled
public boolean getSyncEnabled()Return syncEnabled. -
setSyncEnabled
public void setSyncEnabled(boolean syncEnabled) Set syncEnabled.- Parameters:
syncEnabled-
-
getElectionType
public int getElectionType()Gets the election type -
setElectionType
public void setElectionType(int electionType) Sets the election type -
getQuorumListenOnAllIPs
public boolean getQuorumListenOnAllIPs() -
setQuorumListenOnAllIPs
public void setQuorumListenOnAllIPs(boolean quorumListenOnAllIPs) -
setCnxnFactory
-
setSecureCnxnFactory
-
setSslQuorum
public void setSslQuorum(boolean sslQuorum) -
setUsePortUnification
public void setUsePortUnification(boolean shouldUsePortUnification) -
setZooKeeperServer
-
closeAllConnections
public void closeAllConnections() -
getClientPort
public int getClientPort() -
setTxnFactory
-
getTxnFactory
-
setZKDatabase
set zk database for this node- Parameters:
database-
-
getZkDb
-
initConfigInZKDatabase
public void initConfigInZKDatabase() -
isRunning
public boolean isRunning() -
getQuorumCnxManager
get reference to QuorumCnxManager -
getCurrentEpoch
- Throws:
IOException
-
getAcceptedEpoch
- Throws:
IOException
-
setCurrentEpoch
- Throws:
IOException
-
setAcceptedEpoch
- Throws:
IOException
-
processReconfig
public boolean processReconfig(QuorumVerifier qv, Long suggestedLeaderId, Long zxid, boolean restartLE) -
updateElectionVote
protected void updateElectionVote(long newEpoch) Updates leader election info to avoid inconsistencies when a new server tries to join the ensemble. Here is the inconsistency scenario we try to solve by updating the peer epoch after following leader: Let's say we have an ensemble with 3 servers z1, z2 and z3. 1. z1, z2 were following z3 with peerEpoch to be 0xb8, the new epoch is 0xb9, aka current accepted epoch on disk. 2. z2 get restarted, which will use 0xb9 as it's peer epoch when loading the current accept epoch from disk. 3. z2 received notification from z1 and z3, which is following z3 with epoch 0xb8, so it started following z3 again with peer epoch 0xb8. 4. before z2 successfully connected to z3, z3 get restarted with new epoch 0xb9. 5. z2 will retry around a few round (default 5s) before giving up, meanwhile it will report z3 as leader. 6. z1 restarted, and looking with peer epoch 0xb9. 7. z1 voted z3, and z3 was elected as leader again with peer epoch 0xb9. 8. z2 successfully connected to z3 before giving up, but with peer epoch 0xb8. 9. z1 get restarted, looking for leader with peer epoch 0xba, but cannot join, because z2 is reporting peer epoch 0xb8, while z3 is reporting 0xb9. By updating the election vote after actually following leader, we can avoid this kind of stuck happened. Btw, the zxid and electionEpoch could be inconsistent because of the same reason, it's better to update these as well after syncing with leader, but that required protocol change which is non trivial. This problem is worked around by skipping comparing the zxid and electionEpoch when counting for votes for out of election servers during looking for leader. See https://issues.apache.org/jira/browse/ZOOKEEPER-1732 -
createCnxnManager
-
isReconfigEnabled
public boolean isReconfigEnabled() -
getSynced_observers_metric
-
createFromConfig
Create a new QuorumPeer and apply all the values per the already-parsed config.- Parameters:
config- The appertained quorum peer config.- Returns:
- A QuorumPeer instantiated with specified peer config. Note this peer is not fully initialized; caller should finish initialization through additional configurations (connection factory settings, etc).
- Throws:
IOException
-