public interface TraversalSideEffects extends Cloneable, Serializable
Traversal
can maintain global sideEffects.
Unlike Traverser
"sacks" which are local sideEffects, TraversalSideEffects are accessible by all Traverser
instances within the Traversal
.Modifier and Type | Interface and Description |
---|---|
static class |
TraversalSideEffects.Exceptions |
Modifier and Type | Field and Description |
---|---|
static String |
SIDE_EFFECTS |
Modifier and Type | Method and Description |
---|---|
TraversalSideEffects |
clone()
Cloning is used to duplicate the sideEffects typically in OLAP environments.
|
default <V> void |
forEach(BiConsumer<String,V> biConsumer) |
<V> Optional<V> |
get(String key)
Get the sideEffect associated with the provided key.
|
default <V> V |
getOrCreate(String key,
Supplier<V> orCreate)
If the sideEffect contains an object associated with the key, return it.
|
<V> Optional<Supplier<V>> |
getRegisteredSupplier(String key)
Get the registered
Supplier associated with the specified key. |
<S> Supplier<S> |
getSackInitialValue()
If sacks are enabled, get the initial value of the
Traverser sack. |
<S> BinaryOperator<S> |
getSackMerger()
If sacks are enabled and a merge function has been specified, then get it (else get
null ). |
<S> UnaryOperator<S> |
getSackSplitter()
If sacks are enabled and a split operator has been specified, then get it (else get
null ). |
Set<String> |
keys()
The keys of the sideEffect which includes registered
Supplier keys. |
void |
mergeInto(TraversalSideEffects sideEffects)
Add the current
TraversalSideEffects data and suppliers to the provided TraversalSideEffects . |
void |
registerSupplier(String key,
Supplier supplier)
Register a
Supplier with the provided key. |
default void |
registerSupplierIfAbsent(String key,
Supplier supplier)
A helper method to register a
Supplier if it has not already been registered. |
void |
remove(String key)
Remove both the value and registered
Supplier associated with provided key. |
void |
set(String key,
Object value)
Set the specified key to the specified value.
|
void |
setLocalVertex(Vertex vertex)
In a distributed
GraphComputer traversal, the sideEffects of the traversal are not a single object within a single JVM. |
<S> void |
setSack(Supplier<S> initialValue,
UnaryOperator<S> splitOperator,
BinaryOperator<S> mergeOperator)
Set the initial value of each
Traverser "sack" along with the operators for splitting and merging sacks. |
static final String SIDE_EFFECTS
void set(String key, Object value)
Supplier
is provided, it is NOT assumed to be a supplier as set by registerSupplier().key
- the keyvalue
- the value<V> Optional<V> get(String key) throws IllegalArgumentException
Optional
.
Else if the sideEffect has a registered Supplier
for that key, generate the object, store the object in the sideEffects, and return it.V
- the type of the value to retrievekey
- the key to get the value forIllegalArgumentException
- if the key does not reference an object or a registered supplier.void remove(String key)
Supplier
associated with provided key.key
- the key of the value and registered supplier to removeSet<String> keys()
Supplier
keys.
In essence, that which is possible to get().void registerSupplier(String key, Supplier supplier)
Supplier
with the provided key.
When sideEffects get() are called, if no object exists and there exists a registered supplier for the key, the object is generated.
Registered suppliers are used for the lazy generation of sideEffect data.key
- the key to register the supplier withsupplier
- the supplier that will generate an object when get() is called if it hasn't already been created<V> Optional<Supplier<V>> getRegisteredSupplier(String key)
Supplier
associated with the specified key.V
- The object type of the supplierkey
- the key associated with the supplierdefault void registerSupplierIfAbsent(String key, Supplier supplier)
Supplier
if it has not already been registered.key
- the key of the supplier to registersupplier
- the supplier to register if the key has not already been registered<S> void setSack(Supplier<S> initialValue, UnaryOperator<S> splitOperator, BinaryOperator<S> mergeOperator)
Traverser
"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.S
- the sack typeinitialValue
- the initial value supplier of the traverser sacksplitOperator
- the split operator for splitting traverser sacksmergeOperator
- the merge operator for merging traverser sacks<S> Supplier<S> getSackInitialValue()
Traverser
sack.
If its not enabled, then null
is returned.S
- the sack type<S> UnaryOperator<S> getSackSplitter()
null
).
The split operator is used to split a sack when a bifurcation in a Traverser
happens.S
- the sack type<S> BinaryOperator<S> getSackMerger()
null
).
The merge function is used to merge two sacks when two Traverser
s converge.S
- the sack typedefault <V> V getOrCreate(String key, Supplier<V> orCreate)
Supplier
.V
- the return type of the objectkey
- the key of the object to getorCreate
- if the object doesn't exist as an object or suppliable object, then generate it with the specified supplierdefault <V> void forEach(BiConsumer<String,V> biConsumer)
void setLocalVertex(Vertex vertex)
GraphComputer
traversal, the sideEffects of the traversal are not a single object within a single JVM.
Instead, the sideEffects are distributed across the graph and the pieces are stored on the computing vertices.
This method is necessary to call when the Traversal
is processing the Traverser
s at a particular Vertex
.vertex
- the vertex where the traversal is currently executing.TraversalSideEffects clone()
void mergeInto(TraversalSideEffects sideEffects)
TraversalSideEffects
data and suppliers to the provided TraversalSideEffects
.sideEffects
- the sideEffects to add this traversal's sideEffect data to.Copyright © 2013–2017 Apache Software Foundation. All rights reserved.