From 798313f1935b2ba994898a291d0832b07bbf32e0 Mon Sep 17 00:00:00 2001 From: Armin Date: Thu, 22 Mar 2018 17:34:39 +0100 Subject: [PATCH] #9255 Speedup pipeline compilation by making IfVertex more efficient Fixes #9278 --- .../logstash/config/ir/CompiledPipeline.java | 2 +- .../org/logstash/config/ir/graph/IfVertex.java | 18 ++++++------------ .../logstash/config/ir/graph/IfVertexTest.java | 4 ++-- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/logstash-core/src/main/java/org/logstash/config/ir/CompiledPipeline.java b/logstash-core/src/main/java/org/logstash/config/ir/CompiledPipeline.java index 3cdd1d357..e8f26ecd8 100644 --- a/logstash-core/src/main/java/org/logstash/config/ir/CompiledPipeline.java +++ b/logstash-core/src/main/java/org/logstash/config/ir/CompiledPipeline.java @@ -348,7 +348,7 @@ public final class CompiledPipeline { ); // It is important that we double check that we are actually dealing with the // positive/left branch of the if condition - if (ifvert.getOutgoingBooleanEdgesByType(true).stream() + if (ifvert.outgoingBooleanEdgesByType(true) .anyMatch(edge -> Objects.equals(edge.getTo(), start))) { return ifDataset; } else { diff --git a/logstash-core/src/main/java/org/logstash/config/ir/graph/IfVertex.java b/logstash-core/src/main/java/org/logstash/config/ir/graph/IfVertex.java index 85f9db890..8636b1a99 100644 --- a/logstash-core/src/main/java/org/logstash/config/ir/graph/IfVertex.java +++ b/logstash-core/src/main/java/org/logstash/config/ir/graph/IfVertex.java @@ -1,13 +1,12 @@ package org.logstash.config.ir.graph; -import org.logstash.config.ir.SourceComponent; -import org.logstash.common.SourceWithMetadata; -import org.logstash.config.ir.expression.BooleanExpression; - import java.util.Collection; import java.util.LinkedList; import java.util.List; -import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.logstash.common.SourceWithMetadata; +import org.logstash.config.ir.SourceComponent; +import org.logstash.config.ir.expression.BooleanExpression; /** * Created by andrewvc on 9/15/16. @@ -61,13 +60,8 @@ public class IfVertex extends Vertex { return (e instanceof BooleanEdge); } - public Collection getOutgoingBooleanEdges() { - // Wish there was a way to do this as a java a cast without an operation - return getOutgoingEdges().stream().map(e -> (BooleanEdge) e).collect(Collectors.toList()); - } - - public Collection getOutgoingBooleanEdgesByType(boolean edgeType) { - return getOutgoingBooleanEdges().stream().filter(e -> e.getEdgeType() == edgeType).collect(Collectors.toList()); + public Stream outgoingBooleanEdgesByType(boolean edgeType) { + return outgoingEdges().map(e -> (BooleanEdge) e).filter(e -> e.getEdgeType() == edgeType); } // The easiest readable version of this for a human. diff --git a/logstash-core/src/test/java/org/logstash/config/ir/graph/IfVertexTest.java b/logstash-core/src/test/java/org/logstash/config/ir/graph/IfVertexTest.java index b337a1446..043248f95 100644 --- a/logstash-core/src/test/java/org/logstash/config/ir/graph/IfVertexTest.java +++ b/logstash-core/src/test/java/org/logstash/config/ir/graph/IfVertexTest.java @@ -53,8 +53,8 @@ public class IfVertexTest { assertThat(ifV.getUnusedOutgoingEdgeFactories().isEmpty(), is(true)); - BooleanEdge trueEdge = ifV.getOutgoingBooleanEdgesByType(true).stream().findAny().get(); - BooleanEdge falseEdge = ifV.getOutgoingBooleanEdgesByType(false).stream().findAny().get(); + BooleanEdge trueEdge = ifV.outgoingBooleanEdgesByType(true).findAny().get(); + BooleanEdge falseEdge = ifV.outgoingBooleanEdgesByType(false).findAny().get(); assertThat(trueEdge.getEdgeType(), is(true)); assertThat(falseEdge.getEdgeType(), is(false)); }