Package org.apache.zookeeper.server
Class ZooKeeperServer
java.lang.Object
org.apache.zookeeper.server.ZooKeeperServer
- All Implemented Interfaces:
ServerStats.Provider,SessionTracker.SessionExpirer
- Direct Known Subclasses:
QuorumZooKeeperServer,ReadOnlyZooKeeperServer
public class ZooKeeperServer
extends Object
implements SessionTracker.SessionExpirer, ServerStats.Provider
This class implements a simple standalone ZooKeeperServer. It sets up the
following chain of RequestProcessors to process requests:
PrepRequestProcessor -> SyncRequestProcessor -> FinalRequestProcessor
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classprotected static enum -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringstatic final intstatic final intstatic final intstatic final Stringstatic final Stringstatic final booleanprotected RequestProcessorstatic final Stringstatic final Stringstatic final Stringprotected Stringstatic final StringStarting size of read and write ByteArroyOuputBuffers.static final intprotected DataTreeBeanprotected ZooKeeperServerBeanprotected JvmPauseMonitorprotected intSocket listen backlog.protected static final org.slf4j.Loggerprotected intvalue of -1 indicates unset, use defaultprotected intvalue of -1 indicates unset, use defaultstatic final Exceptionprotected booleanstatic final Stringprotected ServerCnxnFactoryprotected ServerCnxnFactoryprotected SessionTrackerstatic final Stringstatic final Stringprotected ZooKeeperServer.Stateprotected static intprotected intstatic final Stringstatic final String -
Constructor Summary
ConstructorsConstructorDescriptionCreates a ZooKeeperServer instance.ZooKeeperServer(File snapDir, File logDir, int tickTime) This constructor is for backward compatibility with the existing unit test code.ZooKeeperServer(FileTxnSnapLog txnLogFactory) Default constructor, relies on the config for its argument valuesZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb, String initialConfig) Keeping this constructor for backward compatibilityZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb, String initialConfig, boolean reconfigEnabled) * Creates a ZooKeeperServer instance.ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, String initialConfig) creates a zookeeperserver instance.ZooKeeperServer(JvmPauseMonitor jvmPauseMonitor, FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb, String initialConfig) Adds JvmPauseMonitor and callsZooKeeperServer(FileTxnSnapLog, int, int, int, int, ZKDatabase, String) -
Method Summary
Modifier and TypeMethodDescriptionbooleanauthWriteRequest(Request request) Check Write Requests for Potential Access Restrictionsprotected booleanThis can be used while shutting down the server to see whether the server is already shutdown or not.voidGrant or deny authorization to an operation on a node as a function of:protected booleancheckPasswd(long sessionId, byte[] passwd) voidcheckQuota(String path, byte[] lastData, byte[] data, int type) check a path whether exceeded the quota.booleancheckRequestSizeWhenReceivingMessage(int length) voidcloseSession(long sessionId) voidcloseSession(ServerCnxn cnxn, RequestHeader requestHeader) protected RequestThrottlerprotected voidvoidvoiddumpConf(PrintWriter pwriter) voiddumpEphemerals(PrintWriter pwriter) voiddumpMonitorValues(BiConsumer<String, Object> response) Hook into admin server, useful to expose additional data that do not represent metrics.voidvoidexpire(long sessionId) voidexpire(SessionTracker.Session session) voidfinishSessionInit(ServerCnxn cnxn, boolean valid) intintgetConf()doublelongintintintintintintlongreturn the last processed id from the datatreelongintMaximum number of connections allowed from particular host (ip)intintintreturn the total number of client connections that are alive to this serverintlongreturn the outstanding requests in the queue, which haven't been processed yetintlongstatic intstatic longgetState()static intintlongReturns the elapsed sync of time of transaction log in milliseconds.get the zookeeper database for this serverlonggetZxid()voidstatic booleanstatic booleanstatic booleanbooleanbooleanbooleanstatic booleanprotected voidkillSession(long sessionId, long zxid) voidloadData()Restore sessions and datavoidprocessConnectRequest(ServerCnxn cnxn, ConnectRequest request) voidprocessPacket(ServerCnxn cnxn, RequestHeader h, RequestRecord request) processTxn(Request request) processTxn(TxnHeader hdr, Record txn) protected voidprotected voidvoidreopenSession(ServerCnxn cnxn, long sessionId, byte[] passwd, int sessionTimeout) voidrequestFinished(Request request) longrestoreFromSnapshot(InputStream inputStream) Restores database from a snapshot.protected voidrevalidateSession(ServerCnxn cnxn, long sessionId, int sessionTimeout) voidsetClientPortListenBacklog(int backlog) static voidsetCloseSessionTxnEnabled(boolean enabled) voidsetCreateSessionTrackerServerId(int newId) Change the server ID used bycreateSessionTracker().static voidsetDigestEnabled(boolean digestEnabled) static voidsetEnableEagerACLCheck(boolean enabled) voidsetLargeRequestMaxBytes(int bytes) voidsetLargeRequestThreshold(int threshold) protected voidIf the underlying Zookeeper server support local session, this method will set a isLocalSession to true if a request is associated with a local session.voidsetMaxSessionTimeout(int max) voidsetMinSessionTimeout(int min) voidset the owner of this session as ownervoidsetResponseCachingEnabled(boolean isEnabled) voidstatic voidsetSerializeLastProcessedZxidEnabled(boolean serializeLastZxidEnabled) voidsetServerCnxnFactory(ServerCnxnFactory factory) protected voidsetState(ZooKeeperServer.State state) Sets the state of ZooKeeper server.static voidsetThrottledOpWaitTime(int time) voidsetTickTime(int tickTime) voidsetTxnLogFactory(FileTxnSnapLog txnLog) protected voidvoidsetZKDatabase(ZKDatabase zkDb) set the zkdatabase for this zookeeper servervoidsetZxid(long zxid) booleanbooleanshouldThrottle(long outStandingCount) voidshutdown()voidshutdown(boolean fullyShutDown) Shut down the server instancevoidprotected voidprotected voidvoidprotected voidvoidstartup()voidvoidsubmitRequest(Request si) voidtakeSnapshot(boolean syncSnap) takeSnapshot(boolean syncSnap, boolean isSevere, boolean fastForwardFromEdits) Takes a snapshot on the server.voidtruncateLog(long zxid) truncate the log to get in sync with others if in a quorumprotected voidprotected voidprotected voidvalidateSession(ServerCnxn cnxn, long sessionId) Validate if a particular session can be reestablished.
-
Field Details
-
LOG
protected static final org.slf4j.Logger LOG -
GLOBAL_OUTSTANDING_LIMIT
- See Also:
-
ENABLE_EAGER_ACL_CHECK
- See Also:
-
SKIP_ACL
- See Also:
-
ENFORCE_QUOTA
- See Also:
-
enforceQuota
public static final boolean enforceQuota -
SASL_SUPER_USER
- See Also:
-
ALLOW_SASL_FAILED_CLIENTS
- See Also:
-
ZOOKEEPER_DIGEST_ENABLED
- See Also:
-
ZOOKEEPER_SERIALIZE_LAST_PROCESSED_ZXID_ENABLED
- See Also:
-
CLOSE_SESSION_TXN_ENABLED
- See Also:
-
jmxServerBean
-
jmxDataTreeBean
-
DEFAULT_TICK_TIME
public static final int DEFAULT_TICK_TIME- See Also:
-
tickTime
protected int tickTime -
DEFAULT_THROTTLED_OP_WAIT_TIME
public static final int DEFAULT_THROTTLED_OP_WAIT_TIME- See Also:
-
throttledOpWaitTime
protected static volatile int throttledOpWaitTime -
minSessionTimeout
protected int minSessionTimeoutvalue of -1 indicates unset, use default -
maxSessionTimeout
protected int maxSessionTimeoutvalue of -1 indicates unset, use default -
listenBacklog
protected int listenBacklogSocket listen backlog. Value of -1 indicates unset -
sessionTracker
-
ok
-
firstProcessor
-
jvmPauseMonitor
-
state
-
initialConfig
-
reconfigEnabled
protected boolean reconfigEnabled -
serverCnxnFactory
-
secureServerCnxnFactory
-
INT_BUFFER_STARTING_SIZE_BYTES
Starting size of read and write ByteArroyOuputBuffers. Default is 32 bytes. Flag not used for small transfers like connectResponses.- See Also:
-
DEFAULT_STARTING_BUFFER_SIZE
public static final int DEFAULT_STARTING_BUFFER_SIZE- See Also:
-
intBufferStartingSizeBytes
public static final int intBufferStartingSizeBytes -
GET_DATA_RESPONSE_CACHE_SIZE
- See Also:
-
GET_CHILDREN_RESPONSE_CACHE_SIZE
- See Also:
-
SNAP_COUNT
- See Also:
-
-
Constructor Details
-
ZooKeeperServer
public ZooKeeperServer()Creates a ZooKeeperServer instance. Nothing is setup, use the setX methods to prepare the instance (eg datadir, datalogdir, ticktime, builder, etc...) -
ZooKeeperServer
public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb, String initialConfig) Keeping this constructor for backward compatibility -
ZooKeeperServer
public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb, String initialConfig, boolean reconfigEnabled) * Creates a ZooKeeperServer instance. It sets everything up, but doesn't actually start listening for clients until run() is invoked. -
ZooKeeperServer
public ZooKeeperServer(JvmPauseMonitor jvmPauseMonitor, FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb, String initialConfig) Adds JvmPauseMonitor and callsZooKeeperServer(FileTxnSnapLog, int, int, int, int, ZKDatabase, String) -
ZooKeeperServer
creates a zookeeperserver instance.- Parameters:
txnLogFactory- the file transaction snapshot logging classtickTime- the ticktime for the server- Throws:
IOException
-
ZooKeeperServer
This constructor is for backward compatibility with the existing unit test code. It defaults to FileLogProvider persistence provider.- Throws:
IOException
-
ZooKeeperServer
Default constructor, relies on the config for its argument values- Throws:
IOException
-
-
Method Details
-
isEnableEagerACLCheck
public static boolean isEnableEagerACLCheck() -
setEnableEagerACLCheck
public static void setEnableEagerACLCheck(boolean enabled) -
isCloseSessionTxnEnabled
public static boolean isCloseSessionTxnEnabled() -
setCloseSessionTxnEnabled
public static void setCloseSessionTxnEnabled(boolean enabled) -
getInitialConfig
-
serverStats
-
getRequestPathMetricsCollector
-
connThrottle
-
dumpConf
-
getConf
-
getZKDatabase
get the zookeeper database for this server- Returns:
- the zookeeper database for this server
-
setZKDatabase
set the zkdatabase for this zookeeper server- Parameters:
zkDb-
-
loadData
Restore sessions and data- Throws:
IOExceptionInterruptedException
-
takeSnapshot
- Throws:
IOException
-
takeSnapshot
- Throws:
IOException
-
takeSnapshot
public File takeSnapshot(boolean syncSnap, boolean isSevere, boolean fastForwardFromEdits) throws IOException Takes a snapshot on the server.- Parameters:
syncSnap- syncSnap sync the snapshot immediately after writeisSevere- if true system exist, otherwise throw IOExceptionfastForwardFromEdits- whether fast forward database to the latest recorded transactions- Returns:
- file snapshot file object
- Throws:
IOException
-
restoreFromSnapshot
Restores database from a snapshot. It is used by the restore admin server command.- Parameters:
inputStream- input stream of snapshot- Throws:
IOException
-
shouldForceWriteInitialSnapshotAfterLeaderElection
public boolean shouldForceWriteInitialSnapshotAfterLeaderElection() -
getDataDirSize
public long getDataDirSize()- Specified by:
getDataDirSizein interfaceServerStats.Provider
-
getLogDirSize
public long getLogDirSize()- Specified by:
getLogDirSizein interfaceServerStats.Provider
-
getZxid
public long getZxid() -
getSessionTracker
-
setZxid
public void setZxid(long zxid) -
closeSession
public void closeSession(long sessionId) -
killSession
protected void killSession(long sessionId, long zxid) -
expire
- Specified by:
expirein interfaceSessionTracker.SessionExpirer
-
expire
public void expire(long sessionId) -
registerJMX
protected void registerJMX() -
startdata
- Throws:
IOExceptionInterruptedException
-
startup
public void startup() -
startupWithoutServing
public void startupWithoutServing() -
startServing
public void startServing() -
startJvmPauseMonitor
protected void startJvmPauseMonitor() -
startRequestThrottler
protected void startRequestThrottler() -
createRequestThrottler
-
setupRequestProcessors
protected void setupRequestProcessors() -
getZooKeeperServerListener
-
setCreateSessionTrackerServerId
public void setCreateSessionTrackerServerId(int newId) Change the server ID used bycreateSessionTracker(). Must be called prior tostartup()being called- Parameters:
newId- ID to use
-
createSessionTracker
protected void createSessionTracker() -
startSessionTracker
protected void startSessionTracker() -
setState
Sets the state of ZooKeeper server. After changing the state, it notifies the server state change to a registered shutdown handler, if any.The following are the server state transitions:
- During startup the server will be in the INITIAL state.
- After successfully starting, the server sets the state to RUNNING.
- The server transitions to the ERROR state if it hits an internal
error.
ZooKeeperServerListenerImplnotifies any critical resource error events, e.g., SyncRequestProcessor not being able to write a txn to disk. - During shutdown the server sets the state to SHUTDOWN, which corresponds to the server not running.
- During maintenance (e.g. restore) the server sets the state to MAINTENANCE
- Parameters:
state- new server state.
-
canShutdown
protected boolean canShutdown()This can be used while shutting down the server to see whether the server is already shutdown or not.- Returns:
- true if the server is running or server hits an error, false otherwise.
-
isRunning
public boolean isRunning()- Returns:
- true if the server is running, false otherwise.
-
shutdown
public void shutdown() -
shutdown
public void shutdown(boolean fullyShutDown) Shut down the server instance- Parameters:
fullyShutDown- true if another server using the same database will not replace this one in the same process
-
unregisterJMX
protected void unregisterJMX() -
incInProcess
public void incInProcess() -
decInProcess
public void decInProcess() -
getInProcess
public int getInProcess() -
getInflight
public int getInflight() -
checkPasswd
protected boolean checkPasswd(long sessionId, byte[] passwd) -
setOwner
set the owner of this session as owner- Parameters:
id- the session idowner- the owner of the session- Throws:
KeeperException.SessionExpiredException
-
revalidateSession
protected void revalidateSession(ServerCnxn cnxn, long sessionId, int sessionTimeout) throws IOException - Throws:
IOException
-
reopenSession
public void reopenSession(ServerCnxn cnxn, long sessionId, byte[] passwd, int sessionTimeout) throws IOException - Throws:
IOException
-
finishSessionInit
-
closeSession
-
getServerId
public long getServerId()- Specified by:
getServerIdin interfaceSessionTracker.SessionExpirer
-
setLocalSessionFlag
If the underlying Zookeeper server support local session, this method will set a isLocalSession to true if a request is associated with a local session.- Parameters:
si-
-
submitRequest
-
enqueueRequest
-
submitRequestNow
-
getSnapCount
public static int getSnapCount() -
getGlobalOutstandingLimit
public int getGlobalOutstandingLimit() -
getSnapSizeInBytes
public static long getSnapSizeInBytes() -
setServerCnxnFactory
-
getServerCnxnFactory
-
getSecureServerCnxnFactory
-
setSecureServerCnxnFactory
-
getLastProcessedZxid
public long getLastProcessedZxid()return the last processed id from the datatree- Specified by:
getLastProcessedZxidin interfaceServerStats.Provider
-
getOutstandingRequests
public long getOutstandingRequests()return the outstanding requests in the queue, which haven't been processed yet- Specified by:
getOutstandingRequestsin interfaceServerStats.Provider
-
getNumAliveConnections
public int getNumAliveConnections()return the total number of client connections that are alive to this server- Specified by:
getNumAliveConnectionsin interfaceServerStats.Provider
-
truncateLog
truncate the log to get in sync with others if in a quorum- Parameters:
zxid- the zxid that it needs to get in sync with others- Throws:
IOException
-
getTickTime
public int getTickTime() -
setTickTime
public void setTickTime(int tickTime) -
getThrottledOpWaitTime
public static int getThrottledOpWaitTime() -
setThrottledOpWaitTime
public static void setThrottledOpWaitTime(int time) -
getMinSessionTimeout
public int getMinSessionTimeout() -
setMinSessionTimeout
public void setMinSessionTimeout(int min) -
getMaxSessionTimeout
public int getMaxSessionTimeout() -
setMaxSessionTimeout
public void setMaxSessionTimeout(int max) -
getClientPortListenBacklog
public int getClientPortListenBacklog() -
setClientPortListenBacklog
public void setClientPortListenBacklog(int backlog) -
getClientPort
public int getClientPort() -
getSecureClientPort
public int getSecureClientPort() -
getMaxClientCnxnsPerHost
public int getMaxClientCnxnsPerHost()Maximum number of connections allowed from particular host (ip) -
setTxnLogFactory
-
getTxnLogFactory
-
getTxnLogElapsedSyncTime
public long getTxnLogElapsedSyncTime()Returns the elapsed sync of time of transaction log in milliseconds. -
getState
- Specified by:
getStatein interfaceServerStats.Provider
-
dumpEphemerals
-
getEphemerals
-
getConnectionDropChance
public double getConnectionDropChance() -
processConnectRequest
public void processConnectRequest(ServerCnxn cnxn, ConnectRequest request) throws IOException, ClientCnxnLimitException - Throws:
IOExceptionClientCnxnLimitException
-
validateSession
Validate if a particular session can be reestablished.- Parameters:
cnxn-sessionId-- Throws:
IOException
-
shouldThrottle
public boolean shouldThrottle(long outStandingCount) -
getLargeRequestMaxBytes
public int getLargeRequestMaxBytes() -
setLargeRequestMaxBytes
public void setLargeRequestMaxBytes(int bytes) -
getLargeRequestThreshold
public int getLargeRequestThreshold() -
setLargeRequestThreshold
public void setLargeRequestThreshold(int threshold) -
getLargeRequestBytes
public int getLargeRequestBytes() -
checkRequestSizeWhenReceivingMessage
- Throws:
IOException
-
requestFinished
-
processPacket
public void processPacket(ServerCnxn cnxn, RequestHeader h, RequestRecord request) throws IOException - Throws:
IOException
-
processTxn
-
processTxn
-
getSessionExpiryMap
-
isResponseCachingEnabled
public boolean isResponseCachingEnabled() -
setResponseCachingEnabled
public void setResponseCachingEnabled(boolean isEnabled) -
getReadResponseCache
-
getGetChildrenResponseCache
-
registerMetrics
protected void registerMetrics() -
unregisterMetrics
protected void unregisterMetrics() -
dumpMonitorValues
Hook into admin server, useful to expose additional data that do not represent metrics.- Parameters:
response- a sink which collects the data.
-
checkACL
public void checkACL(ServerCnxn cnxn, List<ACL> acl, int perm, List<Id> ids, String path, List<ACL> setAcls) throws KeeperException.NoAuthException Grant or deny authorization to an operation on a node as a function of:- Parameters:
cnxn- : the server connection or null for admin server commandsacl- : set of ACLs for the nodeperm- : the permission that the client is requestingids- : the credentials supplied by the clientpath- : the ZNode pathsetAcls- : for set ACL operations, the list of ACLs being set. Otherwise null.- Throws:
KeeperException.NoAuthException
-
checkQuota
public void checkQuota(String path, byte[] lastData, byte[] data, int type) throws KeeperException.QuotaExceededException check a path whether exceeded the quota.- Parameters:
path- the path of the node, used for the quota prefix checklastData- the current node data,nullfor nonedata- the data to be set, ornullfor nonetype- currently, create and setData need to check quota- Throws:
KeeperException.QuotaExceededException
-
isDigestEnabled
public static boolean isDigestEnabled() -
setDigestEnabled
public static void setDigestEnabled(boolean digestEnabled) -
isSerializeLastProcessedZxidEnabled
public static boolean isSerializeLastProcessedZxidEnabled() -
setSerializeLastProcessedZxidEnabled
public static void setSerializeLastProcessedZxidEnabled(boolean serializeLastZxidEnabled) -
authWriteRequest
Check Write Requests for Potential Access Restrictions Before a request is being proposed to the quorum, lets check it against local ACLs. Non-write requests (read, session, etc.) are passed along. Invalid requests are sent a response. While we are at it, if the request will set an ACL: make sure it's a valid one.- Parameters:
request-- Returns:
- true if request is permitted, false if not.
- Throws:
IOException
-
getOutstandingHandshakeNum
public int getOutstandingHandshakeNum() -
isReconfigEnabled
public boolean isReconfigEnabled() -
getZkShutdownHandler
-