Class SolrZkClient
- java.lang.Object
-
- org.apache.solr.common.cloud.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SolrZkClient.Builder
static class
SolrZkClient.NodeData
static class
SolrZkClient.ZkMetrics
-
Field Summary
Fields Modifier and Type Field Description static String
ZK_ACL_PROVIDER_CLASS_NAME_VM_PARAM_NAME
static String
ZK_CRED_PROVIDER_CLASS_NAME_VM_PARAM_NAME
static String
ZK_CREDENTIALS_INJECTOR_CLASS_NAME_VM_PARAM_NAME
-
Constructor Summary
Constructors Constructor Description SolrZkClient(SolrZkClient.Builder builder)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
atomicUpdate(String path, BiFunction<org.apache.zookeeper.data.Stat,byte[],byte[]> editor)
void
atomicUpdate(String path, Function<byte[],byte[]> editor)
static Throwable
checkInterrupted(Throwable e)
Check to see if a Throwable is an InterruptedException, and if it is, set the thread interrupt flagvoid
clean(String path)
void
clean(String path, Predicate<String> nodeFilter)
void
close()
static boolean
containsChroot(String zkHost)
Validates if zkHost contains a chroot.String
create(String path, byte[] data, org.apache.zookeeper.CreateMode createMode, boolean retryOnConnLoss)
Returns path of created nodeString
create(String path, byte[] data, org.apache.zookeeper.CreateMode createMode, boolean retryOnConnLoss, org.apache.zookeeper.data.Stat stat)
Returns path of created nodeprotected ZkACLProvider
createZkACLProvider()
protected ZkCredentialsInjector
createZkCredentialsInjector()
protected ZkCredentialsProvider
createZkCredentialsToAddAutomatically()
void
delete(String path, int version, boolean retryOnConnLoss)
void
downConfig(String confName, Path confPath)
void
downloadFromZK(String zkPath, Path dir)
Boolean
exists(String path, boolean retryOnConnLoss)
Returns true if path existsorg.apache.zookeeper.data.Stat
exists(String path, org.apache.zookeeper.Watcher watcher, boolean retryOnConnLoss)
Return the stat of the node of the given path.List<org.apache.zookeeper.data.ACL>
getACL(String path, org.apache.zookeeper.data.Stat stat, boolean retryOnConnLoss)
List<String>
getChildren(String path, org.apache.zookeeper.Watcher watcher, boolean retryOnConnLoss)
Returns children of the node at the pathList<String>
getChildren(String path, org.apache.zookeeper.Watcher watcher, org.apache.zookeeper.data.Stat stat, boolean retryOnConnLoss)
Returns children of the node at the pathString
getConfig()
Gets the raw config node /zookeeper/config as returned by server.ConnectionManager
getConnectionManager()
byte[]
getData(String path, org.apache.zookeeper.Watcher watcher, org.apache.zookeeper.data.Stat stat, boolean retryOnConnLoss)
Returns node's dataorg.apache.solr.common.MapWriter
getMetrics()
SolrZkClient.NodeData
getNode(String path, org.apache.zookeeper.Watcher watcher, boolean retryOnConnLoss)
ZkACLProvider
getZkACLProvider()
ZkClientConnectionStrategy
getZkClientConnectionStrategy()
int
getZkClientTimeout()
String
getZkServerAddress()
org.apache.zookeeper.ZooKeeper
getZooKeeper()
boolean
isClosed()
boolean
isConnected()
Returns true if client is connectedString
listZnode(String path, Boolean recurse)
void
makePath(String path, boolean retryOnConnLoss)
Creates the path in ZooKeeper, creating each node as necessary.void
makePath(String path, boolean failOnExists, boolean retryOnConnLoss)
void
makePath(String path, byte[] data, boolean retryOnConnLoss)
Creates the path in ZooKeeper, creating each node as necessary.void
makePath(String path, byte[] data, boolean failOnExists, boolean retryOnConnLoss)
void
makePath(String path, byte[] data, org.apache.zookeeper.CreateMode createMode, boolean retryOnConnLoss)
Creates the path in ZooKeeper, creating each node as necessary.void
makePath(String path, byte[] data, org.apache.zookeeper.CreateMode createMode, org.apache.zookeeper.Watcher watcher, boolean retryOnConnLoss)
Creates the path in ZooKeeper, creating each node as necessary.void
makePath(String path, byte[] data, org.apache.zookeeper.CreateMode createMode, org.apache.zookeeper.Watcher watcher, boolean failOnExists, boolean retryOnConnLoss)
Creates the path in ZooKeeper, creating each node as necessary.void
makePath(String path, byte[] data, org.apache.zookeeper.CreateMode createMode, org.apache.zookeeper.Watcher watcher, boolean failOnExists, boolean retryOnConnLoss, int skipPathParts)
Creates the path in ZooKeeper, creating each node as necessary.void
makePath(String path, Path data, boolean retryOnConnLoss)
void
makePath(String path, org.apache.zookeeper.CreateMode createMode, boolean retryOnConnLoss)
void
makePath(String zkPath, org.apache.zookeeper.CreateMode createMode, org.apache.zookeeper.Watcher watcher, boolean retryOnConnLoss)
void
moveZnode(String src, String dst)
List<org.apache.zookeeper.OpResult>
multi(Iterable<org.apache.zookeeper.Op> ops, boolean retryOnConnLoss)
void
printLayout(String path, int indent, StringBuilder string)
Fills string with printout of current ZooKeeper layout.void
printLayoutToStream(PrintStream out)
org.apache.zookeeper.data.Stat
setACL(String path, List<org.apache.zookeeper.data.ACL> acls, boolean retryOnConnLoss)
Set the ACL on a single node in ZooKeeper.org.apache.zookeeper.data.Stat
setData(String path, byte[] data, boolean retryOnConnLoss)
Write data to ZooKeeper.org.apache.zookeeper.data.Stat
setData(String path, byte[] data, int version, boolean retryOnConnLoss)
Returns node's stateorg.apache.zookeeper.data.Stat
setData(String path, Path source, boolean retryOnConnLoss)
Write file to ZooKeeper - default system encoding used.void
upConfig(Path confPath, String confName)
void
updateACLs(String root)
Update all ACLs for a zk tree based on our configuredZkACLProvider
.void
uploadToZK(Path rootPath, String zkPath, Pattern filenameExclusions)
org.apache.zookeeper.Watcher
wrapWatcher(org.apache.zookeeper.Watcher watcher)
Wraps the watcher so that it doesn't fire off ZK's event queue.void
zkTransfer(String src, Boolean srcIsZk, String dst, Boolean dstIsZk, Boolean recurse)
-
-
-
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
-
-
Constructor Detail
-
SolrZkClient
public SolrZkClient(SolrZkClient.Builder builder)
-
-
Method Detail
-
getMetrics
public org.apache.solr.common.MapWriter getMetrics()
-
getZkClientTimeout
public int getZkClientTimeout()
-
getConnectionManager
public ConnectionManager getConnectionManager()
-
getZkClientConnectionStrategy
public ZkClientConnectionStrategy getZkClientConnectionStrategy()
-
createZkCredentialsToAddAutomatically
protected ZkCredentialsProvider createZkCredentialsToAddAutomatically()
-
createZkACLProvider
protected ZkACLProvider createZkACLProvider()
-
createZkCredentialsInjector
protected ZkCredentialsInjector createZkCredentialsInjector()
-
isConnected
public boolean isConnected()
Returns true if client is connected
-
delete
public void delete(String path, int version, boolean retryOnConnLoss) throws InterruptedException, org.apache.zookeeper.KeeperException
- Throws:
InterruptedException
org.apache.zookeeper.KeeperException
-
wrapWatcher
public org.apache.zookeeper.Watcher wrapWatcher(org.apache.zookeeper.Watcher watcher)
Wraps the watcher so that it doesn't fire off ZK's event queue. In order to guarantee that a watch object will only be triggered once for a given notification, users need to wrap their watcher using this method before callingexists(String, org.apache.zookeeper.Watcher, boolean)
orgetData(String, org.apache.zookeeper.Watcher, org.apache.zookeeper.data.Stat, boolean)
.
-
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 pathwatcher
- 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 errorInterruptedException
- If the server transaction is interrupted.IllegalArgumentException
- if an invalid path is specified
-
exists
public Boolean exists(String path, boolean retryOnConnLoss) throws org.apache.zookeeper.KeeperException, InterruptedException
Returns true if path exists- Throws:
org.apache.zookeeper.KeeperException
InterruptedException
-
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
-
getNode
public SolrZkClient.NodeData getNode(String path, 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, int version, boolean retryOnConnLoss) throws org.apache.zookeeper.KeeperException, InterruptedException
Returns node's state- Throws:
org.apache.zookeeper.KeeperException
InterruptedException
-
atomicUpdate
public void atomicUpdate(String path, Function<byte[],byte[]> editor) throws org.apache.zookeeper.KeeperException, InterruptedException
- Throws:
org.apache.zookeeper.KeeperException
InterruptedException
-
atomicUpdate
public void atomicUpdate(String path, BiFunction<org.apache.zookeeper.data.Stat,byte[],byte[]> editor) throws org.apache.zookeeper.KeeperException, InterruptedException
- 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, byte[] data, boolean failOnExists, boolean retryOnConnLoss) throws IOException, org.apache.zookeeper.KeeperException, InterruptedException
- Throws:
IOException
org.apache.zookeeper.KeeperException
InterruptedException
-
makePath
public void makePath(String path, Path data, boolean retryOnConnLoss) throws IOException, org.apache.zookeeper.KeeperException, InterruptedException
- Throws:
IOException
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 source, 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.xmlsource
- a filepath to read data from- Throws:
IOException
org.apache.zookeeper.KeeperException
InterruptedException
-
multi
public List<org.apache.zookeeper.OpResult> multi(Iterable<org.apache.zookeeper.Op> ops, boolean retryOnConnLoss) throws InterruptedException, org.apache.zookeeper.KeeperException
- Throws:
InterruptedException
org.apache.zookeeper.KeeperException
-
printLayout
public void printLayout(String path, int indent, StringBuilder string) throws org.apache.zookeeper.KeeperException, InterruptedException
Fills string with printout of current ZooKeeper layout.- Throws:
org.apache.zookeeper.KeeperException
InterruptedException
-
printLayoutToStream
public void printLayoutToStream(PrintStream out) throws org.apache.zookeeper.KeeperException, InterruptedException
- Throws:
org.apache.zookeeper.KeeperException
InterruptedException
-
close
public void close()
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
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 likeserver.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
-
getZkACLProvider
public ZkACLProvider getZkACLProvider()
-
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.xmlacls
- a list ofACL
s to be appliedretryOnConnLoss
- 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 configuredZkACLProvider
.- Parameters:
root
- the root node to recursively update- Throws:
org.apache.zookeeper.KeeperException
InterruptedException
-
clean
public void clean(String path) throws InterruptedException, org.apache.zookeeper.KeeperException
- Throws:
InterruptedException
org.apache.zookeeper.KeeperException
-
clean
public void clean(String path, Predicate<String> nodeFilter) throws InterruptedException, org.apache.zookeeper.KeeperException
- Throws:
InterruptedException
org.apache.zookeeper.KeeperException
-
upConfig
public void upConfig(Path confPath, String confName) throws IOException
- Throws:
IOException
-
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
-
downConfig
public void downConfig(String confName, Path confPath) throws IOException
- Throws:
IOException
-
zkTransfer
public void zkTransfer(String src, Boolean srcIsZk, String dst, Boolean dstIsZk, Boolean recurse) throws org.apache.solr.client.solrj.SolrServerException, org.apache.zookeeper.KeeperException, InterruptedException, IOException
- Throws:
org.apache.solr.client.solrj.SolrServerException
org.apache.zookeeper.KeeperException
InterruptedException
IOException
-
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
-
uploadToZK
public void uploadToZK(Path rootPath, String zkPath, Pattern filenameExclusions) throws IOException
- Throws:
IOException
-
downloadFromZK
public void downloadFromZK(String zkPath, Path dir) throws IOException
- Throws:
IOException
-
-