@Override protected Iterator<Traverser.Admin<E>> computerAlgorithm() { final List<Traverser.Admin<E>> ends = new ArrayList<>(); final Traverser.Admin<S> start = this.starts.next(); final Object choice = PickTokenKey.make(TraversalUtil.apply(start, this.branchTraversal)); final List<Traversal.Admin<S, E>> branch = this.traversalOptions.containsKey(choice) ? this.traversalOptions.get(choice) : this.traversalOptions.get(Pick.none); if (null != branch) { branch.forEach(traversal -> { final Traverser.Admin<E> split = (Traverser.Admin<E>) start.split(); split.setStepId(traversal.getStartStep().getId()); //split.addLabels(this.labels); ends.add(split); }); } if (choice != Pick.any) { final List<Traversal.Admin<S, E>> anyBranch = this.traversalOptions.get(Pick.any); if (null != anyBranch) { anyBranch.forEach(traversal -> { final Traverser.Admin<E> split = (Traverser.Admin<E>) start.split(); split.setStepId(traversal.getStartStep().getId()); //split.addLabels(this.labels); ends.add(split); }); } } return ends.iterator(); }
traverser.setStepId(this.getNextStep().getId()); traverser.addLabels(this.labels); return IteratorUtils.of(traverser.split(this.getBindings(traverser), this)); final Traversal.Admin<Object, Object> matchTraversal = this.getMatchAlgorithm().apply(traverser); // determine which sub-pattern the traverser should try next traverser.getTags().add(matchTraversal.getStartStep().getId()); traverser.setStepId(matchTraversal.getStartStep().getId()); // go down the traversal match sub-pattern return IteratorUtils.of(traverser); } else { // OR final Traverser.Admin split = traverser.split(); split.getTags().add(matchTraversal.getStartStep().getId()); split.setStepId(matchTraversal.getStartStep().getId()); traversers.add(split);
@Override public void setup(final Memory memory) { // memory is local MemoryTraversalSideEffects.setMemorySideEffects(this.traversal.get(), memory, ProgramPhase.SETUP); ((MemoryTraversalSideEffects) this.traversal.get().getSideEffects()).storeSideEffectsInMemory(); memory.set(VOTE_TO_HALT, true); memory.set(MUTATED_MEMORY_KEYS, new HashSet<>()); memory.set(COMPLETED_BARRIERS, new HashSet<>()); // if halted traversers are being sent from a previous VertexProgram in an OLAP chain (non-distributed traversers), get them into the flow if (!this.haltedTraversers.isEmpty()) { final TraverserSet<Object> toProcessTraversers = new TraverserSet<>(); IteratorUtils.removeOnNext(this.haltedTraversers.iterator()).forEachRemaining(traverser -> { traverser.setStepId(this.traversal.get().getStartStep().getId()); toProcessTraversers.add(traverser); }); assert this.haltedTraversers.isEmpty(); final IndexedTraverserSet<Object,Vertex> remoteActiveTraversers = new IndexedTraverserSet.VertexIndexedTraverserSet(); MasterExecutor.processTraversers(this.traversal, this.traversalMatrix, toProcessTraversers, remoteActiveTraversers, this.haltedTraversers, this.haltedTraverserStrategy); memory.set(HALTED_TRAVERSERS, this.haltedTraversers); memory.set(ACTIVE_TRAVERSERS, remoteActiveTraversers); } else { memory.set(HALTED_TRAVERSERS, new TraverserSet<>()); memory.set(ACTIVE_TRAVERSERS, new IndexedTraverserSet.VertexIndexedTraverserSet()); } // local variable will no longer be used so null it for GC this.haltedTraversers = null; // does the traversal need profile information this.profile = !TraversalHelper.getStepsOfAssignableClassRecursively(ProfileStep.class, this.traversal.get()).isEmpty(); }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { final Traverser.Admin<S> start = this.starts.next(); if (this.traverserStepIdAndLabelsSetByChild) { final ComputerAwareStep<?, ?> step = (ComputerAwareStep<?, ?>) this.getTraversal().getParent(); start.setStepId(step.getNextStep().getId()); start.addLabels(step.getLabels()); } return start; }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { final Traverser.Admin<S> start = this.starts.next(); if (this.traverserStepIdAndLabelsSetByChild) { final ComputerAwareStep<?, ?> step = (ComputerAwareStep<?, ?>) this.getTraversal().getParent(); start.setStepId(step.getNextStep().getId()); start.addLabels(step.getLabels()); } return start; }
private Traverser.Admin<E> prepareTraversalForNextStep(final Traverser.Admin<E> traverser) { if (!this.traverserStepIdAndLabelsSetByChild) { traverser.setStepId(this.nextStep.getId()); traverser.addLabels(this.labels); } return traverser; } }
@Override public void setStepId(final String stepId) { this.baseTraverser.setStepId(stepId); }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { final Traverser.Admin<S> start = this.starts.next(); if (this.traverserStepIdAndLabelsSetByChild) { final ComputerAwareStep<?, ?> step = (ComputerAwareStep<?, ?>) this.getTraversal().getParent(); start.setStepId(step.getNextStep().getId()); start.addLabels(step.getLabels()); } return start; }
@Override public void processAllStarts() { while (this.starts.hasNext() && (this.maxBarrierSize == Integer.MAX_VALUE || this.barrier.size() < this.maxBarrierSize)) { final Traverser.Admin<S> traverser = this.starts.next(); traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step this.barrier.add(traverser); } }
private Traverser.Admin<E> prepareTraversalForNextStep(final Traverser.Admin<E> traverser) { if (!this.traverserStepIdAndLabelsSetByChild) { traverser.setStepId(this.nextStep.getId()); traverser.addLabels(this.labels); } return traverser; } }
private final Traverser.Admin<E> prepareTraversalForNextStep(final Traverser.Admin<E> traverser) { if (!this.traverserStepIdAndLabelsSetByChild) { traverser.setStepId(this.nextStep.getId()); traverser.addLabels(this.labels); } return traverser; }
traverser.setStepId(this.traversal.get().getStartStep().getId()); activeTraversers.add(traverser); });
@Override protected Traverser.Admin<Object> processNextStart() throws NoSuchElementException { if (null == this.parent) this.parent = ((MatchStep) this.getTraversal().getParent().asStep()); while (true) { final Traverser.Admin traverser = this.starts.next(); // no end label if (null == this.matchKey) { // if (this.traverserStepIdAndLabelsSetByChild) -- traverser equality is based on stepId, lets ensure they are all at the parent traverser.setStepId(this.parent.getId()); this.parent.getMatchAlgorithm().recordEnd(traverser, this.getTraversal()); return this.retractUnnecessaryLabels(traverser); } // TODO: sideEffect check? // path check final Path path = traverser.path(); if (!path.hasLabel(this.matchKey) || traverser.get().equals(path.get(Pop.last, this.matchKey))) { // if (this.traverserStepIdAndLabelsSetByChild) -- traverser equality is based on stepId and thus, lets ensure they are all at the parent traverser.setStepId(this.parent.getId()); traverser.addLabels(this.matchKeyCollection); this.parent.getMatchAlgorithm().recordEnd(traverser, this.getTraversal()); return this.retractUnnecessaryLabels(traverser); } } }
@Override protected Iterator<Traverser.Admin<S>> computerAlgorithm() throws NoSuchElementException { if (null == this.repeatTraversal) throw new IllegalStateException("The repeat()-traversal was not defined: " + this); final Traverser.Admin<S> start = this.starts.next(); if (doUntil(start, true)) { start.setStepId(this.getNextStep().getId()); start.addLabels(this.labels); return IteratorUtils.of(start); } else { start.setStepId(this.repeatTraversal.getStartStep().getId()); start.initialiseLoops(start.getStepId(), this.loopName); if (doEmit(start, true)) { final Traverser.Admin<S> emitSplit = start.split(); emitSplit.resetLoops(); emitSplit.setStepId(this.getNextStep().getId()); return IteratorUtils.of(start, emitSplit); } else { return IteratorUtils.of(start); } } }
@Override protected Iterator<Traverser.Admin<S>> computerAlgorithm() throws NoSuchElementException { final RepeatStep<S> repeatStep = (RepeatStep<S>) this.getTraversal().getParent(); final Traverser.Admin<S> start = this.starts.next(); start.incrLoops(); if (repeatStep.doUntil(start, false)) { start.resetLoops(); start.setStepId(repeatStep.getNextStep().getId()); start.addLabels(repeatStep.labels); return IteratorUtils.of(start); } else { start.setStepId(repeatStep.getId()); if (repeatStep.doEmit(start, false)) { final Traverser.Admin<S> emitSplit = start.split(); emitSplit.resetLoops(); emitSplit.setStepId(repeatStep.getNextStep().getId()); emitSplit.addLabels(repeatStep.labels); return IteratorUtils.of(start, emitSplit); } return IteratorUtils.of(start); } } }
@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 public void processAllStarts() { while (this.starts.hasNext() && (this.maxBarrierSize == Integer.MAX_VALUE || this.barrier.size() < this.maxBarrierSize)) { final Traverser.Admin<S> traverser = this.starts.next(); traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step this.barrier.add(traverser); } }
private final Traverser.Admin<E> prepareTraversalForNextStep(final Traverser.Admin<E> traverser) { if (!this.traverserStepIdAndLabelsSetByChild) { traverser.setStepId(this.nextStep.getId()); traverser.addLabels(this.labels); } return traverser; }
@Override public void setStepId(final String stepId) { this.baseTraverser.setStepId(stepId); }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { final Traverser.Admin<S> start = this.starts.next(); if (this.traverserStepIdAndLabelsSetByChild) { final ComputerAwareStep<?, ?> step = (ComputerAwareStep<?, ?>) this.getTraversal().getParent(); start.setStepId(step.getNextStep().getId()); start.addLabels(step.getLabels()); } return start; }