Class ZkStateWriter
Updates to the cluster state are specified using the enqueueUpdate(ClusterState, List, ZkWriteCallback) method. The class buffers updates to reduce the number of writes to ZK. The
buffered updates are flushed during enqueueUpdate automatically if necessary. The
writePendingUpdates() can be used to force flush any pending updates.
If either enqueueUpdate(ClusterState, List, ZkWriteCallback) or writePendingUpdates() throws a KeeperException.BadVersionException
then the internal buffered state of the class is suspect and the current instance of the class
should be discarded and a new instance should be created and used for any future updates.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.apache.solr.common.cloud.ClusterStateprotected org.apache.solr.common.util.Compressorprotected booleanSet to true if we ever get a BadVersionException so that we can disallow future operations with this instanceprotected longprotected intstatic ZkWriteCommandRepresents a no-opZkWriteCommandwhich will result in no modification to cluster stateprotected final org.apache.solr.common.cloud.ZkStateReaderprotected final Statsprotected Map<String, ZkWriteCommand> -
Constructor Summary
ConstructorsConstructorDescriptionZkStateWriter(org.apache.solr.common.cloud.ZkStateReader zkStateReader, Stats stats, int minStateByteLenForCompression, org.apache.solr.common.util.Compressor compressor) -
Method Summary
Modifier and TypeMethodDescriptionorg.apache.solr.common.cloud.ClusterStateenqueueUpdate(org.apache.solr.common.cloud.ClusterState prevState, List<ZkWriteCommand> cmds, ZkStateWriter.ZkWriteCallback callback) Applies the givenZkWriteCommandon theprevState.org.apache.solr.common.cloud.ClusterStatebooleanvoidvoidupdateClusterState(Function<org.apache.solr.common.cloud.ClusterState, org.apache.solr.common.cloud.ClusterState> fun) if any collection is updated not through this class (directly written to ZK, then it needs to be updated locally)org.apache.solr.common.cloud.ClusterStateorg.apache.solr.common.cloud.ClusterStatewritePendingUpdates(Map<String, ZkWriteCommand> updates, boolean resetPendingUpdateCounters) Writes all pending updates to ZooKeeper and returns the modified cluster stateorg.apache.solr.common.cloud.ClusterStatewriteUpdate(ZkWriteCommand command)
-
Field Details
-
NO_OP
Represents a no-opZkWriteCommandwhich will result in no modification to cluster state -
reader
protected final org.apache.solr.common.cloud.ZkStateReader reader -
stats
-
updates
-
clusterState
protected org.apache.solr.common.cloud.ClusterState clusterState -
lastUpdatedTime
protected long lastUpdatedTime -
invalidState
protected boolean invalidStateSet to true if we ever get a BadVersionException so that we can disallow future operations with this instance -
minStateByteLenForCompression
protected int minStateByteLenForCompression -
compressor
protected org.apache.solr.common.util.Compressor compressor
-
-
Constructor Details
-
ZkStateWriter
public ZkStateWriter(org.apache.solr.common.cloud.ZkStateReader zkStateReader, Stats stats, int minStateByteLenForCompression, org.apache.solr.common.util.Compressor compressor)
-
-
Method Details
-
updateClusterState
public void updateClusterState(Function<org.apache.solr.common.cloud.ClusterState, org.apache.solr.common.cloud.ClusterState> fun) if any collection is updated not through this class (directly written to ZK, then it needs to be updated locally) -
enqueueUpdate
public org.apache.solr.common.cloud.ClusterState enqueueUpdate(org.apache.solr.common.cloud.ClusterState prevState, List<ZkWriteCommand> cmds, ZkStateWriter.ZkWriteCallback callback) throws IllegalStateException, Exception Applies the givenZkWriteCommandon theprevState. The modifiedClusterStateis returned and it is expected that the caller will use the returned cluster state for the subsequent invocation of this method.The modified state may be buffered or flushed to ZooKeeper depending on the internal buffering logic of this class. The
hasPendingUpdates()method may be used to determine if the last enqueue operation resulted in buffered state. The methodwritePendingUpdates()can be used to force an immediate flush of pending cluster state changes.- Parameters:
prevState- the cluster state information on which the givencmdis appliedcmds- the list ofZkWriteCommandwhich specifies the change to be applied to cluster state in atomiccallback- aZkStateWriter.ZkWriteCallbackobject to be used for any callbacks- Returns:
- modified cluster state created after applying
cmdtoprevState. Ifcmdis a no-op (NO_OP) then theprevStateis returned unmodified. - Throws:
IllegalStateException- if the current instance is no longer usable. The current instance must be discarded.Exception- on an error in ZK operations or callback. If a flush to ZooKeeper results in aKeeperException.BadVersionExceptionthis instance becomes unusable and must be discarded
-
hasPendingUpdates
public boolean hasPendingUpdates() -
writeUpdate
public org.apache.solr.common.cloud.ClusterState writeUpdate(ZkWriteCommand command) throws IllegalStateException, org.apache.zookeeper.KeeperException, InterruptedException - Throws:
IllegalStateExceptionorg.apache.zookeeper.KeeperExceptionInterruptedException
-
writePendingUpdates
public org.apache.solr.common.cloud.ClusterState writePendingUpdates() throws org.apache.zookeeper.KeeperException, InterruptedException- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
writePendingUpdates
public org.apache.solr.common.cloud.ClusterState writePendingUpdates(Map<String, ZkWriteCommand> updates, boolean resetPendingUpdateCounters) throws IllegalStateException, org.apache.zookeeper.KeeperException, InterruptedExceptionWrites all pending updates to ZooKeeper and returns the modified cluster state- Returns:
- the modified cluster state
- Throws:
IllegalStateException- if the current instance is no longer usable and must be discardedorg.apache.zookeeper.KeeperException- if any ZooKeeper operation results in an errorInterruptedException- if the current thread is interrupted
-
resetPendingUpdateCounters
public void resetPendingUpdateCounters() -
getClusterState
public org.apache.solr.common.cloud.ClusterState getClusterState()- Returns:
- the most up-to-date cluster state until the last enqueueUpdate operation
-