Class ZooKeeperServer

    • Field Detail

      • LOG

        protected static final org.slf4j.Logger LOG
      • enforceQuota

        public static final boolean enforceQuota
      • tickTime

        protected int tickTime
      • DEFAULT_THROTTLED_OP_WAIT_TIME

        public static final int DEFAULT_THROTTLED_OP_WAIT_TIME
        See Also:
        Constant Field Values
      • throttledOpWaitTime

        protected static volatile int throttledOpWaitTime
      • minSessionTimeout

        protected int minSessionTimeout
        value of -1 indicates unset, use default
      • maxSessionTimeout

        protected int maxSessionTimeout
        value of -1 indicates unset, use default
      • listenBacklog

        protected int listenBacklog
        Socket listen backlog. Value of -1 indicates unset
      • initialConfig

        protected String initialConfig
      • reconfigEnabled

        protected boolean reconfigEnabled
      • INT_BUFFER_STARTING_SIZE_BYTES

        public static final String 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:
        Constant Field Values
      • DEFAULT_STARTING_BUFFER_SIZE

        public static final int DEFAULT_STARTING_BUFFER_SIZE
        See Also:
        Constant Field Values
      • intBufferStartingSizeBytes

        public static final int intBufferStartingSizeBytes
    • Constructor Detail

      • 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​(FileTxnSnapLog txnLogFactory,
                               int tickTime,
                               String initialConfig)
        creates a zookeeperserver instance.
        Parameters:
        txnLogFactory - the file transaction snapshot logging class
        tickTime - the ticktime for the server
        Throws:
        IOException
      • ZooKeeperServer

        public ZooKeeperServer​(File snapDir,
                               File logDir,
                               int tickTime)
                        throws IOException
        This constructor is for backward compatibility with the existing unit test code. It defaults to FileLogProvider persistence provider.
        Throws:
        IOException
      • ZooKeeperServer

        public ZooKeeperServer​(FileTxnSnapLog txnLogFactory)
                        throws IOException
        Default constructor, relies on the config for its argument values
        Throws:
        IOException
    • Method Detail

      • 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

        public String getInitialConfig()
      • dumpConf

        public void dumpConf​(PrintWriter pwriter)
      • getZKDatabase

        public ZKDatabase getZKDatabase()
        get the zookeeper database for this server
        Returns:
        the zookeeper database for this server
      • setZKDatabase

        public void setZKDatabase​(ZKDatabase zkDb)
        set the zkdatabase for this zookeeper server
        Parameters:
        zkDb -
      • takeSnapshot

        public void takeSnapshot()
      • takeSnapshot

        public void takeSnapshot​(boolean syncSnap)
      • shouldForceWriteInitialSnapshotAfterLeaderElection

        public boolean shouldForceWriteInitialSnapshotAfterLeaderElection()
      • getZxid

        public long getZxid()
      • setZxid

        public void setZxid​(long zxid)
      • closeSession

        public void closeSession​(long sessionId)
      • killSession

        protected void killSession​(long sessionId,
                                   long zxid)
      • expire

        public void expire​(long sessionId)
      • registerJMX

        protected void registerJMX()
      • startup

        public void startup()
      • startupWithoutServing

        public void startupWithoutServing()
      • startServing

        public void startServing()
      • startJvmPauseMonitor

        protected void startJvmPauseMonitor()
      • startRequestThrottler

        protected void startRequestThrottler()
      • setupRequestProcessors

        protected void setupRequestProcessors()
      • setCreateSessionTrackerServerId

        public void setCreateSessionTrackerServerId​(int newId)
        Change the server ID used by createSessionTracker(). Must be called prior to startup() being called
        Parameters:
        newId - ID to use
      • createSessionTracker

        protected void createSessionTracker()
      • startSessionTracker

        protected void startSessionTracker()
      • setState

        protected void setState​(ZooKeeperServer.State state)
        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. ZooKeeperServerListenerImpl notifies 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.
        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)
      • finishSessionInit

        public void finishSessionInit​(ServerCnxn cnxn,
                                      boolean valid)
      • setLocalSessionFlag

        protected void setLocalSessionFlag​(Request si)
        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

        public void submitRequest​(Request si)
      • enqueueRequest

        public void enqueueRequest​(Request si)
      • submitRequestNow

        public void submitRequestNow​(Request si)
      • getSnapCount

        public static int getSnapCount()
      • getGlobalOutstandingLimit

        public int getGlobalOutstandingLimit()
      • getSnapSizeInBytes

        public static long getSnapSizeInBytes()
      • setServerCnxnFactory

        public void setServerCnxnFactory​(ServerCnxnFactory factory)
      • setSecureServerCnxnFactory

        public void setSecureServerCnxnFactory​(ServerCnxnFactory factory)
      • getOutstandingRequests

        public long getOutstandingRequests()
        return the outstanding requests in the queue, which havent been processed yet
        Specified by:
        getOutstandingRequests in interface ServerStats.Provider
      • getNumAliveConnections

        public int getNumAliveConnections()
        return the total number of client connections that are alive to this server
        Specified by:
        getNumAliveConnections in interface ServerStats.Provider
      • truncateLog

        public void truncateLog​(long zxid)
                         throws IOException
        trunccate 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

        public void setTxnLogFactory​(FileTxnSnapLog txnLog)
      • getTxnLogElapsedSyncTime

        public long getTxnLogElapsedSyncTime()
        Returns the elapsed sync of time of transaction log in milliseconds.
      • dumpEphemerals

        public void dumpEphemerals​(PrintWriter pwriter)
      • getConnectionDropChance

        public double getConnectionDropChance()
      • validateSession

        protected void validateSession​(ServerCnxn cnxn,
                                       long sessionId)
                                throws IOException
        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

        public boolean checkRequestSizeWhenReceivingMessage​(int length)
                                                     throws IOException
        Throws:
        IOException
      • requestFinished

        public void requestFinished​(Request request)
      • getSessionExpiryMap

        public Map<Long,​Set<Long>> getSessionExpiryMap()
      • isResponseCachingEnabled

        public boolean isResponseCachingEnabled()
      • setResponseCachingEnabled

        public void setResponseCachingEnabled​(boolean isEnabled)
      • getReadResponseCache

        public ResponseCache getReadResponseCache()
      • getGetChildrenResponseCache

        public ResponseCache getGetChildrenResponseCache()
      • registerMetrics

        protected void registerMetrics()
      • unregisterMetrics

        protected void unregisterMetrics()
      • dumpMonitorValues

        public void dumpMonitorValues​(BiConsumer<String,​Object> response)
        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
        acl - : set of ACLs for the node
        perm - : the permission that the client is requesting
        ids - : the credentials supplied by the client
        path - : the ZNode path
        setAcls - : 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 check
        lastData - the current node data, null for none
        data - the data to be set, or null for none
        type - currently, create and setData need to check quota
        Throws:
        KeeperException.QuotaExceededException
      • isDigestEnabled

        public static boolean isDigestEnabled()
      • setDigestEnabled

        public static void setDigestEnabled​(boolean digestEnabled)
      • authWriteRequest

        public boolean authWriteRequest​(Request request)
        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()