Class ZkStateReader
- All Implemented Interfaces:
Closeable,AutoCloseable,org.apache.solr.common.SolrCloseable
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassA class to manage the aliases instance, including watching for changes.protected static classstatic class -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringAccess to theAliases.static final Stringstatic final Stringprotected org.apache.solr.common.cloud.ClusterStateA view of the current state of all collections.static final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final StringSolrCore name.static final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final StringLive node JSON property keys.static final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final StringThe following, node_roles and roles.json are for assigning roles to nodes.static final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final intstatic final Stringstatic final StringThis ZooKeeper file is no longer used starting with Solr 9 but keeping the name around to check if it is still present and non-empty (in case of upgrade from previous Solr version).static final Stringstatic final String -
Constructor Summary
ConstructorsConstructorDescriptionZkStateReader(String zkServerAddress, int zkClientTimeout, int zkClientConnectTimeout) ZkStateReader(String zkServerAddress, int zkClientTimeout, int zkClientConnectTimeout, boolean canUseZkACLs) ZkStateReader(SolrZkClient zkClient) ZkStateReader(SolrZkClient zkClient, Runnable securityNodeListener) -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()compareStateVersions(String coll, int version) voidReturns the lowest Solr version among all live nodes in the cluster.voidforceUpdateCollection(String collection) Forcibly refresh a collection's internal state from ZK.voidForcibly refresh cluster state from ZK.static ZkStateReaderfrom(org.apache.solr.client.solrj.impl.CloudSolrClient solrClient) Gets the ZkStateReader inside a ZK based SolrClient.org.apache.solr.common.cloud.AliasesGet an immutable copy of the present state of the aliases.getBaseUrlForNodeName(String nodeName) Returns the baseURL corresponding to a given node's nodeName -- NOTE: does not (currently) imply that the nodeName (or resulting baseURL) exists in the cluster.getBaseUrlV2ForNodeName(String nodeName) Returns the V2 baseURL corresponding to a given node's nodeName -- NOTE: does not (currently) imply that the nodeName (or resulting baseURL) exists in the cluster.Get all cluster properties for this cluster<T> TgetClusterProperty(String key, T defaultValue) Get a cluster property<T> TgetClusterProperty(List<String> keyPath, T defaultValue) Same as the above but allows a full json path as a list of partsorg.apache.solr.common.cloud.ClusterStateorg.apache.solr.common.cloud.DocCollectiongetCollection(String collection) org.apache.solr.common.cloud.DocCollectiongetCollectionLive(String coll) static StringgetCollectionPath(String coll) Deprecated.static StringgetCollectionPathRoot(String coll) Deprecated.getCollectionProperties(String collection) Get properties for a specific collectiongetCollectionProperties(String collection, long cacheForMillis) Get and cache collection properties for a given collectionorg.apache.solr.common.cloud.Replicaorg.apache.solr.common.cloud.ReplicagetLeader(Set<String> liveNodes, org.apache.solr.common.cloud.DocCollection docCollection, String shard) org.apache.solr.common.cloud.ReplicagetLeaderRetry(String collection, String shard) Get shard leader properties, with retry if none exist.org.apache.solr.common.cloud.ReplicagetLeaderRetry(String collection, String shard, int timeout) Get shard leader properties, with retry if none exist.getLeaderUrl(String collection, String shard, int timeout) List<org.apache.solr.common.cloud.ZkCoreNodeProps> getReplicaProps(String collection, String shardId, String thisCoreNodeName) List<org.apache.solr.common.cloud.ZkCoreNodeProps> getReplicaProps(String collection, String shardId, String thisCoreNodeName, org.apache.solr.common.cloud.Replica.State mustMatchStateFilter, org.apache.solr.common.cloud.Replica.State mustNotMatchStateFilter, EnumSet<org.apache.solr.common.cloud.Replica.Type> acceptReplicaType) getSecurityProps(boolean getFresh) Returns the content of /security.json from ZooKeeper as a Map If the files doesn't exist, it returns null.static StringgetShardLeadersElectPath(String collection, String shardId) Get path where shard leader elections ephemeral nodes are.static StringgetShardLeadersPath(String collection, String shardId) Get path where shard leader properties live in zookeeper.booleanisClosed()booleanisNodeLive(String node) voidregisterCloudCollectionsListener(CloudCollectionsListener cloudCollectionsListener) Register a CloudCollectionsListener to be called when the set of collections within a cloud changes.voidvoidregisterCollectionPropsWatcher(String collection, CollectionPropsWatcher propsWatcher) voidregisterCollectionStateWatcher(String collection, CollectionStateWatcher stateWatcher) Register a CollectionStateWatcher to be called when the state of a collection changes or the set of live nodes changes.voidregisterCore(String collection) Notify this reader that a local Core is a member of a collection, and so that collection state should be watched.voidregisterDocCollectionWatcher(String collection, DocCollectionWatcher docCollectionWatcher) Register a DocCollectionWatcher to be called when the cluster state for a collection changes.voidregisterLiveNodesListener(LiveNodesListener listener) voidremoveCloudCollectionsListener(CloudCollectionsListener cloudCollectionsListener) Remove a registered CloudCollectionsListener.voidvoidremoveCollectionPropsWatcher(String collection, CollectionPropsWatcher watcher) voidremoveCollectionStateWatcher(String collection, CollectionStateWatcher watcher) Remove a watcher from a collection's watch list.voidremoveDocCollectionWatcher(String collection, DocCollectionWatcher watcher) Remove a watcher from a collection's watch list.voidremoveLiveNodesListener(LiveNodesListener listener) voidunregisterCore(String collection) Notify this reader that a local core that is a member of a collection has been closed.voidRefresh the set of live nodes.voidwaitForLiveNodes(long wait, TimeUnit unit, LiveNodesPredicate predicate) Block until a LiveNodesStatePredicate returns true, or the wait times outorg.apache.solr.common.cloud.DocCollectionwaitForState(String collection, long wait, TimeUnit unit, Predicate<org.apache.solr.common.cloud.DocCollection> predicate) Block until a Predicate returns true, or the wait times outvoidwaitForState(String collection, long wait, TimeUnit unit, org.apache.solr.common.cloud.CollectionStatePredicate predicate) Block until a CollectionStatePredicate returns true, or the wait times out
-
Field Details
-
STATE_UPDATE_DELAY
public static final int STATE_UPDATE_DELAY -
BASE_URL_PROP
- See Also:
-
NODE_NAME_PROP
- See Also:
-
CORE_NODE_NAME_PROP
- See Also:
-
STATE_PROP
- See Also:
-
FORCE_SET_STATE_PROP
- See Also:
-
CORE_NAME_PROP
SolrCore name.- See Also:
-
COLLECTION_PROP
- See Also:
-
SHARD_ID_PROP
- See Also:
-
REPLICA_PROP
- See Also:
-
SHARD_RANGE_PROP
- See Also:
-
SHARD_STATE_PROP
- See Also:
-
SHARD_PARENT_PROP
- See Also:
-
NUM_SHARDS_PROP
- See Also:
-
LEADER_PROP
- See Also:
-
SHARED_STORAGE_PROP
- See Also:
-
PROPERTY_PROP
- See Also:
-
PROPERTY_PROP_PREFIX
- See Also:
-
PROPERTY_VALUE_PROP
- See Also:
-
MAX_AT_ONCE_PROP
- See Also:
-
MAX_WAIT_SECONDS_PROP
- See Also:
-
STATE_TIMESTAMP_PROP
- See Also:
-
COLLECTIONS_ZKNODE
- See Also:
-
LIVE_NODES_ZKNODE
- See Also:
-
NODE_ROLES
The following, node_roles and roles.json are for assigning roles to nodes. The node_roles is the preferred way (using -Dsolr.node.roles param), and roles.json is used by legacy ADDROLE API command.- See Also:
-
ROLES
- See Also:
-
ALIASES
- See Also:
-
UNSUPPORTED_CLUSTER_STATE
This ZooKeeper file is no longer used starting with Solr 9 but keeping the name around to check if it is still present and non-empty (in case of upgrade from previous Solr version). It used to contain collection state for all collections in the cluster.- See Also:
-
UNSUPPORTED_SOLR_XML
- See Also:
-
CLUSTER_PROPS
- See Also:
-
COLLECTION_PROPS_ZKNODE
- See Also:
-
REJOIN_AT_HEAD_PROP
- See Also:
-
SOLR_SECURITY_CONF_PATH
- See Also:
-
SOLR_PKGS_PATH
- See Also:
-
DEFAULT_SHARD_PREFERENCES
- See Also:
-
REPLICATION_FACTOR
- See Also:
-
MAX_CORES_PER_NODE
- See Also:
-
PULL_REPLICAS
- See Also:
-
NRT_REPLICAS
- See Also:
-
TLOG_REPLICAS
- See Also:
-
READ_ONLY
- See Also:
-
OVERSEER_ENABLED
- See Also:
-
CONFIGS_ZKNODE
- See Also:
-
CONFIGNAME_PROP
- See Also:
-
URL_SCHEME
- See Also:
-
HTTP
- See Also:
-
HTTPS
- See Also:
-
HTTPS_PORT_PROP
- See Also:
-
REPLICA_TYPE
- See Also:
-
CONTAINER_PLUGINS
- See Also:
-
PLACEMENT_PLUGIN
- See Also:
-
clusterState
protected volatile org.apache.solr.common.cloud.ClusterState clusterStateA view of the current state of all collections. -
LEADER_ELECT_ZKNODE
- See Also:
-
SHARD_LEADERS_ZKNODE
- See Also:
-
ELECTION_NODE
- See Also:
-
LIVE_NODE_SOLR_VERSION
Live node JSON property keys.- See Also:
-
LIVE_NODE_NODE_NAME
- See Also:
-
LIVE_NODE_ROLES
- See Also:
-
KNOWN_CLUSTER_PROPS
-
aliasesManager
Access to theAliases.
-
-
Constructor Details
-
ZkStateReader
-
ZkStateReader
-
ZkStateReader
-
ZkStateReader
public ZkStateReader(String zkServerAddress, int zkClientTimeout, int zkClientConnectTimeout, boolean canUseZkACLs)
-
-
Method Details
-
from
Gets the ZkStateReader inside a ZK based SolrClient.- Throws:
IllegalArgumentException- if solrClient isn't ZK based.
-
forciblyRefreshAllClusterStateSlow
public void forciblyRefreshAllClusterStateSlow() throws org.apache.zookeeper.KeeperException, InterruptedExceptionForcibly refresh cluster state from ZK. Do this only to avoid race conditions because it's expensive.It is cheaper to call
forceUpdateCollection(String)on a single collection if you must.- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
forceUpdateCollection
public void forceUpdateCollection(String collection) throws org.apache.zookeeper.KeeperException, InterruptedException Forcibly refresh a collection's internal state from ZK. Try to avoid having to resort to this when a better design is possible.- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
updateLiveNodes
Refresh the set of live nodes.- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
compareStateVersions
-
createClusterStateWatchersAndUpdate
public void createClusterStateWatchersAndUpdate() throws org.apache.zookeeper.KeeperException, InterruptedException- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
registerCloudCollectionsListener
Register a CloudCollectionsListener to be called when the set of collections within a cloud changes. -
removeCloudCollectionsListener
Remove a registered CloudCollectionsListener. -
getCurrentCollections
-
registerClusterPropertiesListener
-
removeClusterPropertiesListener
-
registerLiveNodesListener
-
removeLiveNodesListener
-
fetchLowestSolrVersion
public Optional<SolrVersion> fetchLowestSolrVersion() throws org.apache.zookeeper.KeeperException, InterruptedExceptionReturns the lowest Solr version among all live nodes in the cluster. If older Solr nodes have joined that don't declare their version, the result won't be accurate, but it's at least an upper bound on the possible version it might be.- Returns:
- an Optional containing the lowest Solr version of nodes in the cluster, or empty if no live nodes exist or all nodes return 9.9.0 for unspecified versions
- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
getClusterState
public org.apache.solr.common.cloud.ClusterState getClusterState()- Returns:
- information about the cluster from ZooKeeper
-
getUpdateLock
-
getZKClient
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-
isClosed
public boolean isClosed()- Specified by:
isClosedin interfaceorg.apache.solr.common.SolrCloseable
-
getLeaderUrl
public String getLeaderUrl(String collection, String shard, int timeout) throws InterruptedException - Throws:
InterruptedException
-
getLeader
-
getLeader
-
isNodeLive
-
getLeaderRetry
public org.apache.solr.common.cloud.Replica getLeaderRetry(String collection, String shard) throws InterruptedException Get shard leader properties, with retry if none exist.- Throws:
InterruptedException
-
getLeaderRetry
public org.apache.solr.common.cloud.Replica getLeaderRetry(String collection, String shard, int timeout) throws InterruptedException Get shard leader properties, with retry if none exist.- Throws:
InterruptedException
-
getShardLeadersPath
Get path where shard leader properties live in zookeeper. -
getShardLeadersElectPath
Get path where shard leader elections ephemeral nodes are. -
getReplicaProps
-
getReplicaProps
public List<org.apache.solr.common.cloud.ZkCoreNodeProps> getReplicaProps(String collection, String shardId, String thisCoreNodeName, org.apache.solr.common.cloud.Replica.State mustMatchStateFilter, org.apache.solr.common.cloud.Replica.State mustNotMatchStateFilter, EnumSet<org.apache.solr.common.cloud.Replica.Type> acceptReplicaType) -
getZkClient
-
getClusterProperty
Get a cluster propertyN.B. Cluster properties are updated via ZK watchers, and so may not necessarily be completely up-to-date. If you need to get the latest version, then use a
ClusterPropertiesinstance.- Type Parameters:
T- the type of the property- Parameters:
key- the property to readdefaultValue- a default value to use if no such property exists- Returns:
- the cluster property, or a default if the property is not set
-
getClusterProperty
Same as the above but allows a full json path as a list of parts- Parameters:
keyPath- path to the property example ["collectionDefauls", "numShards"]defaultValue- a default value to use if no such property exists- Returns:
- the cluster property, or a default if the property is not set
-
getClusterProperties
Get all cluster properties for this clusterN.B. Cluster properties are updated via ZK watchers, and so may not necessarily be completely up-to-date. If you need to get the latest version, then use a
ClusterPropertiesinstance.- Returns:
- a Map of cluster properties
-
getCollectionProperties
Get properties for a specific collection -
getCollectionProperties
Get and cache collection properties for a given collection -
getSecurityProps
Returns the content of /security.json from ZooKeeper as a Map If the files doesn't exist, it returns null. -
getBaseUrlForNodeName
Returns the baseURL corresponding to a given node's nodeName -- NOTE: does not (currently) imply that the nodeName (or resulting baseURL) exists in the cluster.- Parameters:
nodeName- name of the node- Returns:
- url that looks like
https://localhost:8983/solr
-
getBaseUrlV2ForNodeName
Returns the V2 baseURL corresponding to a given node's nodeName -- NOTE: does not (currently) imply that the nodeName (or resulting baseURL) exists in the cluster.- Parameters:
nodeName- name of the node- Returns:
- url that looks like
https://localhost:8983/api
-
getCollectionLive
-
getCollectionPathRoot
Deprecated. -
getCollectionPath
Deprecated. -
registerCore
Notify this reader that a local Core is a member of a collection, and so that collection state should be watched.Not a public API. This method should only be called from ZkController.
The number of cores per-collection is tracked, and adding multiple cores from the same collection does not increase the number of watches.
- Parameters:
collection- the collection that the core is a member of- See Also:
-
unregisterCore
Notify this reader that a local core that is a member of a collection has been closed.Not a public API. This method should only be called from ZkController.
If no cores are registered for a collection, and there are no
CollectionStateWatchers for that collection either, the collection watch will be removed.- Parameters:
collection- the collection that the core belongs to
-
registerCollectionStateWatcher
Register a CollectionStateWatcher to be called when the state of a collection changes or the set of live nodes changes.The Watcher will automatically be removed when it's
onStateChangedreturnstrueThis is method is just syntactic sugar for registering both a
DocCollectionWatcherand aLiveNodesListener. Callers that only care about one or the other (but not both) are encouraged to use the more specific methods register methods as it may reduce the number of ZooKeeper watchers needed, and reduce the amount of network/cpu used.- Parameters:
collection- the collection to watchstateWatcher- a watcher that will be called when the state changes- See Also:
-
registerDocCollectionWatcher
public void registerDocCollectionWatcher(String collection, DocCollectionWatcher docCollectionWatcher) Register a DocCollectionWatcher to be called when the cluster state for a collection changes.The Watcher will automatically be removed when it's
onStateChangedreturnstrue -
waitForState
public void waitForState(String collection, long wait, TimeUnit unit, org.apache.solr.common.cloud.CollectionStatePredicate predicate) throws InterruptedException, TimeoutException Block until a CollectionStatePredicate returns true, or the wait times outNote that the predicate may be called again even after it has returned true, so implementors should avoid changing state within the predicate call itself.
This implementation utilizes
CollectionStateWatcherinternally. Callers that don't care about liveNodes are encouraged to use aDocCollectionPredicateinstead- Parameters:
collection- the collection to watchwait- how long to waitunit- the units of the wait parameterpredicate- the predicate to call on state changes- Throws:
InterruptedException- on interruptTimeoutException- on timeout- See Also:
-
waitForState
public org.apache.solr.common.cloud.DocCollection waitForState(String collection, long wait, TimeUnit unit, Predicate<org.apache.solr.common.cloud.DocCollection> predicate) throws InterruptedException, TimeoutException Block until a Predicate returns true, or the wait times outNote that the predicate may be called again even after it has returned true, so implementors should avoid changing state within the predicate call itself. The predicate may also be called concurrently when multiple state changes are seen in rapid succession.
- Parameters:
collection- the collection to watchwait- how long to waitunit- the units of the wait parameterpredicate- the predicate to call on state changes- Returns:
- the state of the doc collection after the predicate succeeds
- Throws:
InterruptedException- on interruptTimeoutException- on timeout
-
waitForLiveNodes
public void waitForLiveNodes(long wait, TimeUnit unit, LiveNodesPredicate predicate) throws InterruptedException, TimeoutException Block until a LiveNodesStatePredicate returns true, or the wait times outNote that the predicate may be called again even after it has returned true, so implementors should avoid changing state within the predicate call itself.
- Parameters:
wait- how long to waitunit- the units of the wait parameterpredicate- the predicate to call on state changes- Throws:
InterruptedException- on interruptTimeoutException- on timeout
-
removeCollectionStateWatcher
Remove a watcher from a collection's watch list.This allows Zookeeper watches to be removed if there is no interest in the collection.
- Parameters:
collection- the collectionwatcher- the watcher- See Also:
-
removeDocCollectionWatcher
Remove a watcher from a collection's watch list.This allows Zookeeper watches to be removed if there is no interest in the collection.
- Parameters:
collection- the collectionwatcher- the watcher- See Also:
-
registerCollectionPropsWatcher
-
removeCollectionPropsWatcher
-
getAliases
public org.apache.solr.common.cloud.Aliases getAliases()Get an immutable copy of the present state of the aliases. References to this object should not be retained in any context where it will be important to know if aliases have changed.- Returns:
- The current aliases, Aliases.EMPTY if not solr cloud, or no aliases have existed yet. Never returns null.
-
getAliasesManager
-
getCollection
-