Class SolrZkClient

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class SolrZkClient
    extends Object
    implements Closeable
    All Solr ZooKeeper interactions should go through this class rather than ZooKeeper. This class handles synchronous connects and reconnections.
    • Field Detail

      • ZK_CRED_PROVIDER_CLASS_NAME_VM_PARAM_NAME

        public static final String ZK_CRED_PROVIDER_CLASS_NAME_VM_PARAM_NAME
        See Also:
        Constant Field Values
      • ZK_ACL_PROVIDER_CLASS_NAME_VM_PARAM_NAME

        public static final String ZK_ACL_PROVIDER_CLASS_NAME_VM_PARAM_NAME
        See Also:
        Constant Field Values
      • ZK_CREDENTIALS_INJECTOR_CLASS_NAME_VM_PARAM_NAME

        public static final String ZK_CREDENTIALS_INJECTOR_CLASS_NAME_VM_PARAM_NAME
        See Also:
        Constant Field Values
    • Method Detail

      • getMetrics

        public org.apache.solr.common.MapWriter getMetrics()
      • getZkClientTimeout

        public int getZkClientTimeout()
      • createZkCredentialsToAddAutomatically

        protected ZkCredentialsProvider createZkCredentialsToAddAutomatically()
      • createZkACLProvider

        protected ZkACLProvider createZkACLProvider()
      • isConnected

        public boolean isConnected()
        Returns true if client is connected
      • exists

        public org.apache.zookeeper.data.Stat exists​(String path,
                                                     org.apache.zookeeper.Watcher watcher,
                                                     boolean retryOnConnLoss)
                                              throws org.apache.zookeeper.KeeperException,
                                                     InterruptedException
        Return the stat of the node of the given path. Return null if no such a node exists.

        If the watch is non-null and the call is successful (no exception is thrown), a watch will be left on the node with the given path. The watch will be triggered by a successful operation that creates/delete the node or sets the data on the node.

        Parameters:
        path - the node path
        watcher - explicit watcher
        Returns:
        the stat of the node of the given path; return null if no such a node exists.
        Throws:
        org.apache.zookeeper.KeeperException - If the server signals an error
        InterruptedException - If the server transaction is interrupted.
        IllegalArgumentException - if an invalid path is specified
      • getChildren

        public List<String> getChildren​(String path,
                                        org.apache.zookeeper.Watcher watcher,
                                        boolean retryOnConnLoss)
                                 throws org.apache.zookeeper.KeeperException,
                                        InterruptedException
        Returns children of the node at the path
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • getChildren

        public List<String> getChildren​(String path,
                                        org.apache.zookeeper.Watcher watcher,
                                        org.apache.zookeeper.data.Stat stat,
                                        boolean retryOnConnLoss)
                                 throws org.apache.zookeeper.KeeperException,
                                        InterruptedException
        Returns children of the node at the path
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • getData

        public byte[] getData​(String path,
                              org.apache.zookeeper.Watcher watcher,
                              org.apache.zookeeper.data.Stat stat,
                              boolean retryOnConnLoss)
                       throws org.apache.zookeeper.KeeperException,
                              InterruptedException
        Returns node's data
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • setData

        public org.apache.zookeeper.data.Stat setData​(String path,
                                                      byte[] data,
                                                      int version,
                                                      boolean retryOnConnLoss)
                                               throws org.apache.zookeeper.KeeperException,
                                                      InterruptedException
        Returns node's state
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • create

        public String create​(String path,
                             byte[] data,
                             org.apache.zookeeper.CreateMode createMode,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Returns path of created node
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • create

        public String create​(String path,
                             byte[] data,
                             org.apache.zookeeper.CreateMode createMode,
                             boolean retryOnConnLoss,
                             org.apache.zookeeper.data.Stat stat)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Returns path of created node
        Parameters:
        stat - Output argument that captures created node details
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Creates the path in ZooKeeper, creating each node as necessary.

        e.g. If path=/solr/group/node and none of the nodes, solr, group, node exist, each will be created.

        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             boolean failOnExists,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             org.apache.zookeeper.CreateMode createMode,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             byte[] data,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Creates the path in ZooKeeper, creating each node as necessary.
        Parameters:
        data - to set on the last zkNode
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             byte[] data,
                             org.apache.zookeeper.CreateMode createMode,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Creates the path in ZooKeeper, creating each node as necessary.

        e.g. If path=/solr/group/node and none of the nodes, solr, group, node exist, each will be created.

        Parameters:
        data - to set on the last zkNode
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             byte[] data,
                             org.apache.zookeeper.CreateMode createMode,
                             org.apache.zookeeper.Watcher watcher,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Creates the path in ZooKeeper, creating each node as necessary.

        e.g. If path=/solr/group/node and none of the nodes, solr, group, node exist, each will be created.

        Parameters:
        data - to set on the last zkNode
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             byte[] data,
                             org.apache.zookeeper.CreateMode createMode,
                             org.apache.zookeeper.Watcher watcher,
                             boolean failOnExists,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Creates the path in ZooKeeper, creating each node as necessary.

        e.g. If path=/solr/group/node and none of the nodes, solr, group, node exist, each will be created.

        Parameters:
        data - to set on the last zkNode
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String path,
                             byte[] data,
                             org.apache.zookeeper.CreateMode createMode,
                             org.apache.zookeeper.Watcher watcher,
                             boolean failOnExists,
                             boolean retryOnConnLoss,
                             int skipPathParts)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Creates the path in ZooKeeper, creating each node as necessary.

        e.g. If path=/solr/group/node and none of the nodes, solr, group, node exist, each will be created.

        skipPathParts will force the call to fail if the first skipPathParts do not exist already.

        Note: retryOnConnLoss is only respected for the final node - nodes before that are always retried on connection loss.

        Note: if failOnExists == false then we will always overwrite the existing data with the given data

        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • makePath

        public void makePath​(String zkPath,
                             org.apache.zookeeper.CreateMode createMode,
                             org.apache.zookeeper.Watcher watcher,
                             boolean retryOnConnLoss)
                      throws org.apache.zookeeper.KeeperException,
                             InterruptedException
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • setData

        public org.apache.zookeeper.data.Stat setData​(String path,
                                                      byte[] data,
                                                      boolean retryOnConnLoss)
                                               throws org.apache.zookeeper.KeeperException,
                                                      InterruptedException
        Write data to ZooKeeper.
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • setData

        public org.apache.zookeeper.data.Stat setData​(String path,
                                                      Path data,
                                                      boolean retryOnConnLoss)
                                               throws IOException,
                                                      org.apache.zookeeper.KeeperException,
                                                      InterruptedException
        Write file to ZooKeeper - default system encoding used.
        Parameters:
        path - path to upload file to e.g. /solr/conf/solrconfig.xml
        data - a filepath to read data from
        Throws:
        IOException
        org.apache.zookeeper.KeeperException
        InterruptedException
      • isClosed

        public boolean isClosed()
      • getZooKeeper

        public org.apache.zookeeper.ZooKeeper getZooKeeper()
      • containsChroot

        public static boolean containsChroot​(String zkHost)
        Validates if zkHost contains a chroot. See http://zookeeper.apache.org/doc/r3.2.2/zookeeperProgrammers.html#ch_zkSessions
      • checkInterrupted

        public static Throwable checkInterrupted​(Throwable e)
        Check to see if a Throwable is an InterruptedException, and if it is, set the thread interrupt flag
        Parameters:
        e - the Throwable
        Returns:
        the Throwable
      • getZkServerAddress

        public String getZkServerAddress()
        Returns:
        the address of the zookeeper cluster
      • getConfig

        public String getConfig()
        Gets the raw config node /zookeeper/config as returned by server. Response may look like
         server.1=localhost:2780:2783:participant;localhost:2791
         server.2=localhost:2781:2784:participant;localhost:2792
         server.3=localhost:2782:2785:participant;localhost:2793
         version=400000003
         
        Returns:
        Multi line string representing the config. For standalone ZK this will return empty string
      • getACL

        public List<org.apache.zookeeper.data.ACL> getACL​(String path,
                                                          org.apache.zookeeper.data.Stat stat,
                                                          boolean retryOnConnLoss)
                                                   throws org.apache.zookeeper.KeeperException,
                                                          InterruptedException
        Returns:
        the ACLs on a single node in ZooKeeper.
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • setACL

        public org.apache.zookeeper.data.Stat setACL​(String path,
                                                     List<org.apache.zookeeper.data.ACL> acls,
                                                     boolean retryOnConnLoss)
                                              throws InterruptedException,
                                                     org.apache.zookeeper.KeeperException
        Set the ACL on a single node in ZooKeeper. This will replace all existing ACL on that node.
        Parameters:
        path - path to set ACL on e.g. /solr/conf/solrconfig.xml
        acls - a list of ACLs to be applied
        retryOnConnLoss - true if the command should be retried on connection loss
        Returns:
        the stat of the node
        Throws:
        InterruptedException
        org.apache.zookeeper.KeeperException
      • updateACLs

        public void updateACLs​(String root)
                        throws org.apache.zookeeper.KeeperException,
                               InterruptedException
        Update all ACLs for a zk tree based on our configured ZkACLProvider.
        Parameters:
        root - the root node to recursively update
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • listZnode

        public String listZnode​(String path,
                                Boolean recurse)
                         throws org.apache.zookeeper.KeeperException,
                                InterruptedException,
                                org.apache.solr.client.solrj.SolrServerException
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
        org.apache.solr.client.solrj.SolrServerException
      • moveZnode

        public void moveZnode​(String src,
                              String dst)
                       throws org.apache.solr.client.solrj.SolrServerException,
                              org.apache.zookeeper.KeeperException,
                              InterruptedException
        Throws:
        org.apache.solr.client.solrj.SolrServerException
        org.apache.zookeeper.KeeperException
        InterruptedException