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
    • Method Detail

      • 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
      • 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
      • 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.
        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,
                                                      File file,
                                                      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
        file - path to file to be uploaded
        Throws:
        IOException
        org.apache.zookeeper.KeeperException
        InterruptedException
      • printLayoutToStdOut

        public void printLayoutToStdOut()
                                 throws org.apache.zookeeper.KeeperException,
                                        InterruptedException
        Prints current ZooKeeper layout to stdout.
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException
      • prettyPrint

        public static String prettyPrint​(String input,
                                         int indent)
      • isClosed

        public boolean isClosed()
      • 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
      • 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
        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