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:
  • Constructor Details

  • Method Details

    • getSideEffects

      public TraversalSideEffects getSideEffects()
    • set

      public void set(String key, Object value)
      Description copied from interface: TraversalSideEffects
      Set the specified key to the specified value. This method should not be used in a distributed environment. Instead, use TraversalSideEffects.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:
      set in interface TraversalSideEffects
      Parameters:
      key - the key they key of the side-effect
      value - the value the new value for the side-effect
    • get

      public <V> V get(String key) throws IllegalArgumentException
      Description copied from interface: TraversalSideEffects
      Get the sideEffect associated with the provided key. If the sideEffect contains an object for the key, return it. Else if the sideEffect has a registered Supplier for that key, generate the object, store the object in the sideEffects, and return it.
      Specified by:
      get in interface TraversalSideEffects
      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: TraversalSideEffects
      Remove both the value and registered Supplier associated with provided key.
      Specified by:
      remove in interface TraversalSideEffects
      Parameters:
      key - the key of the value and registered supplier to remove
    • keys

      public Set<String> keys()
      Description copied from interface: TraversalSideEffects
      The keys of the sideEffect which includes registered Supplier keys. In essence, that which is possible to TraversalSideEffects.get(String).
      Specified by:
      keys in interface TraversalSideEffects
      Returns:
      the keys of the sideEffect
    • add

      public void add(String key, Object value)
      Description copied from interface: TraversalSideEffects
      Add 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:
      add in interface TraversalSideEffects
      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: TraversalSideEffects
      Register a side-effect with the TraversalSideEffects providing a Supplier and a BinaryOperator. If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.
      Specified by:
      register in interface TraversalSideEffects
      Type Parameters:
      V - the type of the side-effect value
      Parameters:
      key - the key of the side-effect value
      initialValue - the initial value supplier
      reducer - 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: TraversalSideEffects
      Register a side-effect with the TraversalSideEffects providing a Supplier and a BinaryOperator. 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:
      registerIfAbsent in interface TraversalSideEffects
      Type Parameters:
      V - the type of the side-effect value
      Parameters:
      key - the key of the side-effect value
      initialValue - the initial value supplier
      reducer - 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: TraversalSideEffects
      Get the reducer associated with the side-effect key. If no reducer was registered, then Operator.assign is provided.
      Specified by:
      getReducer in interface TraversalSideEffects
      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: TraversalSideEffects
      Get the supplier associated with the side-effect key. If no supplier was registered, then ConstantSupplier is provided.
      Specified by:
      getSupplier in interface TraversalSideEffects
      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: TraversalSideEffects
      Set the initial value of each 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.
      Specified by:
      setSack in interface TraversalSideEffects
      Type Parameters:
      S - the sack type
      Parameters:
      initialValue - the initial value supplier of the traverser sack
      splitOperator - the split operator for splitting traverser sacks
      mergeOperator - the merge operator for merging traverser sacks
    • getSackInitialValue

      public <S> Supplier<S> getSackInitialValue()
      Description copied from interface: TraversalSideEffects
      If sacks are enabled, get the initial value of the Traverser sack. If its not enabled, then null is returned.
      Specified by:
      getSackInitialValue in interface TraversalSideEffects
      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: TraversalSideEffects
      If sacks are enabled and a split operator has been specified, then get it (else get null). The split operator is used to split a sack when a bifurcation in a Traverser happens.
      Specified by:
      getSackSplitter in interface TraversalSideEffects
      Type Parameters:
      S - the sack type
      Returns:
      the operator for splitting a traverser sack
    • getSackMerger

      public <S> BinaryOperator<S> getSackMerger()
      Description copied from interface: TraversalSideEffects
      If sacks are enabled and a merge function has been specified, then get it (else get null). The merge function is used to merge two sacks when two Traversers converge.
      Specified by:
      getSackMerger in interface TraversalSideEffects
      Type Parameters:
      S - the sack type
      Returns:
      the operator for merging two traverser sacks
    • clone

      public TraversalSideEffects clone()
      Description copied from interface: TraversalSideEffects
      Cloning is used to duplicate the sideEffects typically in distributed execution environments.
      Specified by:
      clone in interface TraversalSideEffects
      Overrides:
      clone in class Object
      Returns:
      The cloned sideEffects
    • mergeInto

      public void mergeInto(TraversalSideEffects sideEffects)
      Description copied from interface: TraversalSideEffects
      Add the current TraversalSideEffects values, suppliers, and reducers to the provided TraversalSideEffects. The implementation should (under the hood), use TraversalSideEffects.registerIfAbsent(String, Supplier, BinaryOperator) so that if the argument TraversalSideEffects already has a registered supplier or binary operator, then don't overwrite it.
      Specified by:
      mergeInto in interface TraversalSideEffects
      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)