Class MemoryTraversalSideEffects
- java.lang.Object
-
- org.apache.tinkerpop.gremlin.process.computer.traversal.MemoryTraversalSideEffects
-
- All Implemented Interfaces:
Serializable,AutoCloseable,Cloneable,TraversalSideEffects
public final class MemoryTraversalSideEffects extends Object implements TraversalSideEffects
- Author:
- Marko A. Rodriguez (http://markorodriguez.com)
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects
TraversalSideEffects.Exceptions
-
-
Constructor Summary
Constructors Constructor Description MemoryTraversalSideEffects(TraversalSideEffects sideEffects)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(String key, Object value)Add a value to the global side-effect value.TraversalSideEffectsclone()Cloning is used to duplicate the sideEffects typically in distributed execution environments.<V> Vget(String key)Get the sideEffect associated with the provided key.static Set<MemoryComputeKey>getMemoryComputeKeys(Traversal.Admin<?,?> traversal)static ProgramPhasegetMemorySideEffectsPhase(Traversal.Admin<?,?> traversal)<V> BinaryOperator<V>getReducer(String key)Get the reducer associated with the side-effect key.<S> Supplier<S>getSackInitialValue()If sacks are enabled, get the initial value of theTraversersack.<S> BinaryOperator<S>getSackMerger()If sacks are enabled and a merge function has been specified, then get it (else getnull).<S> UnaryOperator<S>getSackSplitter()If sacks are enabled and a split operator has been specified, then get it (else getnull).TraversalSideEffectsgetSideEffects()<V> Supplier<V>getSupplier(String key)Get the supplier associated with the side-effect key.Set<String>keys()The keys of the sideEffect which includes registeredSupplierkeys.voidmergeInto(TraversalSideEffects sideEffects)Add the currentTraversalSideEffectsvalues, suppliers, and reducers to the providedTraversalSideEffects.<V> voidregister(String key, Supplier<V> initialValue, BinaryOperator<V> reducer)<V> voidregisterIfAbsent(String key, Supplier<V> initialValue, BinaryOperator<V> reducer)voidremove(String key)Remove both the value and registeredSupplierassociated with provided key.voidset(String key, Object value)Set the specified key to the specified value.static voidsetMemorySideEffects(Traversal.Admin<?,?> traversal, Memory memory, ProgramPhase phase)<S> voidsetSack(Supplier<S> initialValue, UnaryOperator<S> splitOperator, BinaryOperator<S> mergeOperator)Set the initial value of eachTraverser"sack" along with the operators for splitting and merging sacks.voidstoreSideEffectsInMemory()-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects
close, exists, forEach, isEmpty
-
-
-
-
Constructor Detail
-
MemoryTraversalSideEffects
public MemoryTraversalSideEffects(TraversalSideEffects sideEffects)
-
-
Method Detail
-
getSideEffects
public TraversalSideEffects getSideEffects()
-
set
public void set(String key, Object value)
Description copied from interface:TraversalSideEffectsSet the specified key to the specified value. This method should not be used in a distributed environment. Instead, useTraversalSideEffects.add(String, Object). This method is only safe when there is only one representation of the side-effect and thus, not distributed across threads or machines.- Specified by:
setin interfaceTraversalSideEffects- Parameters:
key- the key they key of the side-effectvalue- the value the new value for the side-effect
-
get
public <V> V get(String key) throws IllegalArgumentException
Description copied from interface:TraversalSideEffectsGet the sideEffect associated with the provided key. If the sideEffect contains an object for the key, return it. Else if the sideEffect has a registeredSupplierfor that key, generate the object, store the object in the sideEffects, and return it.- Specified by:
getin interfaceTraversalSideEffects- Type Parameters:
V- the type of the value to retrieve- Parameters:
key- the key to get the value for- Returns:
- the value associated with key
- Throws:
IllegalArgumentException- if the key does not reference an object or a registered supplier.
-
remove
public void remove(String key)
Description copied from interface:TraversalSideEffectsRemove both the value and registeredSupplierassociated with provided key.- Specified by:
removein interfaceTraversalSideEffects- Parameters:
key- the key of the value and registered supplier to remove
-
keys
public Set<String> keys()
Description copied from interface:TraversalSideEffectsThe keys of the sideEffect which includes registeredSupplierkeys. In essence, that which is possible toTraversalSideEffects.get(String).- Specified by:
keysin interfaceTraversalSideEffects- Returns:
- the keys of the sideEffect
-
add
public void add(String key, Object value)
Description copied from interface:TraversalSideEffectsAdd a value to the global side-effect value. This should be used by steps to ensure that side-effects are merged properly in a distributed environment.TraversalSideEffects.set(String, Object)should only be used in single-threaded systems or by a master traversal in a distributed environment.- Specified by:
addin interfaceTraversalSideEffects- Parameters:
key- the key of the side-effect.value- the partital value (to be merged) of the side-effect.
-
register
public <V> void register(String key, Supplier<V> initialValue, BinaryOperator<V> reducer)
Description copied from interface:TraversalSideEffectsRegister a side-effect with theTraversalSideEffectsproviding aSupplierand aBinaryOperator. If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.- Specified by:
registerin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect valueinitialValue- the initial value supplierreducer- the reducer to use for merging a distributed side-effect value into a single value
-
registerIfAbsent
public <V> void registerIfAbsent(String key, Supplier<V> initialValue, BinaryOperator<V> reducer)
Description copied from interface:TraversalSideEffectsRegister a side-effect with theTraversalSideEffectsproviding aSupplierand aBinaryOperator. The registration will only overwrite a supplier or reducer if no supplier or reducer existed prior. If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.- Specified by:
registerIfAbsentin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect valueinitialValue- the initial value supplierreducer- the reducer to use for merging a distributed side-effect value into a single value
-
getReducer
public <V> BinaryOperator<V> getReducer(String key)
Description copied from interface:TraversalSideEffectsGet the reducer associated with the side-effect key. If no reducer was registered, thenOperator.assignis provided.- Specified by:
getReducerin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect- Returns:
- the registered reducer
-
getSupplier
public <V> Supplier<V> getSupplier(String key)
Description copied from interface:TraversalSideEffectsGet the supplier associated with the side-effect key. If no supplier was registered, thenConstantSupplieris provided.- Specified by:
getSupplierin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect- Returns:
- the registered supplier
-
setSack
public <S> void setSack(Supplier<S> initialValue, UnaryOperator<S> splitOperator, BinaryOperator<S> mergeOperator)
Description copied from interface:TraversalSideEffectsSet the initial value of eachTraverser"sack" along with the operators for splitting and merging sacks. If no split operator is provided, then a direct memory copy is assumed (this is typically good for primitive types and strings). If no merge operator is provided, then traversers with sacks will not be merged.- Specified by:
setSackin interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Parameters:
initialValue- the initial value supplier of the traverser sacksplitOperator- the split operator for splitting traverser sacksmergeOperator- the merge operator for merging traverser sacks
-
getSackInitialValue
public <S> Supplier<S> getSackInitialValue()
Description copied from interface:TraversalSideEffectsIf sacks are enabled, get the initial value of theTraversersack. If its not enabled, thennullis returned.- Specified by:
getSackInitialValuein interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Returns:
- the supplier of the initial value of the traverser sack
-
getSackSplitter
public <S> UnaryOperator<S> getSackSplitter()
Description copied from interface:TraversalSideEffectsIf sacks are enabled and a split operator has been specified, then get it (else getnull). The split operator is used to split a sack when a bifurcation in aTraverserhappens.- Specified by:
getSackSplitterin interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Returns:
- the operator for splitting a traverser sack
-
getSackMerger
public <S> BinaryOperator<S> getSackMerger()
Description copied from interface:TraversalSideEffectsIf sacks are enabled and a merge function has been specified, then get it (else getnull). The merge function is used to merge two sacks when twoTraversers converge.- Specified by:
getSackMergerin interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Returns:
- the operator for merging two traverser sacks
-
clone
public TraversalSideEffects clone()
Description copied from interface:TraversalSideEffectsCloning is used to duplicate the sideEffects typically in distributed execution environments.- Specified by:
clonein interfaceTraversalSideEffects- Overrides:
clonein classObject- Returns:
- The cloned sideEffects
-
mergeInto
public void mergeInto(TraversalSideEffects sideEffects)
Description copied from interface:TraversalSideEffectsAdd the currentTraversalSideEffectsvalues, suppliers, and reducers to the providedTraversalSideEffects. The implementation should (under the hood), useTraversalSideEffects.registerIfAbsent(String, Supplier, BinaryOperator)so that if the argumentTraversalSideEffectsalready has a registered supplier or binary operator, then don't overwrite it.- Specified by:
mergeIntoin interfaceTraversalSideEffects- Parameters:
sideEffects- the sideEffects to add this traversal's sideEffect data to.
-
storeSideEffectsInMemory
public void storeSideEffectsInMemory()
-
setMemorySideEffects
public static void setMemorySideEffects(Traversal.Admin<?,?> traversal, Memory memory, ProgramPhase phase)
-
getMemorySideEffectsPhase
public static ProgramPhase getMemorySideEffectsPhase(Traversal.Admin<?,?> traversal)
-
getMemoryComputeKeys
public static Set<MemoryComputeKey> getMemoryComputeKeys(Traversal.Admin<?,?> traversal)
-
-