Class ProcessStateHolder
java.lang.Object
com.broadleafcommerce.search.index.core.ProcessStateHolder
- All Implemented Interfaces:
IndexableTypeAware,Serializable
This component is a container for allowing thread-safe access to state across a global, in JVM
process (e.g. a process that is multi-threaded). This should typically be accessed by control or
flow components. You must start and end the process to prevent memory leaks and other side
effects:
ReindexStateHolder.startProcessState(IndexableType.PRODUCT); try { ... //Do a full re-index, likely across multiple threads. } finally { ReindexStateHolder.endProcessState(IndexableType.PRODUCT); }
This is useful for determining if a process has failed, or for causing a process to fail fast across multiple threads.
- Author:
- Kelly Tisdell (ktisdell)
- See Also:
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionProcessStateHolder(@NonNull com.broadleafcommerce.search.api.type.IndexableType indexableType, boolean master) -
Method Summary
Modifier and TypeMethodDescriptionvoidfailFast()Tells the system to arbitrarily fail without a specific exception.voidvoidNotifies that the process has failed and keeps track of the Throwables passed in.Returns an unmodifiable map of all additional properties.Returns an arbitrary Object in a map, based on the provided key.More than one thread may have reported an error before realizing that the process failed.UUID that is assigned per process, per node.longGet the number of expected indexable items to process.More than one thread can potentially report an error.longGet the number of indexable items processed.com.broadleafcommerce.search.api.type.IndexableTypeThe indexable type for the reindex process this state holder belongs to.intGet the number of nodes that workers are running on.longThe time the process state holder was created.intGet the number of worker threads across all nodes.voidIncrement the number of indexable items processed.voidincrementIndexableItemsProcessed(long itemsProcessed) Increment the number of indexable items processed by the given value.voidIncrement the number of nodes that workers are running on.voidincrementOrDecrementIntPropertyVal(String key, int incrementBy) Provides a thread-safe, atomic way to increment an arbitrary Integer value in the additional properties map.voidincrementOrDecrementLongPropertyVal(String key, long incrementBy) Provides a thread-safe, atomic way to increment an arbitraryNumbervalue in the additional properties map.voidincrementTotalThreadCount(int threads) Increment the number of worker threads across all nodes.booleanisFailed()Indicates if the process has been notified as failing by one or more threads.booleanisMaster()Indicates if this JVM kicked off the process for this IndexableType.Allows callers to remove an arbitrary entry from a map.voidsetAdditionalProperty(String key, Serializable value) Allows callers to set arbitrary state with key/value pairs for a particular process.voidsetExpectedIndexableItemsToProcess(long expectedIndexableItemsToProcess) Set the number of expected indexable items to process.
-
Constructor Details
-
ProcessStateHolder
public ProcessStateHolder(@NonNull @NonNull com.broadleafcommerce.search.api.type.IndexableType indexableType, boolean master)
-
-
Method Details
-
failFast
public void failFast()Tells the system to arbitrarily fail without a specific exception. -
failFast
-
failFast
Notifies that the process has failed and keeps track of the Throwables passed in. This allows other threads to monitor this state and fail the entire process fast if other thread reported a failure.- Parameters:
th- the error which caused the process failure
-
isFailed
public boolean isFailed()Indicates if the process has been notified as failing by one or more threads.- Returns:
- whether or not the process is failed
-
getFirstFailure
More than one thread can potentially report an error.- Returns:
- the first Throwable that was reported, which caused the process to fail.
-
getFirstFailureMessage
-
getAllFailures
More than one thread may have reported an error before realizing that the process failed. This keeps track of all exceptions in order, and returns the list. It is possible that the list is empty, if someone passed in a null Throwable when failing the process.- Returns:
- the errors causing the process to fail, in order
-
getAdditionalProperty
Returns an arbitrary Object in a map, based on the provided key.- Parameters:
key- the key to get the arbitrary additional property- Returns:
- the property for the key
-
getAdditionalProperties
Returns an unmodifiable map of all additional properties. This is an arbitrary map of key/value pairs, where the key is a String and value is an Object.- Returns:
- all of the stored arbitrary additional properties
-
setAdditionalProperty
Allows callers to set arbitrary state with key/value pairs for a particular process. This is thread safe and is managed via a map.- Parameters:
key- the key for the property to setvalue- the value to set for the property
-
incrementOrDecrementLongPropertyVal
Provides a thread-safe, atomic way to increment an arbitraryNumbervalue in the additional properties map. If the property does not exist, it will be incremented (or decremented) from zero. If the property already exists and is not a long value, a ClassCastException will be thrown. A negative number can be used to decrement.- Parameters:
key- the key for the property to updateincrementBy- the amount to update the value by
-
incrementOrDecrementIntPropertyVal
Provides a thread-safe, atomic way to increment an arbitrary Integer value in the additional properties map. If the property does not exist, it will be incremented (or decremented) from zero. If the property already exists and is not a long value, a ClassCastException will be thrown. A negative number can be used to decrement.- Parameters:
key- the key for the property to updateincrementBy- the amount to update the value by
-
removeAdditionalProperty
Allows callers to remove an arbitrary entry from a map.- Parameters:
key- the key of the property to remove- Returns:
- the value of the removed property
-
incrementIndexableItemsProcessed
public void incrementIndexableItemsProcessed()Increment the number of indexable items processed. -
incrementIndexableItemsProcessed
public void incrementIndexableItemsProcessed(long itemsProcessed) Increment the number of indexable items processed by the given value.- Parameters:
itemsProcessed- the amount to increment
-
getIndexableItemsProcessed
public long getIndexableItemsProcessed()Get the number of indexable items processed.- Returns:
- the number of indexable items processed
-
setExpectedIndexableItemsToProcess
public void setExpectedIndexableItemsToProcess(long expectedIndexableItemsToProcess) Set the number of expected indexable items to process.- Parameters:
expectedIndexableItemsToProcess- the number of expected indexable items to process
-
getExpectedIndexableItemsToProcess
public long getExpectedIndexableItemsToProcess()Get the number of expected indexable items to process.- Returns:
- the number of expected indexable items to process
-
incrementNodeCount
public void incrementNodeCount()Increment the number of nodes that workers are running on. -
getNodeCount
public int getNodeCount()Get the number of nodes that workers are running on.- Returns:
- the number of nodes that workers are running on
-
incrementTotalThreadCount
public void incrementTotalThreadCount(int threads) Increment the number of worker threads across all nodes.- Parameters:
threads- the amount to increment
-
getTotalThreadCount
public int getTotalThreadCount()Get the number of worker threads across all nodes.- Returns:
- the number of worker threads across all nodes
-
isMaster
public boolean isMaster()Indicates if this JVM kicked off the process for this IndexableType.- Returns:
- whether this JVM kicked off the process for this IndexableType
-
getIndexableType
public com.broadleafcommerce.search.api.type.IndexableType getIndexableType()The indexable type for the reindex process this state holder belongs to.- Specified by:
getIndexableTypein interfaceIndexableTypeAware- Returns:
- the indexable type for the reindex process
-
getTimeStartedMillis
public long getTimeStartedMillis()The time the process state holder was created.- Returns:
- the time the process state holder was created
-
getCorrelationId
UUID that is assigned per process, per node. Each new process will receive a new UUID for each participating node.- Returns:
- UUID for this process on this node
-