Class ZkMaintenanceUtils


  • public class ZkMaintenanceUtils
    extends Object
    Class to hold ZK upload/download/move common code. With the advent of the upconfig/downconfig/cp/ls/mv commands in bin/solr it made sense to keep the individual transfer methods in a central place, so here it is.
    • Field Detail

      • UPLOAD_FILENAME_EXCLUDE_PATTERN

        public static final Pattern UPLOAD_FILENAME_EXCLUDE_PATTERN
        files matching this pattern will not be uploaded to ZkNode /configs
      • DEFAULT_FORBIDDEN_FILE_TYPES

        public static final Set<String> DEFAULT_FORBIDDEN_FILE_TYPES
    • Method Detail

      • listZnode

        public static String listZnode​(SolrZkClient zkClient,
                                       String path,
                                       Boolean recurse)
                                throws org.apache.zookeeper.KeeperException,
                                       InterruptedException,
                                       org.apache.solr.client.solrj.SolrServerException
        Lists a ZNode child and (optionally) the znodes of all the children. No data is dumped.
        Parameters:
        path - The node to remove on Zookeeper
        recurse - Whether to remove children.
        Returns:
        an indented list of the znodes suitable for display
        Throws:
        org.apache.zookeeper.KeeperException - Could not perform the Zookeeper operation.
        InterruptedException - Thread interrupted
        org.apache.solr.client.solrj.SolrServerException - zookeeper node has children and recurse not specified.
      • zkTransfer

        public static void zkTransfer​(SolrZkClient zkClient,
                                      String src,
                                      Boolean srcIsZk,
                                      String dst,
                                      Boolean dstIsZk,
                                      Boolean recurse)
                               throws org.apache.solr.client.solrj.SolrServerException,
                                      org.apache.zookeeper.KeeperException,
                                      InterruptedException,
                                      IOException
        Copy between local file system and Zookeeper, or from one Zookeeper node to another, optionally copying recursively.
        Parameters:
        src - Source to copy from. Both src and dst may be Znodes. However, both may NOT be local
        dst - The place to copy the files too. Both src and dst may be Znodes. However both may NOT be local
        recurse - if the source is a directory, reccursively copy the contents iff this is true.
        Throws:
        org.apache.solr.client.solrj.SolrServerException - Explanatory exception due to bad params, failed operation, etc.
        org.apache.zookeeper.KeeperException - Could not perform the Zookeeper operation.
        InterruptedException - Thread interrupted
        IOException
      • moveZnode

        public static void moveZnode​(SolrZkClient zkClient,
                                     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
      • traverseZkTree

        public static void traverseZkTree​(SolrZkClient zkClient,
                                          String path,
                                          ZkMaintenanceUtils.VISIT_ORDER visitOrder,
                                          ZkMaintenanceUtils.ZkVisitor visitor)
                                   throws InterruptedException,
                                          org.apache.zookeeper.KeeperException
        Recursively visit a zk tree rooted at path and apply the given visitor to each path. Exists as a separate method because some of the logic can get nuanced.
        Parameters:
        path - the path to start from
        visitOrder - whether to call the visitor at the at the ending or beginning of the run.
        visitor - the operation to perform on each path
        Throws:
        InterruptedException
        org.apache.zookeeper.KeeperException
      • getZkParent

        public static String getZkParent​(String path)
      • createZkNodeName

        public static String createZkNodeName​(String zkRoot,
                                              Path root,
                                              Path file)
      • isFileForbiddenInConfigSets

        public static boolean isFileForbiddenInConfigSets​(String filePath)
      • ensureExists

        public static void ensureExists​(String path,
                                        byte[] data,
                                        org.apache.zookeeper.CreateMode createMode,
                                        SolrZkClient zkClient,
                                        int skipPathParts)
                                 throws org.apache.zookeeper.KeeperException,
                                        InterruptedException
        Create a node if it does not exist
        Parameters:
        path - the path at which to create the znode
        data - the optional data to set on the znode
        createMode - the mode with which to create the znode
        zkClient - the client to use to check and create
        skipPathParts - how many path elements to skip
        Throws:
        org.apache.zookeeper.KeeperException
        InterruptedException