Merge branch 'tp32' into tp33
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b34515a9 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b34515a9 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b34515a9 Branch: refs/heads/TINKERPOP-1774 Commit: b34515a91b2055bef3c4561da65b2a1c5f8617ae Parents: b46c295 ca3a343 Author: Robert Dale <robd...@gmail.com> Authored: Wed Aug 22 12:42:46 2018 -0400 Committer: Robert Dale <robd...@gmail.com> Committed: Wed Aug 22 12:42:46 2018 -0400 ---------------------------------------------------------------------- .../jsr223/AbstractGremlinScriptEngineFactory.java | 6 +++--- .../process/traversal/dsl/GremlinDslProcessor.java | 12 +++++++----- .../traversal/util/DefaultTraversalMetrics.java | 16 +++++++++------- 3 files changed, 19 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b34515a9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/GremlinDslProcessor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b34515a9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java ---------------------------------------------------------------------- diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java index ae0bd8e,055e3ab..bfcfacc --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java @@@ -286,10 -188,121 +287,11 @@@ public final class DefaultTraversalMetr private static String padLeft(final String text, final int amountToPad) { // not sure why this method needed to exist. stupid string format stuff and commons utilities wouldn't // work for some reason in the context this method was used above. - String newText = text; + final StringBuilder newText = new StringBuilder(); for (int ix = 0; ix < amountToPad; ix++) { - newText = " " + newText; + newText.append(" "); } - return newText; + newText.append(text); + return newText.toString(); } - - private void computeTotals() { - // Create temp list of ordered metrics - final List<MutableMetrics> tempMetrics = new ArrayList<>(this.metrics.size()); - for (final String label : this.indexToLabelMap.values()) { - // The indexToLabelMap is sorted by index (key) - tempMetrics.add(this.metrics.get(label).clone()); - } - - // Calculate total duration - this.totalStepDuration = 0; - tempMetrics.forEach(metric -> this.totalStepDuration += metric.getDuration(MutableMetrics.SOURCE_UNIT)); - - // Assign %'s - tempMetrics.forEach(m -> { - final double dur = m.getDuration(TimeUnit.NANOSECONDS) * 100.d / this.totalStepDuration; - m.setAnnotation(PERCENT_DURATION_KEY, dur); - }); - - // Store immutable instances of the calculated metrics - this.computedMetrics = new LinkedHashMap<>(this.metrics.size()); - tempMetrics.forEach(it -> this.computedMetrics.put(it.getId(), it.getImmutableClone())); - } - - public static DefaultTraversalMetrics merge(final Iterator<DefaultTraversalMetrics> toMerge) { - final DefaultTraversalMetrics newTraversalMetrics = new DefaultTraversalMetrics(); - - // iterate the incoming TraversalMetrics - toMerge.forEachRemaining(inTraversalMetrics -> { - // aggregate the internal Metrics - inTraversalMetrics.metrics.forEach((metricsId, toAggregate) -> { - - MutableMetrics aggregateMetrics = newTraversalMetrics.metrics.get(metricsId); - if (null == aggregateMetrics) { - // need to create a Metrics to aggregate into - aggregateMetrics = new MutableMetrics(toAggregate.getId(), toAggregate.getName()); - - newTraversalMetrics.metrics.put(metricsId, aggregateMetrics); - // Set the index of the Metrics - for (final Map.Entry<Integer, String> entry : inTraversalMetrics.indexToLabelMap.entrySet()) { - if (metricsId.equals(entry.getValue())) { - newTraversalMetrics.indexToLabelMap.put(entry.getKey(), metricsId); - break; - } - } - } - aggregateMetrics.aggregate(toAggregate); - }); - }); - return newTraversalMetrics; - } - - public void setMetrics(final Traversal.Admin traversal, final boolean onGraphComputer) { - addTopLevelMetrics(traversal, onGraphComputer); - handleNestedTraversals(traversal, null, onGraphComputer); - computeTotals(); - } - - private void addTopLevelMetrics(Traversal.Admin traversal, final boolean onGraphComputer) { - final List<ProfileStep> profileSteps = TraversalHelper.getStepsOfClass(ProfileStep.class, traversal); - for (int ii = 0; ii < profileSteps.size(); ii++) { - // The index is necessary to ensure that step order is preserved after a merge. - final ProfileStep step = profileSteps.get(ii); - if (onGraphComputer) { - final MutableMetrics stepMetrics = traversal.getSideEffects().get(step.getId()); - this.indexToLabelMap.put(ii, stepMetrics.getId()); - this.metrics.put(stepMetrics.getId(), stepMetrics); - } else { - final MutableMetrics stepMetrics = step.getMetrics(); - this.indexToLabelMap.put(ii, stepMetrics.getId()); - this.metrics.put(stepMetrics.getId(), stepMetrics); - } - } - } - - private void handleNestedTraversals(final Traversal.Admin traversal, final MutableMetrics parentMetrics, final boolean onGraphComputer) { - long prevDur = 0; - for (int i = 0; i < traversal.getSteps().size(); i++) { - final Step step = (Step) traversal.getSteps().get(i); - if (!(step instanceof ProfileStep)) - continue; - - final MutableMetrics metrics = onGraphComputer ? - traversal.getSideEffects().get(step.getId()) : - ((ProfileStep) step).getMetrics(); - - if (null != metrics) { // this happens when a particular branch never received a .next() call (the metrics were never initialized) - if (!onGraphComputer) { - // subtract upstream duration. - long durBeforeAdjustment = metrics.getDuration(TimeUnit.NANOSECONDS); - // adjust duration - metrics.setDuration(metrics.getDuration(TimeUnit.NANOSECONDS) - prevDur, TimeUnit.NANOSECONDS); - prevDur = durBeforeAdjustment; - } - - if (parentMetrics != null) { - parentMetrics.addNested(metrics); - } - - if (step.getPreviousStep() instanceof TraversalParent) { - for (Traversal.Admin<?, ?> t : ((TraversalParent) step.getPreviousStep()).getLocalChildren()) { - handleNestedTraversals(t, metrics, onGraphComputer); - } - for (Traversal.Admin<?, ?> t : ((TraversalParent) step.getPreviousStep()).getGlobalChildren()) { - handleNestedTraversals(t, metrics, onGraphComputer); - } - } - } - } - } }