/** * Add a particular value to the respective side-effect of the traverser (thus, traversal). * * @param sideEffectKey the key of the value to set int the sideEffects * @param sideEffectValue the value to set for the sideEffect key */ public default void sideEffects(final String sideEffectKey, final Object sideEffectValue) throws IllegalArgumentException { this.asAdmin().getSideEffects().add(sideEffectKey, sideEffectValue); }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Map<E, Long> map = new HashMap<>(1); map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), traverser.bulk()); this.getTraversal().getSideEffects().add(this.sideEffectKey, map); }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Map<K, V> map = new HashMap<>(1); this.valueTraversal.reset(); this.valueTraversal.addStart(traverser); if (null == this.barrierStep) { if (this.valueTraversal.hasNext()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.valueTraversal.next()); } else if (this.barrierStep.hasNextBarrier()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.barrierStep.nextBarrier()); if (!map.isEmpty()) this.getTraversal().getSideEffects().add(this.sideEffectKey, map); }
@Override public void workerIterationEnd(final Memory memory) { // store profile metrics in proper ProfileStep metrics if (this.profile) { List<ProfileStep> profileSteps = TraversalHelper.getStepsOfAssignableClassRecursively(ProfileStep.class, this.traversal.get()); // guess the profile step to store data int profileStepIndex = memory.getIteration(); // if we guess wrongly write timing into last step profileStepIndex = profileStepIndex >= profileSteps.size() ? profileSteps.size() - 1 : profileStepIndex; this.iterationMetrics.finish(0); // reset counts this.iterationMetrics.setCount(TraversalMetrics.TRAVERSER_COUNT_ID,0); if (null != MemoryTraversalSideEffects.getMemorySideEffectsPhase(this.traversal.get())) { this.traversal.get().getSideEffects().add(profileSteps.get(profileStepIndex).getId(), this.iterationMetrics); } this.iterationMetrics = null; } }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final BulkSet<Object> bulkSet = new BulkSet<>(); bulkSet.add(TraversalUtil.applyNullable(traverser, this.storeTraversal), traverser.bulk()); this.getTraversal().getSideEffects().add(this.sideEffectKey, bulkSet); }
@Override public Traverser.Admin<S> next() { Traverser.Admin<S> start = null; this.initializeIfNeeded(); this.metrics.start(); try { start = super.next(); return start; } finally { if (start != null) { this.metrics.finish(start.bulk()); if (this.onGraphComputer) { this.getTraversal().getSideEffects().add(this.getId(), this.metrics); this.metrics = null; } } else { this.metrics.stop(); if (this.onGraphComputer) { this.getTraversal().getSideEffects().add(this.getId(), this.metrics); this.metrics = null; } } } }
@Override public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) { assertFalse(memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS)); final TraverserGenerator generator = this.traversal.get().getTraverserGenerator(); MemoryTraversalSideEffects.setMemorySideEffects(this.traversal.get(), memory, ProgramPhase.EXECUTE); this.checkSideEffects(); final TraverserSet<Vertex> activeTraversers = memory.get(TraversalVertexProgram.ACTIVE_TRAVERSERS); if (vertex.label().equals("software")) { assertEquals(1, activeTraversers.stream().filter(v -> v.get().equals(vertex)).count()); if (memory.isInitialIteration()) { assertFalse(vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()); vertex.property( TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(generator.generate(vertex.value("name"), this.programStep, 1l))); } else { assertTrue(vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()); } } else { assertFalse(vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()); assertEquals(0, activeTraversers.stream().filter(v -> v.get().equals(vertex)).count()); if (!memory.isInitialIteration()) { if (vertex.value("name").equals("marko")) memory.add(TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(generator.generate("marko-is-my-name", this.programStep, 1l))); else if (vertex.value("name").equals("vadas")) this.traversal.get().getSideEffects().add(TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(generator.generate("the-v-o-double-g", this.programStep, 1l))); } } }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Tree root = new Tree(); Tree depth = root; final Path path = traverser.path(); for (int i = 0; i < path.size(); i++) { final Object object = TraversalUtil.applyNullable(path.<Object>get(i), this.traversalRing.next()); if (!depth.containsKey(object)) depth.put(object, new Tree<>()); depth = (Tree) depth.get(object); } this.traversalRing.reset(); this.getTraversal().getSideEffects().add(this.sideEffectKey, root); }
@Override public void processAllStarts() { if (this.starts.hasNext()) { final BulkSet<Object> bulkSet = new BulkSet<>(); while (this.starts.hasNext()) { final Traverser.Admin<S> traverser = this.starts.next(); bulkSet.add(TraversalUtil.applyNullable(traverser, this.aggregateTraversal), traverser.bulk()); traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step this.barrier.add(traverser); } this.getTraversal().getSideEffects().add(this.sideEffectKey, bulkSet); } }
/** * Add a particular value to the respective side-effect of the traverser (thus, traversal). * * @param sideEffectKey the key of the value to set int the sideEffects * @param sideEffectValue the value to set for the sideEffect key */ public default void sideEffects(final String sideEffectKey, final Object sideEffectValue) throws IllegalArgumentException { this.asAdmin().getSideEffects().add(sideEffectKey, sideEffectValue); }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Map<E, Long> map = new HashMap<>(1); map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), traverser.bulk()); this.getTraversal().getSideEffects().add(this.sideEffectKey, map); }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Map<K, V> map = new HashMap<>(1); this.valueTraversal.reset(); this.valueTraversal.addStart(traverser); if (null == this.barrierStep) { if (this.valueTraversal.hasNext()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.valueTraversal.next()); } else if (this.barrierStep.hasNextBarrier()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.barrierStep.nextBarrier()); if (!map.isEmpty()) this.getTraversal().getSideEffects().add(this.sideEffectKey, map); }
@Override public void workerIterationEnd(final Memory memory) { // store profile metrics in proper ProfileStep metrics if (this.profile) { List<ProfileStep> profileSteps = TraversalHelper.getStepsOfAssignableClassRecursively(ProfileStep.class, this.traversal.get()); // guess the profile step to store data int profileStepIndex = memory.getIteration(); // if we guess wrongly write timing into last step profileStepIndex = profileStepIndex >= profileSteps.size() ? profileSteps.size() - 1 : profileStepIndex; this.iterationMetrics.finish(0); // reset counts this.iterationMetrics.setCount(TraversalMetrics.TRAVERSER_COUNT_ID,0); if (null != MemoryTraversalSideEffects.getMemorySideEffectsPhase(this.traversal.get())) { this.traversal.get().getSideEffects().add(profileSteps.get(profileStepIndex).getId(), this.iterationMetrics); } this.iterationMetrics = null; } }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final BulkSet<Object> bulkSet = new BulkSet<>(); bulkSet.add(TraversalUtil.applyNullable(traverser, this.storeTraversal), traverser.bulk()); this.getTraversal().getSideEffects().add(this.sideEffectKey, bulkSet); }
@Override public Traverser.Admin<S> next() { Traverser.Admin<S> start = null; this.initializeIfNeeded(); this.metrics.start(); try { start = super.next(); return start; } finally { if (start != null) { this.metrics.finish(start.bulk()); if (this.onGraphComputer) { this.getTraversal().getSideEffects().add(this.getId(), this.metrics); this.metrics = null; } } else { this.metrics.stop(); if (this.onGraphComputer) { this.getTraversal().getSideEffects().add(this.getId(), this.metrics); this.metrics = null; } } } }
@Override public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) { assertFalse(memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS)); final TraverserGenerator generator = this.traversal.get().getTraverserGenerator(); MemoryTraversalSideEffects.setMemorySideEffects(this.traversal.get(), memory, ProgramPhase.EXECUTE); this.checkSideEffects(); final TraverserSet<Vertex> activeTraversers = memory.get(TraversalVertexProgram.ACTIVE_TRAVERSERS); if (vertex.label().equals("software")) { assertEquals(1, activeTraversers.stream().filter(v -> v.get().equals(vertex)).count()); if (memory.isInitialIteration()) { assertFalse(vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()); vertex.property( TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(generator.generate(vertex.value("name"), this.programStep, 1l))); } else { assertTrue(vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()); } } else { assertFalse(vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent()); assertEquals(0, activeTraversers.stream().filter(v -> v.get().equals(vertex)).count()); if (!memory.isInitialIteration()) { if (vertex.value("name").equals("marko")) memory.add(TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(generator.generate("marko-is-my-name", this.programStep, 1l))); else if (vertex.value("name").equals("vadas")) this.traversal.get().getSideEffects().add(TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(generator.generate("the-v-o-double-g", this.programStep, 1l))); } } }
@Override public void processAllStarts() { if (this.starts.hasNext()) { final BulkSet<Object> bulkSet = new BulkSet<>(); while (this.starts.hasNext()) { final Traverser.Admin<S> traverser = this.starts.next(); bulkSet.add(TraversalUtil.applyNullable(traverser, this.aggregateTraversal), traverser.bulk()); traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step this.barrier.add(traverser); } this.getTraversal().getSideEffects().add(this.sideEffectKey, bulkSet); } }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Tree root = new Tree(); Tree depth = root; final Path path = traverser.path(); for (int i = 0; i < path.size(); i++) { final Object object = TraversalUtil.applyNullable(path.<Object>get(i), this.traversalRing.next()); if (!depth.containsKey(object)) depth.put(object, new Tree<>()); depth = (Tree) depth.get(object); } this.traversalRing.reset(); this.getTraversal().getSideEffects().add(this.sideEffectKey, root); }