diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractOperatorBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractOperatorBenchmark.java index 0912095cfba2..111fd6034372 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractOperatorBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractOperatorBenchmark.java @@ -25,6 +25,7 @@ import com.facebook.presto.operator.TaskContext; import com.facebook.presto.operator.TaskStats; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.facebook.presto.util.CpuTimer; import com.facebook.presto.util.CpuTimer.CpuDuration; @@ -61,22 +62,23 @@ protected AbstractOperatorBenchmark( this.localQueryRunner = requireNonNull(localQueryRunner, "localQueryRunner is null"); } - protected OperatorFactory createTableScanOperator(int operatorId, String tableName, String... columnNames) + protected OperatorFactory createTableScanOperator(int operatorId, PlanNodeId planNodeId, String tableName, String... columnNames) { - return localQueryRunner.createTableScanOperator(operatorId, tableName, columnNames); + return localQueryRunner.createTableScanOperator(operatorId, planNodeId, tableName, columnNames); } - public OperatorFactory createTableScanOperator(Session session, int operatorId, String tableName, String... columnNames) + public OperatorFactory createTableScanOperator(Session session, int operatorId, PlanNodeId planNodeId, String tableName, String... columnNames) { return localQueryRunner.createTableScanOperator(session, operatorId, + planNodeId, tableName, columnNames); } - protected OperatorFactory createHashProjectOperator(int operatorId, List types) + protected OperatorFactory createHashProjectOperator(int operatorId, PlanNodeId planNodeId, List types) { - return localQueryRunner.createHashProjectOperator(operatorId, types); + return localQueryRunner.createHashProjectOperator(operatorId, planNodeId, types); } protected abstract List createDrivers(TaskContext taskContext); diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractSimpleOperatorBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractSimpleOperatorBenchmark.java index 252c1ec3a844..131065888229 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractSimpleOperatorBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/AbstractSimpleOperatorBenchmark.java @@ -18,6 +18,7 @@ import com.facebook.presto.operator.DriverFactory; import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.operator.TaskContext; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.facebook.presto.testing.NullOutputOperator.NullOutputOperatorFactory; import com.google.common.collect.ImmutableList; @@ -44,7 +45,7 @@ protected DriverFactory createDriverFactory() { List operatorFactories = new ArrayList<>(createOperatorFactories()); - operatorFactories.add(new NullOutputOperatorFactory(999, Iterables.getLast(operatorFactories).getTypes())); + operatorFactories.add(new NullOutputOperatorFactory(999, new PlanNodeId("test"), Iterables.getLast(operatorFactories).getTypes())); return new DriverFactory(true, true, operatorFactories); } diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/CountAggregationBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/CountAggregationBenchmark.java index 12cdf79204fb..ce456268a865 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/CountAggregationBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/CountAggregationBenchmark.java @@ -16,6 +16,7 @@ import com.facebook.presto.operator.AggregationOperator.AggregationOperatorFactory; import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; @@ -36,8 +37,8 @@ public CountAggregationBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "orderkey"); - AggregationOperatorFactory aggregationOperator = new AggregationOperatorFactory(1, Step.SINGLE, ImmutableList.of(COUNT.bind(ImmutableList.of(0), Optional.empty(), Optional.empty(), 1.0))); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "orderkey"); + AggregationOperatorFactory aggregationOperator = new AggregationOperatorFactory(1, new PlanNodeId("test"), Step.SINGLE, ImmutableList.of(COUNT.bind(ImmutableList.of(0), Optional.empty(), Optional.empty(), 1.0))); return ImmutableList.of(tableScanOperator, aggregationOperator); } diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/DoubleSumAggregationBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/DoubleSumAggregationBenchmark.java index ced463b69dc1..caff08b3fbb8 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/DoubleSumAggregationBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/DoubleSumAggregationBenchmark.java @@ -16,6 +16,7 @@ import com.facebook.presto.operator.AggregationOperator.AggregationOperatorFactory; import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; @@ -36,8 +37,8 @@ public DoubleSumAggregationBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "totalprice"); - AggregationOperatorFactory aggregationOperator = new AggregationOperatorFactory(1, Step.SINGLE, ImmutableList.of(DOUBLE_SUM.bind(ImmutableList.of(0), Optional.empty(), Optional.empty(), 1.0))); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice"); + AggregationOperatorFactory aggregationOperator = new AggregationOperatorFactory(1, new PlanNodeId("test"), Step.SINGLE, ImmutableList.of(DOUBLE_SUM.bind(ImmutableList.of(0), Optional.empty(), Optional.empty(), 1.0))); return ImmutableList.of(tableScanOperator, aggregationOperator); } diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery1.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery1.java index 178abb3ce07a..fc55ac2cb4c3 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery1.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery1.java @@ -24,6 +24,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.facebook.presto.util.DateTimeUtils; import com.google.common.collect.ImmutableList; @@ -82,6 +83,7 @@ protected List createOperatorFactories() OperatorFactory tableScanOperator = createTableScanOperator( 0, + new PlanNodeId("test"), "lineitem", "returnflag", "linestatus", @@ -94,6 +96,7 @@ protected List createOperatorFactories() TpchQuery1OperatorFactory tpchQuery1Operator = new TpchQuery1OperatorFactory(1); HashAggregationOperatorFactory aggregationOperator = new HashAggregationOperatorFactory( 2, + new PlanNodeId("test"), ImmutableList.of(tpchQuery1Operator.getTypes().get(0), tpchQuery1Operator.getTypes().get(1)), Ints.asList(0, 1), Step.SINGLE, @@ -145,7 +148,7 @@ public List getTypes() @Override public Operator createOperator(DriverContext driverContext) { - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, TpchQuery1Operator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, new PlanNodeId("test"), TpchQuery1Operator.class.getSimpleName()); return new TpchQuery1Operator(operatorContext); } diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery6.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery6.java index 1fd53e3484ec..bc842f35a19c 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery6.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HandTpchQuery6.java @@ -23,6 +23,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.facebook.presto.util.DateTimeUtils; import com.google.common.collect.ImmutableList; @@ -54,12 +55,13 @@ protected List createOperatorFactories() // and discount >= 0.05 // and discount <= 0.07 // and quantity < 24; - OperatorFactory tableScanOperator = createTableScanOperator(0, "lineitem", "extendedprice", "discount", "shipdate", "quantity"); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "lineitem", "extendedprice", "discount", "shipdate", "quantity"); - FilterAndProjectOperator.FilterAndProjectOperatorFactory tpchQuery6Operator = new FilterAndProjectOperator.FilterAndProjectOperatorFactory(1, new TpchQuery6Processor(), ImmutableList.of(DOUBLE)); + FilterAndProjectOperator.FilterAndProjectOperatorFactory tpchQuery6Operator = new FilterAndProjectOperator.FilterAndProjectOperatorFactory(1, new PlanNodeId("test"), new TpchQuery6Processor(), ImmutableList.of(DOUBLE)); AggregationOperatorFactory aggregationOperator = new AggregationOperatorFactory( 2, + new PlanNodeId("test"), Step.SINGLE, ImmutableList.of( DOUBLE_SUM.bind(ImmutableList.of(0), Optional.empty(), Optional.empty(), 1.0) diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashAggregationBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashAggregationBenchmark.java index 7148f9aa8ea4..9de558d1e83f 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashAggregationBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashAggregationBenchmark.java @@ -17,6 +17,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -40,9 +41,10 @@ public HashAggregationBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "orderstatus", "totalprice"); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "orderstatus", "totalprice"); List types = ImmutableList.of(tableScanOperator.getTypes().get(0)); HashAggregationOperatorFactory aggregationOperator = new HashAggregationOperatorFactory(1, + new PlanNodeId("test"), types, Ints.asList(0), Step.SINGLE, diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildAndJoinBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildAndJoinBenchmark.java index fd281ccf7ae7..cf65bd28d517 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildAndJoinBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildAndJoinBenchmark.java @@ -22,6 +22,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.operator.TaskContext; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.facebook.presto.testing.NullOutputOperator.NullOutputOperatorFactory; import com.google.common.collect.ImmutableList; @@ -40,8 +41,8 @@ public class HashBuildAndJoinBenchmark extends AbstractOperatorBenchmark { private final boolean hashEnabled; - private final OperatorFactory ordersTableScan = createTableScanOperator(0, "orders", "orderkey", "totalprice"); - private final OperatorFactory lineItemTableScan = createTableScanOperator(0, "lineitem", "orderkey", "quantity"); + private final OperatorFactory ordersTableScan = createTableScanOperator(0, new PlanNodeId("test"), "orders", "orderkey", "totalprice"); + private final OperatorFactory lineItemTableScan = createTableScanOperator(0, new PlanNodeId("test"), "lineitem", "orderkey", "quantity"); public HashBuildAndJoinBenchmark(Session session, LocalQueryRunner localQueryRunner) { @@ -66,13 +67,13 @@ protected List createDrivers(TaskContext taskContext) OperatorFactory source = ordersTableScan; Optional hashChannel = Optional.empty(); if (hashEnabled) { - source = createHashProjectOperator(1, ImmutableList.of(BIGINT, DOUBLE)); + source = createHashProjectOperator(1, new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE)); driversBuilder.add(source); hashChannel = Optional.of(2); } // hash build - HashBuilderOperatorFactory hashBuilder = new HashBuilderOperatorFactory(2, source.getTypes(), Ints.asList(0), hashChannel, 1_500_000); + HashBuilderOperatorFactory hashBuilder = new HashBuilderOperatorFactory(2, new PlanNodeId("test"), source.getTypes(), Ints.asList(0), hashChannel, 1_500_000); driversBuilder.add(hashBuilder); DriverFactory hashBuildDriverFactory = new DriverFactory(true, false, driversBuilder.build()); Driver hashBuildDriver = hashBuildDriverFactory.createDriver(taskContext.addPipelineContext(true, false).addDriverContext()); @@ -83,14 +84,14 @@ protected List createDrivers(TaskContext taskContext) source = lineItemTableScan; hashChannel = Optional.empty(); if (hashEnabled) { - source = createHashProjectOperator(1, ImmutableList.of(BIGINT, BIGINT)); + source = createHashProjectOperator(1, new PlanNodeId("test"), ImmutableList.of(BIGINT, BIGINT)); joinDriversBuilder.add(source); hashChannel = Optional.of(2); } - OperatorFactory joinOperator = LookupJoinOperators.innerJoin(2, hashBuilder.getLookupSourceSupplier(), source.getTypes(), Ints.asList(0), hashChannel); + OperatorFactory joinOperator = LookupJoinOperators.innerJoin(2, new PlanNodeId("test"), hashBuilder.getLookupSourceSupplier(), source.getTypes(), Ints.asList(0), hashChannel); joinDriversBuilder.add(joinOperator); - joinDriversBuilder.add(new NullOutputOperatorFactory(3, joinOperator.getTypes())); + joinDriversBuilder.add(new NullOutputOperatorFactory(3, new PlanNodeId("test"), joinOperator.getTypes())); DriverFactory joinDriverFactory = new DriverFactory(true, true, joinDriversBuilder.build()); Driver joinDriver = joinDriverFactory.createDriver(taskContext.addPipelineContext(true, true).addDriverContext()); diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildBenchmark.java index 731316f09d4d..47cd13cc4159 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashBuildBenchmark.java @@ -18,6 +18,7 @@ import com.facebook.presto.operator.HashBuilderOperator.HashBuilderOperatorFactory; import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.operator.TaskContext; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -38,8 +39,8 @@ public HashBuildBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createDrivers(TaskContext taskContext) { - OperatorFactory ordersTableScan = createTableScanOperator(0, "orders", "orderkey", "totalprice"); - HashBuilderOperatorFactory hashBuilder = new HashBuilderOperatorFactory(1, ordersTableScan.getTypes(), Ints.asList(0), Optional.empty(), 1_500_000); + OperatorFactory ordersTableScan = createTableScanOperator(0, new PlanNodeId("test"), "orders", "orderkey", "totalprice"); + HashBuilderOperatorFactory hashBuilder = new HashBuilderOperatorFactory(1, new PlanNodeId("test"), ordersTableScan.getTypes(), Ints.asList(0), Optional.empty(), 1_500_000); DriverFactory driverFactory = new DriverFactory(true, true, ordersTableScan, hashBuilder); Driver driver = driverFactory.createDriver(taskContext.addPipelineContext(true, true).addDriverContext()); diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashJoinBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashJoinBenchmark.java index 374f184a9420..8374f7494b8a 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashJoinBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/HashJoinBenchmark.java @@ -21,6 +21,7 @@ import com.facebook.presto.operator.LookupSourceSupplier; import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.operator.TaskContext; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.facebook.presto.testing.NullOutputOperator.NullOutputOperatorFactory; import com.google.common.collect.ImmutableList; @@ -50,8 +51,8 @@ from lineitem join orders using (orderkey) protected List createDrivers(TaskContext taskContext) { if (lookupSourceSupplier == null) { - OperatorFactory ordersTableScan = createTableScanOperator(0, "orders", "orderkey", "totalprice"); - HashBuilderOperatorFactory hashBuilder = new HashBuilderOperatorFactory(1, ordersTableScan.getTypes(), Ints.asList(0), Optional.empty(), 1_500_000); + OperatorFactory ordersTableScan = createTableScanOperator(0, new PlanNodeId("test"), "orders", "orderkey", "totalprice"); + HashBuilderOperatorFactory hashBuilder = new HashBuilderOperatorFactory(1, new PlanNodeId("test"), ordersTableScan.getTypes(), Ints.asList(0), Optional.empty(), 1_500_000); DriverContext driverContext = taskContext.addPipelineContext(false, false).addDriverContext(); Driver driver = new DriverFactory(false, false, ordersTableScan, hashBuilder).createDriver(driverContext); @@ -61,11 +62,11 @@ protected List createDrivers(TaskContext taskContext) lookupSourceSupplier = hashBuilder.getLookupSourceSupplier(); } - OperatorFactory lineItemTableScan = createTableScanOperator(0, "lineitem", "orderkey", "quantity"); + OperatorFactory lineItemTableScan = createTableScanOperator(0, new PlanNodeId("test"), "lineitem", "orderkey", "quantity"); - OperatorFactory joinOperator = LookupJoinOperators.innerJoin(1, lookupSourceSupplier, lineItemTableScan.getTypes(), Ints.asList(0), Optional.empty()); + OperatorFactory joinOperator = LookupJoinOperators.innerJoin(1, new PlanNodeId("test"), lookupSourceSupplier, lineItemTableScan.getTypes(), Ints.asList(0), Optional.empty()); - NullOutputOperatorFactory output = new NullOutputOperatorFactory(2, joinOperator.getTypes()); + NullOutputOperatorFactory output = new NullOutputOperatorFactory(2, new PlanNodeId("test"), joinOperator.getTypes()); DriverFactory driverFactory = new DriverFactory(true, true, lineItemTableScan, joinOperator, output); DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/OrderByBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/OrderByBenchmark.java index 96b7aa356ab5..4c6944d2a46c 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/OrderByBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/OrderByBenchmark.java @@ -16,6 +16,7 @@ import com.facebook.presto.operator.LimitOperator.LimitOperatorFactory; import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.operator.OrderByOperator.OrderByOperatorFactory; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; @@ -37,12 +38,13 @@ public OrderByBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "totalprice", "clerk"); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice", "clerk"); - LimitOperatorFactory limitOperator = new LimitOperatorFactory(1, tableScanOperator.getTypes(), ROWS); + LimitOperatorFactory limitOperator = new LimitOperatorFactory(1, new PlanNodeId("test"), tableScanOperator.getTypes(), ROWS); OrderByOperatorFactory orderByOperator = new OrderByOperatorFactory( 2, + new PlanNodeId("test"), limitOperator.getTypes(), ImmutableList.of(1), ROWS, diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/PredicateFilterBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/PredicateFilterBenchmark.java index f6a18681193a..9e55427a2270 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/PredicateFilterBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/PredicateFilterBenchmark.java @@ -20,6 +20,7 @@ import com.facebook.presto.spi.RecordCursor; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; @@ -40,9 +41,10 @@ public PredicateFilterBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "totalprice"); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice"); FilterAndProjectOperator.FilterAndProjectOperatorFactory filterAndProjectOperator = new FilterAndProjectOperator.FilterAndProjectOperatorFactory( 1, + new PlanNodeId("test"), new GenericPageProcessor(new DoubleFilter(50000.00), ImmutableList.of(singleColumn(DOUBLE, 0))), ImmutableList.of(DOUBLE)); diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/RawStreamingBenchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/RawStreamingBenchmark.java index fb285443a7c7..72231ce2bd75 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/RawStreamingBenchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/RawStreamingBenchmark.java @@ -14,6 +14,7 @@ package com.facebook.presto.benchmark; import com.facebook.presto.operator.OperatorFactory; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; @@ -32,7 +33,7 @@ public RawStreamingBenchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "totalprice"); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice"); return ImmutableList.of(tableScanOperator); } diff --git a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/Top100Benchmark.java b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/Top100Benchmark.java index 4ce842dba789..2c72c1be7a5b 100644 --- a/presto-benchmark/src/main/java/com/facebook/presto/benchmark/Top100Benchmark.java +++ b/presto-benchmark/src/main/java/com/facebook/presto/benchmark/Top100Benchmark.java @@ -15,6 +15,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.operator.TopNOperator.TopNOperatorFactory; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.LocalQueryRunner; import com.google.common.collect.ImmutableList; @@ -34,9 +35,10 @@ public Top100Benchmark(LocalQueryRunner localQueryRunner) @Override protected List createOperatorFactories() { - OperatorFactory tableScanOperator = createTableScanOperator(0, "orders", "totalprice"); + OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice"); TopNOperatorFactory topNOperator = new TopNOperatorFactory( 1, + new PlanNodeId("test"), tableScanOperator.getTypes(), 100, ImmutableList.of(0), diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestOrcPageSourceMemoryTracking.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestOrcPageSourceMemoryTracking.java index da597a85a189..5eadeeabab75 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestOrcPageSourceMemoryTracking.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestOrcPageSourceMemoryTracking.java @@ -416,6 +416,7 @@ public SourceOperator newScanFilterAndProjectOperator(DriverContext driverContex ImmutableList projections = projectionsBuilder.build(); SourceOperatorFactory sourceOperatorFactory = new ScanFilterAndProjectOperatorFactory( 0, + new PlanNodeId("test"), new PlanNodeId("0"), (session, split, columnHandles) -> pageSource, new GenericCursorProcessor(FilterFunctions.TRUE_FUNCTION, projections), diff --git a/presto-main/src/main/java/com/facebook/presto/operator/AggregationOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/AggregationOperator.java index a0d380639515..5dac6b95f8cb 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/AggregationOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/AggregationOperator.java @@ -20,6 +20,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -39,14 +40,16 @@ public static class AggregationOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final Step step; private final List accumulatorFactories; private final List types; private boolean closed; - public AggregationOperatorFactory(int operatorId, Step step, List accumulatorFactories) + public AggregationOperatorFactory(int operatorId, PlanNodeId planNodeId, Step step, List accumulatorFactories) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.step = step; this.accumulatorFactories = ImmutableList.copyOf(accumulatorFactories); this.types = toTypes(step, accumulatorFactories); @@ -62,7 +65,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, AggregationOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, AggregationOperator.class.getSimpleName()); return new AggregationOperator(operatorContext, step, accumulatorFactories); } @@ -75,7 +78,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new AggregationOperatorFactory(operatorId, step, accumulatorFactories); + return new AggregationOperatorFactory(operatorId, planNodeId, step, accumulatorFactories); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/DeleteOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/DeleteOperator.java index 889659a7e698..85fac7f530d9 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/DeleteOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/DeleteOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; import io.airlift.slice.Slice; @@ -45,12 +46,14 @@ public static class DeleteOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final int rowIdChannel; private boolean closed; - public DeleteOperatorFactory(int operatorId, int rowIdChannel) + public DeleteOperatorFactory(int operatorId, PlanNodeId planNodeId, int rowIdChannel) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.rowIdChannel = rowIdChannel; } @@ -64,7 +67,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext context = driverContext.addOperatorContext(operatorId, DeleteOperator.class.getSimpleName()); + OperatorContext context = driverContext.addOperatorContext(operatorId, planNodeId, DeleteOperator.class.getSimpleName()); return new DeleteOperator(context, rowIdChannel); } @@ -77,7 +80,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new DeleteOperatorFactory(operatorId, rowIdChannel); + return new DeleteOperatorFactory(operatorId, planNodeId, rowIdChannel); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/DistinctLimitOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/DistinctLimitOperator.java index 0e01e7c9d962..53ce53af7a35 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/DistinctLimitOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/DistinctLimitOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -34,15 +35,17 @@ public static class DistinctLimitOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List distinctChannels; private final List types; private final long limit; private final Optional hashChannel; private boolean closed; - public DistinctLimitOperatorFactory(int operatorId, List types, List distinctChannels, long limit, Optional hashChannel) + public DistinctLimitOperatorFactory(int operatorId, PlanNodeId planNodeId, List types, List distinctChannels, long limit, Optional hashChannel) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.types = ImmutableList.copyOf(requireNonNull(types, "types is null")); this.distinctChannels = requireNonNull(distinctChannels, "distinctChannels is null"); @@ -61,7 +64,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, DistinctLimitOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, DistinctLimitOperator.class.getSimpleName()); return new DistinctLimitOperator(operatorContext, types, distinctChannels, limit, hashChannel); } @@ -74,7 +77,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new DistinctLimitOperatorFactory(operatorId, types, distinctChannels, limit, hashChannel); + return new DistinctLimitOperatorFactory(operatorId, planNodeId, types, distinctChannels, limit, hashChannel); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/DriverContext.java b/presto-main/src/main/java/com/facebook/presto/operator/DriverContext.java index b0bb8516ff9f..cf7b3e29f209 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/DriverContext.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/DriverContext.java @@ -15,6 +15,7 @@ import com.facebook.presto.Session; import com.facebook.presto.execution.TaskId; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -93,12 +94,12 @@ public TaskId getTaskId() return pipelineContext.getTaskId(); } - public OperatorContext addOperatorContext(int operatorId, String operatorType) + public OperatorContext addOperatorContext(int operatorId, PlanNodeId planNodeId, String operatorType) { - return addOperatorContext(operatorId, operatorType, Long.MAX_VALUE); + return addOperatorContext(operatorId, planNodeId, operatorType, Long.MAX_VALUE); } - public OperatorContext addOperatorContext(int operatorId, String operatorType, long maxMemoryReservation) + public OperatorContext addOperatorContext(int operatorId, PlanNodeId planNodeId, String operatorType, long maxMemoryReservation) { checkArgument(operatorId >= 0, "operatorId is negative"); @@ -106,7 +107,7 @@ public OperatorContext addOperatorContext(int operatorId, String operatorType, l checkArgument(operatorId != operatorContext.getOperatorId(), "A context already exists for operatorId %s", operatorId); } - OperatorContext operatorContext = new OperatorContext(operatorId, operatorType, this, executor, maxMemoryReservation); + OperatorContext operatorContext = new OperatorContext(operatorId, planNodeId, operatorType, this, executor, maxMemoryReservation); operatorContexts.add(operatorContext); return operatorContext; } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/EnforceSingleRowOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/EnforceSingleRowOperator.java index b13071af6dba..c3a2732be6be 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/EnforceSingleRowOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/EnforceSingleRowOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.PrestoException; import com.facebook.presto.spi.block.FixedWidthBlock; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import io.airlift.slice.Slices; @@ -34,12 +35,14 @@ public static class EnforceSingleRowOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final Type type; private boolean closed; - public EnforceSingleRowOperatorFactory(int operatorId, Type type) + public EnforceSingleRowOperatorFactory(int operatorId, PlanNodeId planNodeId, Type type) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.type = requireNonNull(type, "type is null"); } @@ -53,7 +56,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, EnforceSingleRowOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, EnforceSingleRowOperator.class.getSimpleName()); return new EnforceSingleRowOperator(operatorContext, type); } @@ -66,7 +69,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new EnforceSingleRowOperatorFactory(operatorId, type); + return new EnforceSingleRowOperatorFactory(operatorId, planNodeId, type); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/ExchangeOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/ExchangeOperator.java index a90ce49ef1d2..d3785bceeebf 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/ExchangeOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/ExchangeOperator.java @@ -68,7 +68,7 @@ public SourceOperator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, ExchangeOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, sourceId, ExchangeOperator.class.getSimpleName()); return new ExchangeOperator( operatorContext, types, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/FilterAndProjectOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/FilterAndProjectOperator.java index f3c6834621ec..75b7ca765602 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/FilterAndProjectOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/FilterAndProjectOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -128,13 +129,15 @@ public static class FilterAndProjectOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final PageProcessor processor; private final List types; private boolean closed; - public FilterAndProjectOperatorFactory(int operatorId, PageProcessor processor, List types) + public FilterAndProjectOperatorFactory(int operatorId, PlanNodeId planNodeId, PageProcessor processor, List types) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.processor = processor; this.types = types; } @@ -149,7 +152,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, FilterAndProjectOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, FilterAndProjectOperator.class.getSimpleName()); return new FilterAndProjectOperator(operatorContext, types, processor); } @@ -162,7 +165,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new FilterAndProjectOperatorFactory(operatorId, processor, types); + return new FilterAndProjectOperatorFactory(operatorId, planNodeId, processor, types); } } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/HashAggregationOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/HashAggregationOperator.java index 2ecbca19847e..ca47fb84a378 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/HashAggregationOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/HashAggregationOperator.java @@ -20,6 +20,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.AbstractIterator; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -44,6 +45,7 @@ public static class HashAggregationOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final Optional maskChannel; private final List groupByTypes; private final List groupByChannels; @@ -58,6 +60,7 @@ public static class HashAggregationOperatorFactory public HashAggregationOperatorFactory( int operatorId, + PlanNodeId planNodeId, List groupByTypes, List groupByChannels, Step step, @@ -68,6 +71,7 @@ public HashAggregationOperatorFactory( DataSize maxPartialMemory) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.maskChannel = requireNonNull(maskChannel, "maskChannel is null"); this.hashChannel = requireNonNull(hashChannel, "hashChannel is null"); this.groupByTypes = ImmutableList.copyOf(groupByTypes); @@ -93,10 +97,10 @@ public Operator createOperator(DriverContext driverContext) OperatorContext operatorContext; if (step.isOutputPartial()) { - operatorContext = driverContext.addOperatorContext(operatorId, HashAggregationOperator.class.getSimpleName(), maxPartialMemory); + operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, HashAggregationOperator.class.getSimpleName(), maxPartialMemory); } else { - operatorContext = driverContext.addOperatorContext(operatorId, HashAggregationOperator.class.getSimpleName()); + operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, HashAggregationOperator.class.getSimpleName()); } HashAggregationOperator hashAggregationOperator = new HashAggregationOperator( operatorContext, @@ -121,6 +125,7 @@ public OperatorFactory duplicate() { return new HashAggregationOperatorFactory( operatorId, + planNodeId, groupByTypes, groupByChannels, step, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/HashBuilderOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/HashBuilderOperator.java index b508fcd54dd6..9c1cb7959981 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/HashBuilderOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/HashBuilderOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -34,6 +35,7 @@ public static class HashBuilderOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final SettableLookupSourceSupplier lookupSourceSupplier; private final List hashChannels; private final Optional hashChannel; @@ -43,12 +45,14 @@ public static class HashBuilderOperatorFactory public HashBuilderOperatorFactory( int operatorId, + PlanNodeId planNodeId, List types, List hashChannels, Optional hashChannel, int expectedPositions) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.lookupSourceSupplier = new SettableLookupSourceSupplier(requireNonNull(types, "types is null")); Preconditions.checkArgument(!hashChannels.isEmpty(), "hashChannels is empty"); @@ -73,7 +77,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, HashBuilderOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, HashBuilderOperator.class.getSimpleName()); return new HashBuilderOperator( operatorContext, lookupSourceSupplier, @@ -91,7 +95,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new HashBuilderOperatorFactory(operatorId, lookupSourceSupplier.getTypes(), hashChannels, hashChannel, expectedPositions); + return new HashBuilderOperatorFactory(operatorId, planNodeId, lookupSourceSupplier.getTypes(), hashChannels, hashChannel, expectedPositions); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/HashPartitionMaskOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/HashPartitionMaskOperator.java index ab31c62ea5f3..315f8dac2ff0 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/HashPartitionMaskOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/HashPartitionMaskOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.block.BlockBuilderStatus; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; import io.airlift.slice.XxHash64; @@ -38,6 +39,7 @@ public static class HashPartitionMaskOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final int partitionCount; private final Optional hashChannel; private final List maskChannels; @@ -48,6 +50,7 @@ public static class HashPartitionMaskOperatorFactory public HashPartitionMaskOperatorFactory( int operatorId, + PlanNodeId planNodeId, int partitionCount, List sourceTypes, Collection maskChannels, @@ -55,6 +58,7 @@ public HashPartitionMaskOperatorFactory( Optional hashChannel) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); checkArgument(partitionCount > 1, "partition count must be greater than 1"); this.partitionCount = partitionCount; this.maskChannels = ImmutableList.copyOf(requireNonNull(maskChannels, "maskChannels is null")); @@ -87,7 +91,7 @@ public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); checkState(partition < partitionCount, "All operators already created"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, MarkDistinctOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, MarkDistinctOperator.class.getSimpleName()); return new HashPartitionMaskOperator(operatorContext, partition++, partitionCount, types, maskChannels, partitionChannels, hashChannel); } @@ -100,7 +104,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new HashPartitionMaskOperatorFactory(operatorId, partitionCount, types.subList(0, types.size() - 1), maskChannels, partitionChannels, hashChannel); + return new HashPartitionMaskOperatorFactory(operatorId, planNodeId, partitionCount, types.subList(0, types.size() - 1), maskChannels, partitionChannels, hashChannel); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/HashSemiJoinOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/HashSemiJoinOperator.java index 424145d7b3a9..35c1534b15b0 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/HashSemiJoinOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/HashSemiJoinOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; @@ -38,15 +39,17 @@ public static class HashSemiJoinOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final SetSupplier setSupplier; private final List probeTypes; private final int probeJoinChannel; private final List types; private boolean closed; - public HashSemiJoinOperatorFactory(int operatorId, SetSupplier setSupplier, List probeTypes, int probeJoinChannel) + public HashSemiJoinOperatorFactory(int operatorId, PlanNodeId planNodeId, SetSupplier setSupplier, List probeTypes, int probeJoinChannel) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.setSupplier = setSupplier; this.probeTypes = ImmutableList.copyOf(probeTypes); checkArgument(probeJoinChannel >= 0, "probeJoinChannel is negative"); @@ -68,7 +71,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, HashBuilderOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, HashBuilderOperator.class.getSimpleName()); return new HashSemiJoinOperator(operatorContext, setSupplier, probeTypes, probeJoinChannel); } @@ -81,7 +84,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new HashSemiJoinOperatorFactory(operatorId, setSupplier, probeTypes, probeJoinChannel); + return new HashSemiJoinOperatorFactory(operatorId, planNodeId, setSupplier, probeTypes, probeJoinChannel); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchange.java b/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchange.java index 788817498c16..3d3f198d8b00 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchange.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchange.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; @@ -96,11 +97,11 @@ public int getBufferCount() return buffers.size(); } - public synchronized OperatorFactory createSinkFactory(int operatorId) + public synchronized OperatorFactory createSinkFactory(int operatorId, PlanNodeId planNodeId) { checkState(!noMoreSinkFactories, "No more sink factories already set"); sinkFactories++; - return new InMemoryExchangeSinkOperatorFactory(operatorId); + return new InMemoryExchangeSinkOperatorFactory(operatorId, planNodeId); } private synchronized void addSink() @@ -250,11 +251,13 @@ private class InMemoryExchangeSinkOperatorFactory implements OperatorFactory, LocalPlannerAware { private final int operatorId; + private final PlanNodeId planNodeId; private boolean closed; - private InMemoryExchangeSinkOperatorFactory(int operatorId) + private InMemoryExchangeSinkOperatorFactory(int operatorId, PlanNodeId planNodeId) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); } @Override @@ -267,7 +270,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, InMemoryExchangeSinkOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, InMemoryExchangeSinkOperator.class.getSimpleName()); addSink(); return new InMemoryExchangeSinkOperator(operatorContext, InMemoryExchange.this); } @@ -284,7 +287,7 @@ public void close() @Override public OperatorFactory duplicate() { - return createSinkFactory(operatorId); + return createSinkFactory(operatorId, planNodeId); } @Override diff --git a/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchangeSourceOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchangeSourceOperator.java index 7fa73f0fb4aa..d274dd2f5a75 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchangeSourceOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/InMemoryExchangeSourceOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; @@ -30,28 +31,30 @@ public static class InMemoryExchangeSourceOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final InMemoryExchange inMemoryExchange; private final boolean broadcast; private int bufferIndex; private boolean closed; - public static InMemoryExchangeSourceOperatorFactory createRandomDistribution(int operatorId, InMemoryExchange inMemoryExchange) + public static InMemoryExchangeSourceOperatorFactory createRandomDistribution(int operatorId, PlanNodeId planNodeId, InMemoryExchange inMemoryExchange) { requireNonNull(inMemoryExchange, "inMemoryExchange is null"); checkArgument(inMemoryExchange.getBufferCount() == 1, "exchange must have only one buffer"); - return new InMemoryExchangeSourceOperatorFactory(operatorId, inMemoryExchange, false); + return new InMemoryExchangeSourceOperatorFactory(operatorId, planNodeId, inMemoryExchange, false); } - public static InMemoryExchangeSourceOperatorFactory createBroadcastDistribution(int operatorId, InMemoryExchange inMemoryExchange) + public static InMemoryExchangeSourceOperatorFactory createBroadcastDistribution(int operatorId, PlanNodeId planNodeId, InMemoryExchange inMemoryExchange) { requireNonNull(inMemoryExchange, "inMemoryExchange is null"); checkArgument(inMemoryExchange.getBufferCount() > 1, "exchange must have more than one buffer"); - return new InMemoryExchangeSourceOperatorFactory(operatorId, inMemoryExchange, true); + return new InMemoryExchangeSourceOperatorFactory(operatorId, planNodeId, inMemoryExchange, true); } - private InMemoryExchangeSourceOperatorFactory(int operatorId, InMemoryExchange inMemoryExchange, boolean broadcast) + private InMemoryExchangeSourceOperatorFactory(int operatorId, PlanNodeId planNodeId, InMemoryExchange inMemoryExchange, boolean broadcast) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.inMemoryExchange = requireNonNull(inMemoryExchange, "inMemoryExchange is null"); checkArgument(bufferIndex < inMemoryExchange.getBufferCount()); this.broadcast = broadcast; @@ -68,7 +71,7 @@ public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); checkState(bufferIndex < inMemoryExchange.getBufferCount(), "All operators already created"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, InMemoryExchangeSourceOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, InMemoryExchangeSourceOperator.class.getSimpleName()); Operator operator = new InMemoryExchangeSourceOperator(operatorContext, inMemoryExchange, bufferIndex); if (broadcast) { bufferIndex++; diff --git a/presto-main/src/main/java/com/facebook/presto/operator/LimitOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/LimitOperator.java index 9038708c923c..90b88478f55c 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/LimitOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/LimitOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -31,13 +32,15 @@ public static class LimitOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List types; private final long limit; private boolean closed; - public LimitOperatorFactory(int operatorId, List types, long limit) + public LimitOperatorFactory(int operatorId, PlanNodeId planNodeId, List types, long limit) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.types = ImmutableList.copyOf(types); this.limit = limit; } @@ -52,7 +55,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, LimitOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, LimitOperator.class.getSimpleName()); return new LimitOperator(operatorContext, types, limit); } @@ -65,7 +68,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new LimitOperatorFactory(operatorId, types, limit); + return new LimitOperatorFactory(operatorId, planNodeId, types, limit); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperatorFactory.java b/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperatorFactory.java index bcaf3ee33f4f..fdfb0fd47f8c 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperatorFactory.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperatorFactory.java @@ -17,17 +17,20 @@ import com.facebook.presto.operator.LookupOuterOperator.LookupOuterOperatorFactory; import com.facebook.presto.operator.LookupOuterOperator.OuterLookupSourceSupplier; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; import java.util.Optional; import static com.google.common.base.Preconditions.checkState; +import static java.util.Objects.requireNonNull; public class LookupJoinOperatorFactory implements JoinOperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final LookupSourceSupplier lookupSourceSupplier; private final List probeTypes; private final JoinType joinType; @@ -36,12 +39,14 @@ public class LookupJoinOperatorFactory private boolean closed; public LookupJoinOperatorFactory(int operatorId, + PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, JoinType joinType, JoinProbeFactory joinProbeFactory) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.lookupSourceSupplier = lookupSourceSupplier; this.probeTypes = probeTypes; this.joinType = joinType; @@ -74,7 +79,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, LookupJoinOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, LookupJoinOperator.class.getSimpleName()); return new LookupJoinOperator(operatorContext, lookupSourceSupplier, probeTypes, joinType, joinProbeFactory); } @@ -91,14 +96,14 @@ public void close() @Override public OperatorFactory duplicate() { - return new LookupJoinOperatorFactory(operatorId, lookupSourceSupplier, probeTypes, joinType, joinProbeFactory); + return new LookupJoinOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes, joinType, joinProbeFactory); } @Override public Optional createOuterOperatorFactory() { if (lookupSourceSupplier instanceof OuterLookupSourceSupplier) { - return Optional.of(new LookupOuterOperatorFactory(operatorId, (OuterLookupSourceSupplier) lookupSourceSupplier, probeTypes)); + return Optional.of(new LookupOuterOperatorFactory(operatorId, planNodeId, (OuterLookupSourceSupplier) lookupSourceSupplier, probeTypes)); } return Optional.empty(); } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperators.java b/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperators.java index 367c6b3c98df..bd13e8167118 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperators.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/LookupJoinOperators.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.gen.JoinProbeCompiler; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import java.util.List; import java.util.Optional; @@ -34,23 +35,23 @@ private LookupJoinOperators() private static final JoinProbeCompiler JOIN_PROBE_COMPILER = new JoinProbeCompiler(); - public static OperatorFactory innerJoin(int operatorId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) + public static OperatorFactory innerJoin(int operatorId, PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) { - return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.INNER); + return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.INNER); } - public static OperatorFactory probeOuterJoin(int operatorId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) + public static OperatorFactory probeOuterJoin(int operatorId, PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) { - return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.PROBE_OUTER); + return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.PROBE_OUTER); } - public static OperatorFactory lookupOuterJoin(int operatorId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) + public static OperatorFactory lookupOuterJoin(int operatorId, PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) { - return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.LOOKUP_OUTER); + return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.LOOKUP_OUTER); } - public static OperatorFactory fullOuterJoin(int operatorId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) + public static OperatorFactory fullOuterJoin(int operatorId, PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, Optional probeHashChannel) { - return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.FULL_OUTER); + return JOIN_PROBE_COMPILER.compileJoinOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes, probeJoinChannel, probeHashChannel, JoinType.FULL_OUTER); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/LookupOuterOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/LookupOuterOperator.java index 902aa8c09d9e..32e3a6a9f631 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/LookupOuterOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/LookupOuterOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -43,6 +44,7 @@ public static class LookupOuterOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final OuterLookupSourceSupplier lookupSourceSupplier; private final List probeTypes; private final List types; @@ -50,10 +52,12 @@ public static class LookupOuterOperatorFactory public LookupOuterOperatorFactory( int operatorId, + PlanNodeId planNodeId, OuterLookupSourceSupplier lookupSourceSupplier, List probeTypes) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.lookupSourceSupplier = requireNonNull(lookupSourceSupplier, "lookupSourceSupplier is null"); this.probeTypes = ImmutableList.copyOf(requireNonNull(probeTypes, "probeTypes is null")); @@ -78,7 +82,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, LookupOuterOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, LookupOuterOperator.class.getSimpleName()); return new LookupOuterOperator(operatorContext, lookupSourceSupplier, probeTypes); } @@ -91,7 +95,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new LookupOuterOperatorFactory(operatorId, lookupSourceSupplier, probeTypes); + return new LookupOuterOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/MarkDistinctOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/MarkDistinctOperator.java index d87e596eee79..c31a89be872f 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/MarkDistinctOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/MarkDistinctOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -35,14 +36,16 @@ public static class MarkDistinctOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final Optional hashChannel; private final List markDistinctChannels; private final List types; private boolean closed; - public MarkDistinctOperatorFactory(int operatorId, List sourceTypes, Collection markDistinctChannels, Optional hashChannel) + public MarkDistinctOperatorFactory(int operatorId, PlanNodeId planNodeId, List sourceTypes, Collection markDistinctChannels, Optional hashChannel) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.markDistinctChannels = ImmutableList.copyOf(requireNonNull(markDistinctChannels, "markDistinctChannels is null")); checkArgument(!markDistinctChannels.isEmpty(), "markDistinctChannels is empty"); this.hashChannel = requireNonNull(hashChannel, "hashChannel is null"); @@ -62,7 +65,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, MarkDistinctOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, MarkDistinctOperator.class.getSimpleName()); return new MarkDistinctOperator(operatorContext, types, markDistinctChannels, hashChannel); } @@ -75,7 +78,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new MarkDistinctOperatorFactory(operatorId, types.subList(0, types.size() - 1), markDistinctChannels, hashChannel); + return new MarkDistinctOperatorFactory(operatorId, planNodeId, types.subList(0, types.size() - 1), markDistinctChannels, hashChannel); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/MetadataDeleteOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/MetadataDeleteOperator.java index 216761fe70a4..5a1487ed512b 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/MetadataDeleteOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/MetadataDeleteOperator.java @@ -21,6 +21,7 @@ import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -39,15 +40,17 @@ public static class MetadataDeleteOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final TableLayoutHandle tableLayout; private final Metadata metadata; private final Session session; private final TableHandle tableHandle; private boolean closed; - public MetadataDeleteOperatorFactory(int operatorId, TableLayoutHandle tableLayout, Metadata metadata, Session session, TableHandle tableHandle) + public MetadataDeleteOperatorFactory(int operatorId, PlanNodeId planNodeId, TableLayoutHandle tableLayout, Metadata metadata, Session session, TableHandle tableHandle) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.tableLayout = requireNonNull(tableLayout, "tableLayout is null"); this.metadata = requireNonNull(metadata, "metadata is null"); this.session = requireNonNull(session, "session is null"); @@ -64,7 +67,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext context = driverContext.addOperatorContext(operatorId, MetadataDeleteOperator.class.getSimpleName()); + OperatorContext context = driverContext.addOperatorContext(operatorId, planNodeId, MetadataDeleteOperator.class.getSimpleName()); return new MetadataDeleteOperator(context, tableLayout, metadata, session, tableHandle); } @@ -77,7 +80,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new MetadataDeleteOperatorFactory(operatorId, tableLayout, metadata, session, tableHandle); + return new MetadataDeleteOperatorFactory(operatorId, planNodeId, tableLayout, metadata, session, tableHandle); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopBuildOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopBuildOperator.java index ff3119966abd..bc7b958fdb29 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopBuildOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopBuildOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import java.util.List; @@ -28,13 +29,15 @@ public static class NestedLoopBuildOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final NestedLoopJoinPagesSupplier nestedLoopJoinPagesSupplier; private boolean closed; - public NestedLoopBuildOperatorFactory(int operatorId, List types) + public NestedLoopBuildOperatorFactory(int operatorId, PlanNodeId planNodeId, List types) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); nestedLoopJoinPagesSupplier = new NestedLoopJoinPagesSupplier(requireNonNull(types, "types is null")); nestedLoopJoinPagesSupplier.retain(); } @@ -54,7 +57,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, NestedLoopBuildOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, NestedLoopBuildOperator.class.getSimpleName()); return new NestedLoopBuildOperator(operatorContext, nestedLoopJoinPagesSupplier); } @@ -71,7 +74,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new NestedLoopBuildOperatorFactory(operatorId, getTypes()); + return new NestedLoopBuildOperatorFactory(operatorId, planNodeId, getTypes()); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopJoinOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopJoinOperator.java index 9c86acd00193..e46cbff28b75 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopJoinOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/NestedLoopJoinOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.RunLengthEncodedBlock; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; @@ -40,14 +41,16 @@ public static class NestedLoopJoinOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final NestedLoopJoinPagesSupplier nestedLoopJoinPagesSupplier; private final List probeTypes; private final List types; private boolean closed; - public NestedLoopJoinOperatorFactory(int operatorId, NestedLoopJoinPagesSupplier nestedLoopJoinPagesSupplier, List probeTypes) + public NestedLoopJoinOperatorFactory(int operatorId, PlanNodeId planNodeId, NestedLoopJoinPagesSupplier nestedLoopJoinPagesSupplier, List probeTypes) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.nestedLoopJoinPagesSupplier = nestedLoopJoinPagesSupplier; this.nestedLoopJoinPagesSupplier.retain(); this.probeTypes = probeTypes; @@ -67,7 +70,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, NestedLoopJoinOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, NestedLoopJoinOperator.class.getSimpleName()); return new NestedLoopJoinOperator(operatorContext, nestedLoopJoinPagesSupplier, probeTypes); } @@ -84,7 +87,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new NestedLoopJoinOperatorFactory(operatorId, nestedLoopJoinPagesSupplier, probeTypes); + return new NestedLoopJoinOperatorFactory(operatorId, planNodeId, nestedLoopJoinPagesSupplier, probeTypes); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/OperatorContext.java b/presto-main/src/main/java/com/facebook/presto/operator/OperatorContext.java index b603e5fed827..d20315b6bbfb 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/OperatorContext.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/OperatorContext.java @@ -17,6 +17,7 @@ import com.facebook.presto.Session; import com.facebook.presto.memory.AbstractAggregatedMemoryContext; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -50,6 +51,7 @@ public class OperatorContext private static final ThreadMXBean THREAD_MX_BEAN = ManagementFactory.getThreadMXBean(); private final int operatorId; + private final PlanNodeId planNodeId; private final String operatorType; private final DriverContext driverContext; private final Executor executor; @@ -88,10 +90,11 @@ public class OperatorContext private final AtomicReference> infoSupplier = new AtomicReference<>(); private final boolean collectTimings; - public OperatorContext(int operatorId, String operatorType, DriverContext driverContext, Executor executor, long maxMemoryReservation) + public OperatorContext(int operatorId, PlanNodeId planNodeId, String operatorType, DriverContext driverContext, Executor executor, long maxMemoryReservation) { checkArgument(operatorId >= 0, "operatorId is negative"); this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.maxMemoryReservation = maxMemoryReservation; this.operatorType = requireNonNull(operatorType, "operatorType is null"); this.driverContext = requireNonNull(driverContext, "driverContext is null"); @@ -381,6 +384,7 @@ public OperatorStats getOperatorStats() return new OperatorStats( operatorId, + planNodeId, operatorType, addInputCalls.get(), diff --git a/presto-main/src/main/java/com/facebook/presto/operator/OperatorStats.java b/presto-main/src/main/java/com/facebook/presto/operator/OperatorStats.java index a357fe913e0b..4ab711b0903c 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/OperatorStats.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/OperatorStats.java @@ -13,6 +13,7 @@ */ package com.facebook.presto.operator; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; @@ -33,6 +34,7 @@ public class OperatorStats { private final int operatorId; + private final PlanNodeId planNodeId; private final String operatorType; private final long addInputCalls; @@ -65,6 +67,7 @@ public class OperatorStats @JsonCreator public OperatorStats( @JsonProperty("operatorId") int operatorId, + @JsonProperty("planNodeId") PlanNodeId planNodeId, @JsonProperty("operatorType") String operatorType, @JsonProperty("addInputCalls") long addInputCalls, @@ -96,6 +99,7 @@ public OperatorStats( { checkArgument(operatorId >= 0, "operatorId is negative"); this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.operatorType = requireNonNull(operatorType, "operatorType is null"); this.addInputCalls = addInputCalls; @@ -134,6 +138,12 @@ public int getOperatorId() return operatorId; } + @JsonProperty + public PlanNodeId getPlanNodeId() + { + return planNodeId; + } + @JsonProperty public String getOperatorType() { @@ -341,6 +351,7 @@ public OperatorStats add(Iterable operators) return new OperatorStats( operatorId, + planNodeId, operatorType, addInputCalls, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/OrderByOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/OrderByOperator.java index 14649bd666b2..9a8bfe08e121 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/OrderByOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/OrderByOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.block.SortOrder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -32,6 +33,7 @@ public static class OrderByOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List sourceTypes; private final List outputChannels; private final int expectedPositions; @@ -42,6 +44,7 @@ public static class OrderByOperatorFactory public OrderByOperatorFactory( int operatorId, + PlanNodeId planNodeId, List sourceTypes, List outputChannels, int expectedPositions, @@ -49,6 +52,7 @@ public OrderByOperatorFactory( List sortOrder) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sourceTypes = ImmutableList.copyOf(requireNonNull(sourceTypes, "sourceTypes is null")); this.outputChannels = requireNonNull(outputChannels, "outputChannels is null"); this.expectedPositions = expectedPositions; @@ -69,7 +73,7 @@ public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, OrderByOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, OrderByOperator.class.getSimpleName()); return new OrderByOperator( operatorContext, sourceTypes, @@ -88,7 +92,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new OrderByOperatorFactory(operatorId, sourceTypes, outputChannels, expectedPositions, sortChannels, sortOrder); + return new OrderByOperatorFactory(operatorId, planNodeId, sourceTypes, outputChannels, expectedPositions, sortChannels, sortOrder); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/OutputFactory.java b/presto-main/src/main/java/com/facebook/presto/operator/OutputFactory.java index 9e95d4fe4286..9f9460b1a2d2 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/OutputFactory.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/OutputFactory.java @@ -14,10 +14,11 @@ package com.facebook.presto.operator; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import java.util.List; public interface OutputFactory { - OperatorFactory createOutputOperator(int operatorId, List sourceTypes); + OperatorFactory createOutputOperator(int operatorId, PlanNodeId planNodeId, List sourceTypes); } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/ParallelHashBuilder.java b/presto-main/src/main/java/com/facebook/presto/operator/ParallelHashBuilder.java index fe92469502bf..b6ae7f78ffd2 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/ParallelHashBuilder.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/ParallelHashBuilder.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.block.BlockBuilderStatus; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; import com.google.common.util.concurrent.Futures; @@ -72,10 +73,11 @@ public ParallelHashBuilder( lookupSourceSupplier = new ParallelLookupSourceSupplier(types, hashChannels, this.lookupSourceFutures); } - public OperatorFactory getCollectOperatorFactory(int operatorId) + public OperatorFactory getCollectOperatorFactory(int operatorId, PlanNodeId planNodeId) { return new ParallelHashCollectOperatorFactory( operatorId, + planNodeId, pagesIndexFutures, types, hashChannels, @@ -83,10 +85,11 @@ public OperatorFactory getCollectOperatorFactory(int operatorId) expectedPositions); } - public OperatorFactory getBuildOperatorFactory() + public OperatorFactory getBuildOperatorFactory(PlanNodeId planNodeId) { return new ParallelHashBuilderOperatorFactory( 0, + planNodeId, types, pagesIndexFutures, lookupSourceFutures, @@ -103,6 +106,7 @@ private static class ParallelHashCollectOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List> partitionFutures; private final List types; private final List hashChannels; @@ -113,6 +117,7 @@ private static class ParallelHashCollectOperatorFactory public ParallelHashCollectOperatorFactory( int operatorId, + PlanNodeId planNodeId, List> partitionFutures, List types, List hashChannels, @@ -120,6 +125,7 @@ public ParallelHashCollectOperatorFactory( int expectedPositions) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.partitionFutures = partitionFutures; this.types = types; this.hashChannels = hashChannels; @@ -137,7 +143,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, ParallelHashBuilder.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, ParallelHashBuilder.class.getSimpleName()); return new ParallelHashCollectOperator( operatorContext, partitionFutures, @@ -279,6 +285,7 @@ private static class ParallelHashBuilderOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List types; private final List> partitionFutures; private final List> lookupSourceFutures; @@ -290,6 +297,7 @@ private static class ParallelHashBuilderOperatorFactory public ParallelHashBuilderOperatorFactory( int operatorId, + PlanNodeId planNodeId, List types, List> partitionFutures, List> lookupSourceFutures, @@ -297,6 +305,7 @@ public ParallelHashBuilderOperatorFactory( Optional hashChannel) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.types = types; this.partitionFutures = ImmutableList.copyOf(partitionFutures); this.lookupSourceFutures = lookupSourceFutures; @@ -317,7 +326,7 @@ public Operator createOperator(DriverContext driverContext) checkState(!closed, "Factory is already closed"); checkState(partition < lookupSourceFutures.size(), "All operators already created"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, ParallelHashBuilder.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, ParallelHashBuilder.class.getSimpleName()); ParallelHashBuilderOperator parallelHashBuilderOperator = new ParallelHashBuilderOperator( operatorContext, types, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/PartitionedOutputOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/PartitionedOutputOperator.java index 23a4ff8fde5d..559e3ebcf034 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/PartitionedOutputOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/PartitionedOutputOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -54,9 +55,9 @@ public PartitionedOutputFactory( } @Override - public OperatorFactory createOutputOperator(int operatorId, List sourceTypes) + public OperatorFactory createOutputOperator(int operatorId, PlanNodeId planNodeId, List sourceTypes) { - return new PartitionedOutputOperatorFactory(operatorId, sourceTypes, partitionFunction, partitionChannels, nullChannel, sharedBuffer); + return new PartitionedOutputOperatorFactory(operatorId, planNodeId, sourceTypes, partitionFunction, partitionChannels, nullChannel, sharedBuffer); } } @@ -64,6 +65,7 @@ public static class PartitionedOutputOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List sourceTypes; private final PartitionFunction partitionFunction; private final List partitionChannels; @@ -72,6 +74,7 @@ public static class PartitionedOutputOperatorFactory public PartitionedOutputOperatorFactory( int operatorId, + PlanNodeId planNodeId, List sourceTypes, PartitionFunction partitionFunction, List partitionChannels, @@ -79,6 +82,7 @@ public PartitionedOutputOperatorFactory( SharedBuffer sharedBuffer) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sourceTypes = requireNonNull(sourceTypes, "sourceTypes is null"); this.partitionFunction = requireNonNull(partitionFunction, "partitionFunction is null"); this.partitionChannels = requireNonNull(partitionChannels, "partitionChannels is null"); @@ -95,7 +99,7 @@ public List getTypes() @Override public Operator createOperator(DriverContext driverContext) { - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, PartitionedOutputOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, PartitionedOutputOperator.class.getSimpleName()); return new PartitionedOutputOperator(operatorContext, sourceTypes, partitionFunction, partitionChannels, nullChannel, sharedBuffer); } @@ -107,7 +111,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new PartitionedOutputOperatorFactory(operatorId, sourceTypes, partitionFunction, partitionChannels, nullChannel, sharedBuffer); + return new PartitionedOutputOperatorFactory(operatorId, planNodeId, sourceTypes, partitionFunction, partitionChannels, nullChannel, sharedBuffer); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/RowNumberOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/RowNumberOperator.java index f462ab9bc330..79d717e8274f 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/RowNumberOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/RowNumberOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.util.array.LongBigArray; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -39,6 +40,7 @@ public static class RowNumberOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final Optional maxRowsPerPartition; private final List sourceTypes; private final List outputChannels; @@ -51,6 +53,7 @@ public static class RowNumberOperatorFactory public RowNumberOperatorFactory( int operatorId, + PlanNodeId planNodeId, List sourceTypes, List outputChannels, List partitionChannels, @@ -60,6 +63,7 @@ public RowNumberOperatorFactory( int expectedPositions) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sourceTypes = ImmutableList.copyOf(sourceTypes); this.outputChannels = ImmutableList.copyOf(requireNonNull(outputChannels, "outputChannels is null")); this.partitionChannels = ImmutableList.copyOf(requireNonNull(partitionChannels, "partitionChannels is null")); @@ -83,7 +87,7 @@ public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, RowNumberOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, RowNumberOperator.class.getSimpleName()); return new RowNumberOperator( operatorContext, sourceTypes, @@ -104,7 +108,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new RowNumberOperatorFactory(operatorId, sourceTypes, outputChannels, partitionChannels, partitionTypes, maxRowsPerPartition, hashChannel, expectedPositions); + return new RowNumberOperatorFactory(operatorId, planNodeId, sourceTypes, outputChannels, partitionChannels, partitionTypes, maxRowsPerPartition, hashChannel, expectedPositions); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/SampleOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/SampleOperator.java index ea2c3ab745a6..b86a26a30b68 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/SampleOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/SampleOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import org.apache.commons.math3.random.RandomDataGenerator; @@ -33,15 +34,17 @@ public static class SampleOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final double sampleRatio; private final boolean rescaled; private final List types; private boolean closed; - public SampleOperatorFactory(int operatorId, double sampleRatio, boolean rescaled, List sourceTypes) + public SampleOperatorFactory(int operatorId, PlanNodeId planNodeId, double sampleRatio, boolean rescaled, List sourceTypes) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sampleRatio = sampleRatio; this.rescaled = rescaled; this.types = ImmutableList.builder() @@ -60,7 +63,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, SampleOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, SampleOperator.class.getSimpleName()); return new SampleOperator(operatorContext, sampleRatio, rescaled, types); } @@ -73,7 +76,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new SampleOperatorFactory(operatorId, sampleRatio, rescaled, types.subList(0, types.size() - 1)); + return new SampleOperatorFactory(operatorId, planNodeId, sampleRatio, rescaled, types.subList(0, types.size() - 1)); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/ScanFilterAndProjectOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/ScanFilterAndProjectOperator.java index d1ce989bfd7a..6ffdfc5d029f 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/ScanFilterAndProjectOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/ScanFilterAndProjectOperator.java @@ -298,6 +298,7 @@ public static class ScanFilterAndProjectOperatorFactory implements SourceOperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final CursorProcessor cursorProcessor; private final PageProcessor pageProcessor; private final PlanNodeId sourceId; @@ -308,6 +309,7 @@ public static class ScanFilterAndProjectOperatorFactory public ScanFilterAndProjectOperatorFactory( int operatorId, + PlanNodeId planNodeId, PlanNodeId sourceId, PageSourceProvider pageSourceProvider, CursorProcessor cursorProcessor, @@ -316,6 +318,7 @@ public ScanFilterAndProjectOperatorFactory( List types) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.cursorProcessor = requireNonNull(cursorProcessor, "cursorProcessor is null"); this.pageProcessor = requireNonNull(pageProcessor, "pageProcessor is null"); this.sourceId = requireNonNull(sourceId, "sourceId is null"); @@ -340,7 +343,7 @@ public List getTypes() public SourceOperator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, ScanFilterAndProjectOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, ScanFilterAndProjectOperator.class.getSimpleName()); return new ScanFilterAndProjectOperator( operatorContext, sourceId, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/SetBuilderOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/SetBuilderOperator.java index 4f00888cddd7..88a4638ced66 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/SetBuilderOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/SetBuilderOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; @@ -65,6 +66,7 @@ public static class SetBuilderOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final Optional hashChannel; private final SetSupplier setProvider; private final int setChannel; @@ -73,12 +75,14 @@ public static class SetBuilderOperatorFactory public SetBuilderOperatorFactory( int operatorId, + PlanNodeId planNodeId, Type type, int setChannel, Optional hashChannel, int expectedPositions) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); Preconditions.checkArgument(setChannel >= 0, "setChannel is negative"); this.setProvider = new SetSupplier(requireNonNull(type, "type is null")); this.setChannel = setChannel; @@ -101,7 +105,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, SetBuilderOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, SetBuilderOperator.class.getSimpleName()); return new SetBuilderOperator(operatorContext, setProvider, setChannel, hashChannel, expectedPositions); } @@ -114,7 +118,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new SetBuilderOperatorFactory(operatorId, setProvider.getType(), setChannel, hashChannel, expectedPositions); + return new SetBuilderOperatorFactory(operatorId, planNodeId, setProvider.getType(), setChannel, hashChannel, expectedPositions); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TableFinishOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/TableFinishOperator.java index 80fa074fdac3..dd234abb590e 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TableFinishOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TableFinishOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import io.airlift.slice.Slice; @@ -37,12 +38,14 @@ public static class TableFinishOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final TableFinisher tableFinisher; private boolean closed; - public TableFinishOperatorFactory(int operatorId, TableFinisher tableFinisher) + public TableFinishOperatorFactory(int operatorId, PlanNodeId planNodeId, TableFinisher tableFinisher) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.tableFinisher = requireNonNull(tableFinisher, "tableCommitter is null"); } @@ -56,7 +59,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext context = driverContext.addOperatorContext(operatorId, TableFinishOperator.class.getSimpleName()); + OperatorContext context = driverContext.addOperatorContext(operatorId, planNodeId, TableFinishOperator.class.getSimpleName()); return new TableFinishOperator(context, tableFinisher); } @@ -69,7 +72,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new TableFinishOperatorFactory(operatorId, tableFinisher); + return new TableFinishOperatorFactory(operatorId, planNodeId, tableFinisher); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TableScanOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/TableScanOperator.java index 1e7c197d43d9..68a9e9926251 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TableScanOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TableScanOperator.java @@ -79,7 +79,7 @@ public List getTypes() public SourceOperator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, TableScanOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, sourceId, TableScanOperator.class.getSimpleName()); return new TableScanOperator( operatorContext, sourceId, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TableWriterOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/TableWriterOperator.java index 87fb5e7daf4a..7f830e1375b1 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TableWriterOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TableWriterOperator.java @@ -21,6 +21,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; import com.facebook.presto.split.PageSinkManager; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.sql.planner.plan.TableWriterNode.WriterTarget; import com.google.common.collect.ImmutableList; import io.airlift.slice.Slice; @@ -46,6 +47,7 @@ public static class TableWriterOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final PageSinkManager pageSinkManager; private final WriterTarget target; private final List inputChannels; @@ -54,6 +56,7 @@ public static class TableWriterOperatorFactory private boolean closed; public TableWriterOperatorFactory(int operatorId, + PlanNodeId planNodeId, PageSinkManager pageSinkManager, WriterTarget writerTarget, List inputChannels, @@ -61,6 +64,7 @@ public TableWriterOperatorFactory(int operatorId, Session session) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.inputChannels = requireNonNull(inputChannels, "inputChannels is null"); this.pageSinkManager = requireNonNull(pageSinkManager, "pageSinkManager is null"); checkArgument(writerTarget instanceof CreateHandle || writerTarget instanceof InsertHandle, "writerTarget must be CreateHandle or InsertHandle"); @@ -79,7 +83,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext context = driverContext.addOperatorContext(operatorId, TableWriterOperator.class.getSimpleName()); + OperatorContext context = driverContext.addOperatorContext(operatorId, planNodeId, TableWriterOperator.class.getSimpleName()); return new TableWriterOperator(context, createPageSink(), inputChannels, sampleWeightChannel); } @@ -103,7 +107,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new TableWriterOperatorFactory(operatorId, pageSinkManager, target, inputChannels, sampleWeightChannel, session); + return new TableWriterOperatorFactory(operatorId, planNodeId, pageSinkManager, target, inputChannels, sampleWeightChannel, session); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TaskOutputOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/TaskOutputOperator.java index b5ed04e4127b..ba6f7b01047a 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TaskOutputOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TaskOutputOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.execution.SharedBuffer; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; @@ -38,9 +39,9 @@ public TaskOutputFactory(SharedBuffer sharedBuffer) } @Override - public OperatorFactory createOutputOperator(int operatorId, List sourceTypes) + public OperatorFactory createOutputOperator(int operatorId, PlanNodeId planNodeId, List sourceTypes) { - return new TaskOutputOperatorFactory(operatorId, sharedBuffer); + return new TaskOutputOperatorFactory(operatorId, planNodeId, sharedBuffer); } } @@ -48,11 +49,13 @@ public static class TaskOutputOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final SharedBuffer sharedBuffer; - public TaskOutputOperatorFactory(int operatorId, SharedBuffer sharedBuffer) + public TaskOutputOperatorFactory(int operatorId, PlanNodeId planNodeId, SharedBuffer sharedBuffer) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sharedBuffer = requireNonNull(sharedBuffer, "sharedBuffer is null"); } @@ -65,7 +68,7 @@ public List getTypes() @Override public Operator createOperator(DriverContext driverContext) { - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, TaskOutputOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, TaskOutputOperator.class.getSimpleName()); return new TaskOutputOperator(operatorContext, sharedBuffer); } @@ -77,7 +80,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new TaskOutputOperatorFactory(operatorId, sharedBuffer); + return new TaskOutputOperatorFactory(operatorId, planNodeId, sharedBuffer); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TopNOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/TopNOperator.java index 1360805b7125..357678573663 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TopNOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TopNOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.SortOrder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.collect.Ordering; import io.airlift.units.DataSize; @@ -40,6 +41,7 @@ public static class TopNOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List sourceTypes; private final int n; private final List sortTypes; @@ -50,6 +52,7 @@ public static class TopNOperatorFactory public TopNOperatorFactory( int operatorId, + PlanNodeId planNodeId, List types, int n, List sortChannels, @@ -57,6 +60,7 @@ public TopNOperatorFactory( boolean partial) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sourceTypes = ImmutableList.copyOf(requireNonNull(types, "types is null")); this.n = n; ImmutableList.Builder sortTypes = ImmutableList.builder(); @@ -79,7 +83,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, TopNOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, TopNOperator.class.getSimpleName()); return new TopNOperator( operatorContext, sourceTypes, @@ -99,7 +103,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new TopNOperatorFactory(operatorId, sourceTypes, n, sortChannels, sortOrders, partial); + return new TopNOperatorFactory(operatorId, planNodeId, sourceTypes, n, sortChannels, sortOrders, partial); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TopNRowNumberOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/TopNRowNumberOperator.java index 1a7ad78d9627..6d555864484b 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TopNRowNumberOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TopNRowNumberOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.SortOrder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.collect.MinMaxPriorityQueue; import com.google.common.collect.Ordering; @@ -43,6 +44,7 @@ public static class TopNRowNumberOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List sourceTypes; @@ -63,6 +65,7 @@ public static class TopNRowNumberOperatorFactory public TopNRowNumberOperatorFactory( int operatorId, + PlanNodeId planNodeId, List sourceTypes, List outputChannels, List partitionChannels, @@ -75,6 +78,7 @@ public TopNRowNumberOperatorFactory( int expectedPositions) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sourceTypes = ImmutableList.copyOf(sourceTypes); this.outputChannels = ImmutableList.copyOf(requireNonNull(outputChannels, "outputChannels is null")); this.partitionChannels = ImmutableList.copyOf(requireNonNull(partitionChannels, "partitionChannels is null")); @@ -107,7 +111,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, TopNRowNumberOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, TopNRowNumberOperator.class.getSimpleName()); return new TopNRowNumberOperator( operatorContext, sourceTypes, @@ -132,7 +136,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new TopNRowNumberOperatorFactory(operatorId, sourceTypes, outputChannels, partitionChannels, partitionTypes, sortChannels, sortOrder, maxRowCountPerPartition, partial, hashChannel, expectedPositions); + return new TopNRowNumberOperatorFactory(operatorId, planNodeId, sourceTypes, outputChannels, partitionChannels, partitionTypes, sortChannels, sortOrder, maxRowCountPerPartition, partial, hashChannel, expectedPositions); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/UnnestOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/UnnestOperator.java index f3c531b36b7a..6fada13693ca 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/UnnestOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/UnnestOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.PageBuilder; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.type.ArrayType; import com.facebook.presto.type.MapType; import com.google.common.collect.ImmutableList; @@ -36,6 +37,7 @@ public static class UnnestOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List replicateChannels; private final List replicateTypes; private final List unnestChannels; @@ -44,9 +46,10 @@ public static class UnnestOperatorFactory private boolean closed; private final ImmutableList types; - public UnnestOperatorFactory(int operatorId, List replicateChannels, List replicateTypes, List unnestChannels, List unnestTypes, boolean withOrdinality) + public UnnestOperatorFactory(int operatorId, PlanNodeId planNodeId, List replicateChannels, List replicateTypes, List unnestChannels, List unnestTypes, boolean withOrdinality) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.replicateChannels = ImmutableList.copyOf(requireNonNull(replicateChannels, "replicateChannels is null")); this.replicateTypes = ImmutableList.copyOf(requireNonNull(replicateTypes, "replicateTypes is null")); checkArgument(replicateChannels.size() == replicateTypes.size(), "replicateChannels and replicateTypes do not match"); @@ -73,7 +76,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, UnnestOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, UnnestOperator.class.getSimpleName()); return new UnnestOperator(operatorContext, replicateChannels, replicateTypes, unnestChannels, unnestTypes, withOrdinality); } @@ -86,7 +89,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new UnnestOperatorFactory(operatorId, replicateChannels, replicateTypes, unnestChannels, unnestTypes, withOrdinality); + return new UnnestOperatorFactory(operatorId, planNodeId, replicateChannels, replicateTypes, unnestChannels, unnestTypes, withOrdinality); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/ValuesOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/ValuesOperator.java index 25c0ff9c0916..193927fdf312 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/ValuesOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/ValuesOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; @@ -31,13 +32,15 @@ public static class ValuesOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List types; private final List pages; private boolean closed; - public ValuesOperatorFactory(int operatorId, List types, List pages) + public ValuesOperatorFactory(int operatorId, PlanNodeId planNodeId, List types, List pages) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.types = ImmutableList.copyOf(requireNonNull(types, "types is null")); this.pages = ImmutableList.copyOf(requireNonNull(pages, "pages is null")); } @@ -52,7 +55,7 @@ public List getTypes() public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, ValuesOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, ValuesOperator.class.getSimpleName()); return new ValuesOperator(operatorContext, types, pages); } @@ -65,7 +68,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new ValuesOperatorFactory(operatorId, types, pages); + return new ValuesOperatorFactory(operatorId, planNodeId, types, pages); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java index 7aa881a85a06..0b870b9289cb 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java @@ -21,6 +21,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.SortOrder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -46,6 +47,7 @@ public static class WindowOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List sourceTypes; private final List outputChannels; private final List windowFunctionDefinitions; @@ -61,6 +63,7 @@ public static class WindowOperatorFactory public WindowOperatorFactory( int operatorId, + PlanNodeId planNodeId, List sourceTypes, List outputChannels, List windowFunctionDefinitions, @@ -73,6 +76,7 @@ public WindowOperatorFactory( int expectedPositions) { requireNonNull(sourceTypes, "sourceTypes is null"); + requireNonNull(planNodeId, "planNodeId is null"); requireNonNull(outputChannels, "outputChannels is null"); requireNonNull(windowFunctionDefinitions, "windowFunctionDefinitions is null"); requireNonNull(partitionChannels, "partitionChannels is null"); @@ -86,6 +90,7 @@ public WindowOperatorFactory( requireNonNull(frameInfo, "frameInfo is null"); this.operatorId = operatorId; + this.planNodeId = planNodeId; this.sourceTypes = ImmutableList.copyOf(sourceTypes); this.outputChannels = ImmutableList.copyOf(outputChannels); this.windowFunctionDefinitions = ImmutableList.copyOf(windowFunctionDefinitions); @@ -115,7 +120,7 @@ public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, WindowOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, WindowOperator.class.getSimpleName()); return new WindowOperator( operatorContext, sourceTypes, @@ -141,6 +146,7 @@ public OperatorFactory duplicate() { return new WindowOperatorFactory( operatorId, + planNodeId, sourceTypes, outputChannels, windowFunctionDefinitions, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/index/DynamicTupleFilterFactory.java b/presto-main/src/main/java/com/facebook/presto/operator/index/DynamicTupleFilterFactory.java index a426a1eb5fe9..d2048970712e 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/index/DynamicTupleFilterFactory.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/index/DynamicTupleFilterFactory.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -28,12 +29,14 @@ public class DynamicTupleFilterFactory { private final int filterOperatorId; + private final PlanNodeId planNodeId; private final int[] tupleFilterChannels; private final int[] outputFilterChannels; private final List outputTypes; - public DynamicTupleFilterFactory(int filterOperatorId, int[] tupleFilterChannels, int[] outputFilterChannels, List outputTypes) + public DynamicTupleFilterFactory(int filterOperatorId, PlanNodeId planNodeId, int[] tupleFilterChannels, int[] outputFilterChannels, List outputTypes) { + requireNonNull(planNodeId, "planNodeId is null"); requireNonNull(tupleFilterChannels, "tupleFilterChannels is null"); checkArgument(tupleFilterChannels.length > 0, "Must have at least one tupleFilterChannel"); requireNonNull(outputFilterChannels, "outputFilterChannels is null"); @@ -42,6 +45,7 @@ public DynamicTupleFilterFactory(int filterOperatorId, int[] tupleFilterChannels checkArgument(outputTypes.size() >= outputFilterChannels.length, "Must have at least as many output channels as those used for filtering"); this.filterOperatorId = filterOperatorId; + this.planNodeId = planNodeId; this.tupleFilterChannels = tupleFilterChannels.clone(); this.outputFilterChannels = outputFilterChannels.clone(); this.outputTypes = ImmutableList.copyOf(outputTypes); @@ -51,7 +55,7 @@ public OperatorFactory filterWithTuple(Page tuplePage) { Page normalizedTuplePage = normalizeTuplePage(tuplePage); TupleFilterProcessor processor = new TupleFilterProcessor(normalizedTuplePage, outputTypes, outputFilterChannels); - return new FilterAndProjectOperatorFactory(filterOperatorId, processor, outputTypes); + return new FilterAndProjectOperatorFactory(filterOperatorId, planNodeId, processor, outputTypes); } private Page normalizeTuplePage(Page tuplePage) diff --git a/presto-main/src/main/java/com/facebook/presto/operator/index/IndexBuildDriverFactoryProvider.java b/presto-main/src/main/java/com/facebook/presto/operator/index/IndexBuildDriverFactoryProvider.java index 71dccfa81308..bc0ca5c02a55 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/index/IndexBuildDriverFactoryProvider.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/index/IndexBuildDriverFactoryProvider.java @@ -17,6 +17,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -30,18 +31,21 @@ public class IndexBuildDriverFactoryProvider { private final int outputOperatorId; + private final PlanNodeId planNodeId; private final boolean inputDriver; private final List coreOperatorFactories; private final List outputTypes; private final Optional dynamicTupleFilterFactory; - public IndexBuildDriverFactoryProvider(int outputOperatorId, boolean inputDriver, List coreOperatorFactories, Optional dynamicTupleFilterFactory) + public IndexBuildDriverFactoryProvider(int outputOperatorId, PlanNodeId planNodeId, boolean inputDriver, List coreOperatorFactories, Optional dynamicTupleFilterFactory) { + requireNonNull(planNodeId, "planNodeId is null"); requireNonNull(coreOperatorFactories, "coreOperatorFactories is null"); checkArgument(!coreOperatorFactories.isEmpty(), "coreOperatorFactories is empty"); requireNonNull(dynamicTupleFilterFactory, "dynamicTupleFilterFactory is null"); this.outputOperatorId = outputOperatorId; + this.planNodeId = planNodeId; this.inputDriver = inputDriver; this.coreOperatorFactories = ImmutableList.copyOf(coreOperatorFactories); this.outputTypes = ImmutableList.copyOf(this.coreOperatorFactories.get(this.coreOperatorFactories.size() - 1).getTypes()); @@ -58,7 +62,7 @@ public DriverFactory createSnapshot(IndexSnapshotBuilder indexSnapshotBuilder) checkArgument(indexSnapshotBuilder.getOutputTypes().equals(outputTypes)); return new DriverFactory(inputDriver, false, ImmutableList.builder() .addAll(coreOperatorFactories) - .add(new PagesIndexBuilderOperatorFactory(outputOperatorId, indexSnapshotBuilder)) + .add(new PagesIndexBuilderOperatorFactory(outputOperatorId, planNodeId, indexSnapshotBuilder)) .build()); } @@ -72,7 +76,7 @@ public DriverFactory createStreaming(PageBuffer pageBuffer, Page indexKeyTuple) operatorFactories.add(dynamicTupleFilterFactory.get().filterWithTuple(indexKeyTuple)); } - operatorFactories.add(new PageBufferOperatorFactory(outputOperatorId, pageBuffer)); + operatorFactories.add(new PageBufferOperatorFactory(outputOperatorId, planNodeId, pageBuffer)); return new DriverFactory(inputDriver, false, operatorFactories.build()); } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/index/IndexSourceOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/index/IndexSourceOperator.java index 1403857a748a..821dab1c9048 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/index/IndexSourceOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/index/IndexSourceOperator.java @@ -82,7 +82,7 @@ public List getTypes() public SourceOperator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, IndexSourceOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, sourceId, IndexSourceOperator.class.getSimpleName()); return new IndexSourceOperator( operatorContext, sourceId, diff --git a/presto-main/src/main/java/com/facebook/presto/operator/index/PageBufferOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/index/PageBufferOperator.java index d2ddd6b9a896..6a01814a5541 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/index/PageBufferOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/index/PageBufferOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; @@ -34,11 +35,13 @@ public static class PageBufferOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final PageBuffer pageBuffer; - public PageBufferOperatorFactory(int operatorId, PageBuffer pageBuffer) + public PageBufferOperatorFactory(int operatorId, PlanNodeId planNodeId, PageBuffer pageBuffer) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.pageBuffer = requireNonNull(pageBuffer, "pageBuffer is null"); } @@ -51,7 +54,7 @@ public List getTypes() @Override public Operator createOperator(DriverContext driverContext) { - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, PageBufferOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, PageBufferOperator.class.getSimpleName()); return new PageBufferOperator(operatorContext, pageBuffer); } @@ -63,7 +66,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new PageBufferOperatorFactory(operatorId, pageBuffer); + return new PageBufferOperatorFactory(operatorId, planNodeId, pageBuffer); } } diff --git a/presto-main/src/main/java/com/facebook/presto/operator/index/PagesIndexBuilderOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/index/PagesIndexBuilderOperator.java index ba303e83c0e9..fc607307315c 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/index/PagesIndexBuilderOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/index/PagesIndexBuilderOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import javax.annotation.concurrent.ThreadSafe; @@ -36,12 +37,14 @@ public static class PagesIndexBuilderOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final IndexSnapshotBuilder indexSnapshotBuilder; private boolean closed; - public PagesIndexBuilderOperatorFactory(int operatorId, IndexSnapshotBuilder indexSnapshotBuilder) + public PagesIndexBuilderOperatorFactory(int operatorId, PlanNodeId planNodeId, IndexSnapshotBuilder indexSnapshotBuilder) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.indexSnapshotBuilder = requireNonNull(indexSnapshotBuilder, "indexSnapshotBuilder is null"); } @@ -56,7 +59,7 @@ public Operator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, PagesIndexBuilderOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, PagesIndexBuilderOperator.class.getSimpleName()); return new PagesIndexBuilderOperator(operatorContext, indexSnapshotBuilder); } @@ -69,7 +72,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new PagesIndexBuilderOperatorFactory(operatorId, indexSnapshotBuilder); + return new PagesIndexBuilderOperatorFactory(operatorId, planNodeId, indexSnapshotBuilder); } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/gen/JoinProbeCompiler.java b/presto-main/src/main/java/com/facebook/presto/sql/gen/JoinProbeCompiler.java index 4c07e2635477..cd735480d016 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/gen/JoinProbeCompiler.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/gen/JoinProbeCompiler.java @@ -38,6 +38,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.BigintType; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Throwables; import com.google.common.cache.CacheBuilder; @@ -81,6 +82,7 @@ public HashJoinOperatorFactoryFactory load(JoinOperatorCacheKey key) }); public OperatorFactory compileJoinOperatorFactory(int operatorId, + PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, @@ -89,7 +91,7 @@ public OperatorFactory compileJoinOperatorFactory(int operatorId, { try { HashJoinOperatorFactoryFactory operatorFactoryFactory = joinProbeFactories.get(new JoinOperatorCacheKey(probeTypes, probeJoinChannel, probeHashChannel, joinType)); - return operatorFactoryFactory.createHashJoinOperatorFactory(operatorId, lookupSourceSupplier, probeTypes, probeJoinChannel, joinType); + return operatorFactoryFactory.createHashJoinOperatorFactory(operatorId, planNodeId, lookupSourceSupplier, probeTypes, probeJoinChannel, joinType); } catch (ExecutionException | UncheckedExecutionException | ExecutionError e) { throw Throwables.propagate(e.getCause()); @@ -486,7 +488,7 @@ private HashJoinOperatorFactoryFactory(JoinProbeFactory joinProbeFactory, Class< this.joinProbeFactory = joinProbeFactory; try { - constructor = operatorFactoryClass.getConstructor(int.class, LookupSourceSupplier.class, List.class, JoinType.class, JoinProbeFactory.class); + constructor = operatorFactoryClass.getConstructor(int.class, PlanNodeId.class, LookupSourceSupplier.class, List.class, JoinType.class, JoinProbeFactory.class); } catch (NoSuchMethodException e) { throw Throwables.propagate(e); @@ -495,13 +497,14 @@ private HashJoinOperatorFactoryFactory(JoinProbeFactory joinProbeFactory, Class< public OperatorFactory createHashJoinOperatorFactory( int operatorId, + PlanNodeId planNodeId, LookupSourceSupplier lookupSourceSupplier, List probeTypes, List probeJoinChannel, JoinType joinType) { try { - return constructor.newInstance(operatorId, lookupSourceSupplier, probeTypes, joinType, joinProbeFactory); + return constructor.newInstance(operatorId, planNodeId, lookupSourceSupplier, probeTypes, joinType, joinProbeFactory); } catch (Exception e) { throw Throwables.propagate(e); diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java index 10f308ad6a4e..6b7bce8f71e0 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java @@ -104,6 +104,7 @@ import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.OutputNode; import com.facebook.presto.sql.planner.plan.PlanNode; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.sql.planner.plan.PlanVisitor; import com.facebook.presto.sql.planner.plan.ProjectNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; @@ -305,14 +306,14 @@ public LocalExecutionPlan plan(Session session, { LocalExecutionPlanContext context = new LocalExecutionPlanContext(session, types, singleNode, allowLocalParallel); - PhysicalOperation physicalOperation = enforceLayout(outputLayout, context, plan.accept(new Visitor(session), context)); + PhysicalOperation physicalOperation = enforceLayout(plan.getId(), outputLayout, context, plan.accept(new Visitor(session), context)); DriverFactory driverFactory = new DriverFactory( context.isInputDriver(), true, ImmutableList.builder() .addAll(physicalOperation.getOperatorFactories()) - .add(outputOperatorFactory.createOutputOperator(context.getNextOperatorId(), physicalOperation.getTypes())) + .add(outputOperatorFactory.createOutputOperator(context.getNextOperatorId(), plan.getId(), physicalOperation.getTypes())) .build(), context.getDriverInstanceCount()); context.addDriverFactory(driverFactory); @@ -360,7 +361,7 @@ private static void addLookupOuterDrivers(LocalExecutionPlanContext context) } } - private PhysicalOperation enforceLayout(List outputLayout, LocalExecutionPlanContext context, PhysicalOperation physicalOperation) + private PhysicalOperation enforceLayout(PlanNodeId planNodeId, List outputLayout, LocalExecutionPlanContext context, PhysicalOperation physicalOperation) { // are the symbols of the source in the same order as the sink expects? boolean projectionMatchesOutput = physicalOperation.getLayout() @@ -376,6 +377,7 @@ private PhysicalOperation enforceLayout(List outputLayout, LocalExecutio OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory( context.getNextOperatorId(), + planNodeId, compiler.compilePageProcessor(trueExpression(), projections), projections.stream() .map(RowExpression::getType) @@ -584,6 +586,7 @@ public PhysicalOperation visitRowNumber(RowNumberNode node, LocalExecutionPlanCo Optional hashChannel = node.getHashSymbol().map(channelGetter(source)); OperatorFactory operatorFactory = new RowNumberOperator.RowNumberOperatorFactory( context.getNextOperatorId(), + node.getId(), source.getTypes(), outputChannels.build(), partitionChannels, @@ -629,6 +632,7 @@ public PhysicalOperation visitTopNRowNumber(TopNRowNumberNode node, LocalExecuti Optional hashChannel = node.getHashSymbol().map(channelGetter(source)); OperatorFactory operatorFactory = new TopNRowNumberOperator.TopNRowNumberOperatorFactory( context.getNextOperatorId(), + node.getId(), source.getTypes(), outputChannels.build(), partitionChannels, @@ -707,6 +711,7 @@ public PhysicalOperation visitWindow(WindowNode node, LocalExecutionPlanContext OperatorFactory operatorFactory = new WindowOperatorFactory( context.getNextOperatorId(), + node.getId(), source.getTypes(), outputChannels.build(), windowFunctions, @@ -737,6 +742,7 @@ public PhysicalOperation visitTopN(TopNNode node, LocalExecutionPlanContext cont OperatorFactory operator = new TopNOperatorFactory( context.getNextOperatorId(), + node.getId(), source.getTypes(), (int) node.getCount(), sortChannels, @@ -767,6 +773,7 @@ public PhysicalOperation visitSort(SortNode node, LocalExecutionPlanContext cont OperatorFactory operator = new OrderByOperatorFactory( context.getNextOperatorId(), + node.getId(), source.getTypes(), outputChannels.build(), 10_000, @@ -781,7 +788,7 @@ public PhysicalOperation visitLimit(LimitNode node, LocalExecutionPlanContext co { PhysicalOperation source = node.getSource().accept(this, context); - OperatorFactory operatorFactory = new LimitOperatorFactory(context.getNextOperatorId(), source.getTypes(), node.getCount()); + OperatorFactory operatorFactory = new LimitOperatorFactory(context.getNextOperatorId(), node.getId(), source.getTypes(), node.getCount()); return new PhysicalOperation(operatorFactory, source.getLayout(), source); } @@ -795,6 +802,7 @@ public PhysicalOperation visitDistinctLimit(DistinctLimitNode node, LocalExecuti OperatorFactory operatorFactory = new DistinctLimitOperatorFactory( context.getNextOperatorId(), + node.getId(), source.getTypes(), distinctChannels, node.getLimit(), @@ -818,11 +826,11 @@ public PhysicalOperation visitAggregation(AggregationNode node, LocalExecutionPl InMemoryExchange exchange = new InMemoryExchange(source.getTypes()); List factories = ImmutableList.builder() .addAll(source.getOperatorFactories()) - .add(exchange.createSinkFactory(intermediateContext.getNextOperatorId())) + .add(exchange.createSinkFactory(intermediateContext.getNextOperatorId(), node.getId())) .build(); context.addDriverFactory(new DriverFactory(intermediateContext.isInputDriver(), false, factories)); - OperatorFactory exchangeSource = createRandomDistribution(context.getNextOperatorId(), exchange); + OperatorFactory exchangeSource = createRandomDistribution(context.getNextOperatorId(), node.getId(), exchange); source = new PhysicalOperation(exchangeSource, source.getLayout()); return planGroupByAggregation(node, source, context.getNextOperatorId(), Optional.empty()); } @@ -850,17 +858,18 @@ public PhysicalOperation visitAggregation(AggregationNode node, LocalExecutionPl // finish source operator List factories = ImmutableList.builder() .addAll(source.getOperatorFactories()) - .add(exchange.createSinkFactory(sourceContext.getNextOperatorId())) + .add(exchange.createSinkFactory(sourceContext.getNextOperatorId(), node.getId())) .build(); parallelContext.addDriverFactory(new DriverFactory(sourceContext.isInputDriver(), false, factories)); // add broadcast exchange as first parallel operator - OperatorFactory exchangeSource = createBroadcastDistribution(parallelContext.getNextOperatorId(), exchange); + OperatorFactory exchangeSource = createBroadcastDistribution(parallelContext.getNextOperatorId(), node.getId(), exchange); source = new PhysicalOperation(exchangeSource, source.getLayout()); // mask each parallel driver to only see one partition of groups HashPartitionMaskOperatorFactory hashPartitionMask = new HashPartitionMaskOperatorFactory( parallelContext.getNextOperatorId(), + node.getId(), aggregationConcurrency, exchangeSource.getTypes(), getChannelsForSymbols(ImmutableList.copyOf(node.getMasks().values()), source.getLayout()), @@ -873,7 +882,7 @@ public PhysicalOperation visitAggregation(AggregationNode node, LocalExecutionPl PhysicalOperation operation = planGroupByAggregation(node, source, parallelContext.getNextOperatorId(), Optional.of(defaultMaskChannel)); // merge parallel tasks back into a single stream - operation = addInMemoryExchange(context, operation, parallelContext); + operation = addInMemoryExchange(context, node.getId(), operation, parallelContext); return operation; } @@ -885,7 +894,7 @@ public PhysicalOperation visitMarkDistinct(MarkDistinctNode node, LocalExecution List channels = getChannelsForSymbols(node.getDistinctSymbols(), source.getLayout()); Optional hashChannel = node.getHashSymbol().map(channelGetter(source)); - MarkDistinctOperatorFactory operator = new MarkDistinctOperatorFactory(context.getNextOperatorId(), source.getTypes(), channels, hashChannel); + MarkDistinctOperatorFactory operator = new MarkDistinctOperatorFactory(context.getNextOperatorId(), node.getId(), source.getTypes(), channels, hashChannel); return new PhysicalOperation(operator, makeLayout(node), source); } @@ -899,7 +908,7 @@ public PhysicalOperation visitSample(SampleNode node, LocalExecutionPlanContext if (node.getSampleType() == SampleNode.Type.POISSONIZED) { PhysicalOperation source = node.getSource().accept(this, context); - OperatorFactory operatorFactory = new SampleOperatorFactory(context.getNextOperatorId(), node.getSampleRatio(), node.isRescaled(), source.getTypes()); + OperatorFactory operatorFactory = new SampleOperatorFactory(context.getNextOperatorId(), node.getId(), node.getSampleRatio(), node.isRescaled(), source.getTypes()); checkState(node.getSampleWeightSymbol().isPresent(), "sample weight symbol missing"); return new PhysicalOperation(operatorFactory, makeLayout(node), source); } @@ -919,7 +928,7 @@ public PhysicalOperation visitFilter(FilterNode node, LocalExecutionPlanContext .map(Symbol::toQualifiedNameReference) .collect(toImmutableList()); - return visitScanFilterAndProject(context, sourceNode, filterExpression, projectionExpressions, outputSymbols); + return visitScanFilterAndProject(context, node.getId(), sourceNode, filterExpression, projectionExpressions, outputSymbols); } @Override @@ -941,11 +950,13 @@ public PhysicalOperation visitProject(ProjectNode node, LocalExecutionPlanContex List outputSymbols = node.getOutputSymbols(); - return visitScanFilterAndProject(context, sourceNode, filterExpression, projectionExpressions, outputSymbols); + return visitScanFilterAndProject(context, node.getId(), sourceNode, filterExpression, projectionExpressions, outputSymbols); } + // TODO: This should be refactored, so that there's an optimizer that merges scan-filter-project into a single PlanNode private PhysicalOperation visitScanFilterAndProject( LocalExecutionPlanContext context, + PlanNodeId planNodeId, PlanNode sourceNode, Expression filterExpression, List projectionExpressions, @@ -1020,6 +1031,7 @@ private PhysicalOperation visitScanFilterAndProject( SourceOperatorFactory operatorFactory = new ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory( context.getNextOperatorId(), + planNodeId, sourceNode.getId(), pageSourceProvider, cursorProcessor, @@ -1034,6 +1046,7 @@ private PhysicalOperation visitScanFilterAndProject( OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory( context.getNextOperatorId(), + planNodeId, processor, Lists.transform(rewrittenProjections, forMap(expressionTypes))); @@ -1081,6 +1094,7 @@ private PhysicalOperation visitScanFilterAndProject( if (columns != null) { OperatorFactory operatorFactory = new ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory( context.getNextOperatorId(), + planNodeId, sourceNode.getId(), pageSourceProvider, new GenericCursorProcessor(filterFunction, projectionFunctions), @@ -1093,6 +1107,7 @@ private PhysicalOperation visitScanFilterAndProject( else { OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory( context.getNextOperatorId(), + planNodeId, new GenericPageProcessor(filterFunction, projectionFunctions), toTypes(projectionFunctions)); return new PhysicalOperation(operatorFactory, outputMappings, source); @@ -1138,7 +1153,7 @@ public PhysicalOperation visitValues(ValuesNode node, LocalExecutionPlanContext } if (node.getRows().isEmpty()) { - OperatorFactory operatorFactory = new ValuesOperatorFactory(context.getNextOperatorId(), outputTypes, ImmutableList.of()); + OperatorFactory operatorFactory = new ValuesOperatorFactory(context.getNextOperatorId(), node.getId(), outputTypes, ImmutableList.of()); return new PhysicalOperation(operatorFactory, makeLayout(node)); } @@ -1158,7 +1173,7 @@ public PhysicalOperation visitValues(ValuesNode node, LocalExecutionPlanContext } } - OperatorFactory operatorFactory = new ValuesOperatorFactory(context.getNextOperatorId(), outputTypes, ImmutableList.of(pageBuilder.build())); + OperatorFactory operatorFactory = new ValuesOperatorFactory(context.getNextOperatorId(), node.getId(), outputTypes, ImmutableList.of(pageBuilder.build())); return new PhysicalOperation(operatorFactory, makeLayout(node)); } @@ -1202,6 +1217,7 @@ public PhysicalOperation visitUnnest(UnnestNode node, LocalExecutionPlanContext } OperatorFactory operatorFactory = new UnnestOperatorFactory( context.getNextOperatorId(), + node.getId(), replicateChannels, replicateTypes.build(), unnestChannels, @@ -1345,11 +1361,12 @@ public PhysicalOperation visitIndexJoin(IndexJoinNode node, LocalExecutionPlanCo .collect(toImmutableList())); int filterOperatorId = indexContext.getNextOperatorId(); - dynamicTupleFilterFactory = Optional.of(new DynamicTupleFilterFactory(filterOperatorId, nonLookupInputChannels, nonLookupOutputChannels, indexSource.getTypes())); + dynamicTupleFilterFactory = Optional.of(new DynamicTupleFilterFactory(filterOperatorId, node.getId(), nonLookupInputChannels, nonLookupOutputChannels, indexSource.getTypes())); } IndexBuildDriverFactoryProvider indexBuildDriverFactoryProvider = new IndexBuildDriverFactoryProvider( indexContext.getNextOperatorId(), + node.getId(), indexContext.isInputDriver(), indexSource.getOperatorFactories(), dynamicTupleFilterFactory); @@ -1378,10 +1395,10 @@ public PhysicalOperation visitIndexJoin(IndexJoinNode node, LocalExecutionPlanCo OperatorFactory lookupJoinOperatorFactory; switch (node.getType()) { case INNER: - lookupJoinOperatorFactory = LookupJoinOperators.innerJoin(context.getNextOperatorId(), indexLookupSourceSupplier, probeSource.getTypes(), probeChannels, probeHashChannel); + lookupJoinOperatorFactory = LookupJoinOperators.innerJoin(context.getNextOperatorId(), node.getId(), indexLookupSourceSupplier, probeSource.getTypes(), probeChannels, probeHashChannel); break; case SOURCE_OUTER: - lookupJoinOperatorFactory = LookupJoinOperators.probeOuterJoin(context.getNextOperatorId(), indexLookupSourceSupplier, probeSource.getTypes(), probeChannels, probeHashChannel); + lookupJoinOperatorFactory = LookupJoinOperators.probeOuterJoin(context.getNextOperatorId(), node.getId(), indexLookupSourceSupplier, probeSource.getTypes(), probeChannels, probeHashChannel); break; default: throw new AssertionError("Unknown type: " + node.getType()); @@ -1394,7 +1411,7 @@ public PhysicalOperation visitJoin(JoinNode node, LocalExecutionPlanContext cont { List clauses = node.getCriteria(); if (clauses.isEmpty()) { - return createNestedLoopJoin(node.getLeft(), node.getRight(), context); + return createNestedLoopJoin(node, context); } List leftSymbols = Lists.transform(clauses, JoinNode.EquiJoinClause::getLeft); @@ -1411,17 +1428,15 @@ public PhysicalOperation visitJoin(JoinNode node, LocalExecutionPlanContext cont } } - private PhysicalOperation createNestedLoopJoin( - PlanNode probeNode, - PlanNode buildNode, - LocalExecutionPlanContext context) + private PhysicalOperation createNestedLoopJoin(JoinNode node, LocalExecutionPlanContext context) { - PhysicalOperation probeSource = probeNode.accept(this, context); + PhysicalOperation probeSource = node.getLeft().accept(this, context); LocalExecutionPlanContext buildContext = context.createSubContext(); - PhysicalOperation buildSource = buildNode.accept(this, buildContext); + PhysicalOperation buildSource = node.getRight().accept(this, buildContext); NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory( buildContext.getNextOperatorId(), + node.getId(), buildSource.getTypes()); context.addDriverFactory(new DriverFactory( @@ -1443,7 +1458,7 @@ private PhysicalOperation createNestedLoopJoin( outputMappings.put(entry.getKey(), offset + entry.getValue()); } - OperatorFactory operatorFactory = new NestedLoopJoinOperatorFactory(context.getNextOperatorId(), nestedLoopJoinPagesSupplier, probeSource.getTypes()); + OperatorFactory operatorFactory = new NestedLoopJoinOperatorFactory(context.getNextOperatorId(), node.getId(), nestedLoopJoinPagesSupplier, probeSource.getTypes()); PhysicalOperation operation = new PhysicalOperation(operatorFactory, outputMappings.build(), probeSource); return operation; } @@ -1493,7 +1508,7 @@ else if (context.isSingleNode() && isBuildOuter(node)) { // merge parallel joiners (and outer) back into a single stream if (parallelParentContext != null) { - operation = addInMemoryExchange(parallelParentContext, operation, context); + operation = addInMemoryExchange(parallelParentContext, node.getId(), operation, context); } return operation; @@ -1521,6 +1536,7 @@ private LookupSourceSupplier createLookupJoinSource( if (isBuildOuter(node) || hashBuildConcurrency <= 1) { HashBuilderOperatorFactory hashBuilderOperatorFactory = new HashBuilderOperatorFactory( buildContext.getNextOperatorId(), + node.getId(), buildSource.getTypes(), buildChannels, buildHashChannel, @@ -1552,13 +1568,13 @@ private LookupSourceSupplier createLookupJoinSource( false, ImmutableList.builder() .addAll(buildSource.getOperatorFactories()) - .add(parallelHashBuilder.getCollectOperatorFactory(buildContext.getNextOperatorId())) + .add(parallelHashBuilder.getCollectOperatorFactory(buildContext.getNextOperatorId(), node.getId())) .build())); context.addDriverFactory(new DriverFactory( false, false, - ImmutableList.of(parallelHashBuilder.getBuildOperatorFactory()), + ImmutableList.of(parallelHashBuilder.getBuildOperatorFactory(node.getId())), parallelBuildCount)); lookupSourceSupplier = parallelHashBuilder.getLookupSourceSupplier(); @@ -1585,13 +1601,13 @@ private OperatorFactory createLookupJoin( switch (node.getType()) { case INNER: - return LookupJoinOperators.innerJoin(context.getNextOperatorId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); + return LookupJoinOperators.innerJoin(context.getNextOperatorId(), node.getId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); case LEFT: - return LookupJoinOperators.probeOuterJoin(context.getNextOperatorId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); + return LookupJoinOperators.probeOuterJoin(context.getNextOperatorId(), node.getId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); case RIGHT: - return LookupJoinOperators.lookupOuterJoin(context.getNextOperatorId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); + return LookupJoinOperators.lookupOuterJoin(context.getNextOperatorId(), node.getId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); case FULL: - return LookupJoinOperators.fullOuterJoin(context.getNextOperatorId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); + return LookupJoinOperators.fullOuterJoin(context.getNextOperatorId(), node.getId(), lookupSourceSupplier, probeTypes, probeJoinChannels, probeHashChannel); default: throw new UnsupportedOperationException("Unsupported join type: " + node.getType()); } @@ -1625,6 +1641,7 @@ public PhysicalOperation visitSemiJoin(SemiJoinNode node, LocalExecutionPlanCont SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory( buildContext.getNextOperatorId(), + node.getId(), buildSource.getTypes().get(buildChannel), buildChannel, buildHashChannel, @@ -1645,12 +1662,12 @@ public PhysicalOperation visitSemiJoin(SemiJoinNode node, LocalExecutionPlanCont .put(node.getSemiJoinOutput(), probeSource.getLayout().size()) .build(); - HashSemiJoinOperatorFactory operator = new HashSemiJoinOperatorFactory(context.getNextOperatorId(), setProvider, probeSource.getTypes(), probeChannel); + HashSemiJoinOperatorFactory operator = new HashSemiJoinOperatorFactory(context.getNextOperatorId(), node.getId(), setProvider, probeSource.getTypes(), probeChannel); PhysicalOperation operation = new PhysicalOperation(operator, outputMappings, probeSource); // merge parallel joiners back into a single stream if (parallelParentContext != null) { - operation = addInMemoryExchange(parallelParentContext, operation, context); + operation = addInMemoryExchange(parallelParentContext, node.getId(), operation, context); } return operation; @@ -1671,7 +1688,7 @@ public PhysicalOperation visitTableWriter(TableWriterNode node, LocalExecutionPl .map(exchange::symbolToChannel) .collect(toImmutableList()); - OperatorFactory operatorFactory = new TableWriterOperatorFactory(context.getNextOperatorId(), pageSinkManager, node.getTarget(), inputChannels, sampleWeightChannel, + OperatorFactory operatorFactory = new TableWriterOperatorFactory(context.getNextOperatorId(), node.getId(), pageSinkManager, node.getTarget(), inputChannels, sampleWeightChannel, session); Map layout = ImmutableMap.builder() @@ -1687,17 +1704,17 @@ private PhysicalOperation createInMemoryExchange(PlanNode node, LocalExecutionPl LocalExecutionPlanContext subContext = context.createSubContext(); PhysicalOperation source = node.accept(this, subContext); - return addInMemoryExchange(context, source, subContext); + return addInMemoryExchange(context, node.getId(), source, subContext); } - private PhysicalOperation addInMemoryExchange(LocalExecutionPlanContext context, PhysicalOperation source, LocalExecutionPlanContext sourceContext) + private PhysicalOperation addInMemoryExchange(LocalExecutionPlanContext context, PlanNodeId planNodeId, PhysicalOperation source, LocalExecutionPlanContext sourceContext) { InMemoryExchange exchange = new InMemoryExchange(source.getTypes()); // create exchange sink List factories = ImmutableList.builder() .addAll(source.getOperatorFactories()) - .add(exchange.createSinkFactory(sourceContext.getNextOperatorId())) + .add(exchange.createSinkFactory(sourceContext.getNextOperatorId(), planNodeId)) .build(); // add sub-context to current context @@ -1707,7 +1724,7 @@ private PhysicalOperation addInMemoryExchange(LocalExecutionPlanContext context, context.setInputDriver(false); // add exchange source as first operator in the current context - OperatorFactory factory = createRandomDistribution(context.getNextOperatorId(), exchange); + OperatorFactory factory = createRandomDistribution(context.getNextOperatorId(), planNodeId, exchange); return new PhysicalOperation(factory, source.getLayout()); } @@ -1716,7 +1733,7 @@ public PhysicalOperation visitTableFinish(TableFinishNode node, LocalExecutionPl { PhysicalOperation source = node.getSource().accept(this, context); - OperatorFactory operatorFactory = new TableFinishOperatorFactory(context.getNextOperatorId(), createTableFinisher(session, node, metadata)); + OperatorFactory operatorFactory = new TableFinishOperatorFactory(context.getNextOperatorId(), node.getId(), createTableFinisher(session, node, metadata)); Map layout = ImmutableMap.of(node.getOutputSymbols().get(0), 0); return new PhysicalOperation(operatorFactory, layout, source); @@ -1727,7 +1744,7 @@ public PhysicalOperation visitDelete(DeleteNode node, LocalExecutionPlanContext { PhysicalOperation source = node.getSource().accept(this, context); - OperatorFactory operatorFactory = new DeleteOperatorFactory(context.getNextOperatorId(), source.getLayout().get(node.getRowId())); + OperatorFactory operatorFactory = new DeleteOperatorFactory(context.getNextOperatorId(), node.getId(), source.getLayout().get(node.getRowId())); Map layout = ImmutableMap.builder() .put(node.getOutputSymbols().get(0), 0) @@ -1740,7 +1757,7 @@ public PhysicalOperation visitDelete(DeleteNode node, LocalExecutionPlanContext @Override public PhysicalOperation visitMetadataDelete(MetadataDeleteNode node, LocalExecutionPlanContext context) { - OperatorFactory operatorFactory = new MetadataDeleteOperatorFactory(context.getNextOperatorId(), node.getTableLayout(), metadata, session, node.getTarget().getHandle()); + OperatorFactory operatorFactory = new MetadataDeleteOperatorFactory(context.getNextOperatorId(), node.getId(), node.getTableLayout(), metadata, session, node.getTarget().getHandle()); return new PhysicalOperation(operatorFactory, makeLayout(node)); } @@ -1771,6 +1788,7 @@ public PhysicalOperation visitUnion(UnionNode node, LocalExecutionPlanContext co List projections = projectionInfo.getProjections(); OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory( subContext.getNextOperatorId(), + node.getId(), compiler.compilePageProcessor(trueExpression(), projections), projections.stream() .map(RowExpression::getType) @@ -1778,7 +1796,7 @@ public PhysicalOperation visitUnion(UnionNode node, LocalExecutionPlanContext co operatorFactories.add(operatorFactory); } - operatorFactories.add(inMemoryExchange.createSinkFactory(subContext.getNextOperatorId())); + operatorFactories.add(inMemoryExchange.createSinkFactory(subContext.getNextOperatorId(), node.getId())); DriverFactory driverFactory = new DriverFactory(subContext.isInputDriver(), false, operatorFactories); context.addDriverFactory(driverFactory); @@ -1787,7 +1805,7 @@ public PhysicalOperation visitUnion(UnionNode node, LocalExecutionPlanContext co // the main driver is not an input... the union sources are the input for the plan context.setInputDriver(false); - return new PhysicalOperation(createRandomDistribution(context.getNextOperatorId(), inMemoryExchange), makeLayout(node)); + return new PhysicalOperation(createRandomDistribution(context.getNextOperatorId(), node.getId(), inMemoryExchange), makeLayout(node)); } @Override @@ -1798,7 +1816,7 @@ public PhysicalOperation visitEnforceSingleRow(EnforceSingleRowNode node, LocalE Symbol symbol = getOnlyElement(node.getOutputSymbols()); Type type = requireNonNull(context.getTypes().get(symbol), format("No type for symbol %s", symbol)); - OperatorFactory operatorFactory = new EnforceSingleRowOperator.EnforceSingleRowOperatorFactory(context.getNextOperatorId(), type); + OperatorFactory operatorFactory = new EnforceSingleRowOperator.EnforceSingleRowOperatorFactory(context.getNextOperatorId(), node.getId(), type); return new PhysicalOperation(operatorFactory, makeLayout(node), source); } @@ -1868,7 +1886,7 @@ private PhysicalOperation planGlobalAggregation(int operatorId, AggregationNode outputChannel++; } - OperatorFactory operatorFactory = new AggregationOperatorFactory(operatorId, node.getStep(), accumulatorFactories); + OperatorFactory operatorFactory = new AggregationOperatorFactory(operatorId, node.getId(), node.getStep(), accumulatorFactories); return new PhysicalOperation(operatorFactory, outputMappings.build(), source); } @@ -1913,6 +1931,7 @@ private PhysicalOperation planGroupByAggregation(AggregationNode node, PhysicalO OperatorFactory operatorFactory = new HashAggregationOperatorFactory( operatorId, + node.getId(), groupByTypes, groupByChannels, node.getStep(), diff --git a/presto-main/src/main/java/com/facebook/presto/testing/LocalQueryRunner.java b/presto-main/src/main/java/com/facebook/presto/testing/LocalQueryRunner.java index 2c4003fe4b14..3f2c7148561e 100644 --- a/presto-main/src/main/java/com/facebook/presto/testing/LocalQueryRunner.java +++ b/presto-main/src/main/java/com/facebook/presto/testing/LocalQueryRunner.java @@ -367,7 +367,7 @@ public MaterializedResult getMaterializedResult() } @Override - public OperatorFactory createOutputOperator(int operatorId, List sourceTypes) + public OperatorFactory createOutputOperator(int operatorId, PlanNodeId planNodeId, List sourceTypes) { requireNonNull(sourceTypes, "sourceType is null"); @@ -387,7 +387,7 @@ public Operator createOperator(DriverContext driverContext) materializedResultBuilder.compareAndSet(null, MaterializedResult.resultBuilder(driverContext.getSession(), sourceTypes)); resultBuilder = materializedResultBuilder.get(); } - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, MaterializingOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, MaterializingOperator.class.getSimpleName()); return new MaterializingOperator(operatorContext, resultBuilder); } @@ -399,7 +399,7 @@ public void close() @Override public OperatorFactory duplicate() { - return createOutputOperator(operatorId, sourceTypes); + return createOutputOperator(operatorId, planNodeId, sourceTypes); } }; } @@ -592,14 +592,15 @@ public List createDrivers(Session session, @Language("SQL") String sql, return ImmutableList.copyOf(drivers); } - public OperatorFactory createTableScanOperator(int operatorId, String tableName, String... columnNames) + public OperatorFactory createTableScanOperator(int operatorId, PlanNodeId planNodeId, String tableName, String... columnNames) { - return createTableScanOperator(defaultSession, operatorId, tableName, columnNames); + return createTableScanOperator(defaultSession, operatorId, planNodeId, tableName, columnNames); } public OperatorFactory createTableScanOperator( Session session, int operatorId, + PlanNodeId planNodeId, String tableName, String... columnNames) { @@ -640,7 +641,7 @@ public List getTypes() @Override public Operator createOperator(DriverContext driverContext) { - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, "BenchmarkSource"); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, "BenchmarkSource"); ConnectorPageSource pageSource = pageSourceManager.createPageSource(session, split, columnHandles); return new PageSourceOperator(pageSource, columnTypes, operatorContext); } @@ -658,7 +659,7 @@ public OperatorFactory duplicate() }; } - public OperatorFactory createHashProjectOperator(int operatorId, List columnTypes) + public OperatorFactory createHashProjectOperator(int operatorId, PlanNodeId planNodeId, List columnTypes) { ImmutableList.Builder projectionFunctions = ImmutableList.builder(); for (int i = 0; i < columnTypes.size(); i++) { @@ -667,6 +668,7 @@ public OperatorFactory createHashProjectOperator(int operatorId, List colu projectionFunctions.add(new HashProjectionFunction(columnTypes)); return new FilterAndProjectOperator.FilterAndProjectOperatorFactory( operatorId, + planNodeId, new GenericPageProcessor(FilterFunctions.TRUE_FUNCTION, projectionFunctions.build()), ImmutableList.copyOf(Iterables.concat(columnTypes, ImmutableList.of(BIGINT)))); } diff --git a/presto-main/src/main/java/com/facebook/presto/testing/MaterializingOperator.java b/presto-main/src/main/java/com/facebook/presto/testing/MaterializingOperator.java index 07378df93870..1d360c75d7f0 100644 --- a/presto-main/src/main/java/com/facebook/presto/testing/MaterializingOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/testing/MaterializingOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.operator.OperatorFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -33,12 +34,14 @@ public static class MaterializingOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List sourceTypes; private boolean closed; - public MaterializingOperatorFactory(int operatorId, List sourceTypes) + public MaterializingOperatorFactory(int operatorId, PlanNodeId planNodeId, List sourceTypes) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.sourceTypes = sourceTypes; } @@ -52,7 +55,7 @@ public List getTypes() public MaterializingOperator createOperator(DriverContext driverContext) { checkState(!closed, "Factory is already closed"); - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, MaterializingOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, MaterializingOperator.class.getSimpleName()); return new MaterializingOperator(operatorContext, sourceTypes); } @@ -65,7 +68,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new MaterializingOperatorFactory(operatorId, sourceTypes); + return new MaterializingOperatorFactory(operatorId, planNodeId, sourceTypes); } } diff --git a/presto-main/src/main/java/com/facebook/presto/testing/NullOutputOperator.java b/presto-main/src/main/java/com/facebook/presto/testing/NullOutputOperator.java index 7b34fb0ffb77..928c85aa386e 100644 --- a/presto-main/src/main/java/com/facebook/presto/testing/NullOutputOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/testing/NullOutputOperator.java @@ -20,6 +20,7 @@ import com.facebook.presto.operator.OutputFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import java.util.List; @@ -33,9 +34,9 @@ public static class NullOutputFactory implements OutputFactory { @Override - public OperatorFactory createOutputOperator(int operatorId, List sourceTypes) + public OperatorFactory createOutputOperator(int operatorId, PlanNodeId planNodeId, List sourceTypes) { - return new NullOutputOperatorFactory(operatorId, sourceTypes); + return new NullOutputOperatorFactory(operatorId, planNodeId, sourceTypes); } } @@ -43,11 +44,13 @@ public static class NullOutputOperatorFactory implements OperatorFactory { private final int operatorId; + private final PlanNodeId planNodeId; private final List types; - public NullOutputOperatorFactory(int operatorId, List types) + public NullOutputOperatorFactory(int operatorId, PlanNodeId planNodeId, List types) { this.operatorId = operatorId; + this.planNodeId = requireNonNull(planNodeId, "planNodeId is null"); this.types = types; } @@ -60,7 +63,7 @@ public List getTypes() @Override public Operator createOperator(DriverContext driverContext) { - OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, NullOutputOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(operatorId, planNodeId, NullOutputOperator.class.getSimpleName()); return new NullOutputOperator(operatorContext, types); } @@ -72,7 +75,7 @@ public void close() @Override public OperatorFactory duplicate() { - return new NullOutputOperatorFactory(operatorId, types); + return new NullOutputOperatorFactory(operatorId, planNodeId, types); } } diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestAggregationOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestAggregationOperator.java index da9bf4186ae1..0d714db437ff 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestAggregationOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestAggregationOperator.java @@ -20,6 +20,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.StandardTypes; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import org.testng.annotations.AfterMethod; @@ -81,6 +82,7 @@ public void testAggregation() OperatorFactory operatorFactory = new AggregationOperatorFactory( 0, + new PlanNodeId("test"), Step.SINGLE, ImmutableList.of(COUNT.bind(ImmutableList.of(0), Optional.empty(), Optional.empty(), 1.0), LONG_SUM.bind(ImmutableList.of(1), Optional.empty(), Optional.empty(), 1.0), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestDistinctLimitOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestDistinctLimitOperator.java index c78b5ae870ff..cb1435e89d6e 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestDistinctLimitOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestDistinctLimitOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.RowPagesBuilder; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -71,7 +72,7 @@ public void testDistinctLimit(boolean hashEnabled) .addSequencePage(5, 2) .build(); - OperatorFactory operatorFactory = new DistinctLimitOperator.DistinctLimitOperatorFactory(0, ImmutableList.of(BIGINT), Ints.asList(0), 5, rowPagesBuilder.getHashChannel()); + OperatorFactory operatorFactory = new DistinctLimitOperator.DistinctLimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), Ints.asList(0), 5, rowPagesBuilder.getHashChannel()); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT) @@ -95,7 +96,7 @@ public void testDistinctLimitWithPageAlignment(boolean hashEnabled) .addSequencePage(3, 2) .build(); - OperatorFactory operatorFactory = new DistinctLimitOperator.DistinctLimitOperatorFactory(0, ImmutableList.of(BIGINT), Ints.asList(0), 3, rowPagesBuilder.getHashChannel()); + OperatorFactory operatorFactory = new DistinctLimitOperator.DistinctLimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), Ints.asList(0), 3, rowPagesBuilder.getHashChannel()); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT) @@ -117,7 +118,7 @@ public void testDistinctLimitValuesLessThanLimit(boolean hashEnabled) .addSequencePage(3, 2) .build(); - OperatorFactory operatorFactory = new DistinctLimitOperator.DistinctLimitOperatorFactory(0, ImmutableList.of(BIGINT), Ints.asList(0), 5, rowPagesBuilder.getHashChannel()); + OperatorFactory operatorFactory = new DistinctLimitOperator.DistinctLimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), Ints.asList(0), 5, rowPagesBuilder.getHashChannel()); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT) diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java b/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java index 41944d52ccb4..b625a707b433 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java @@ -88,7 +88,7 @@ public void tearDown() public void testNormalFinish() { List types = ImmutableList.of(VARCHAR, BIGINT, BIGINT); - ValuesOperator source = new ValuesOperator(driverContext.addOperatorContext(0, "values"), types, rowPagesBuilder(types) + ValuesOperator source = new ValuesOperator(driverContext.addOperatorContext(0, new PlanNodeId("test"), "values"), types, rowPagesBuilder(types) .addSequencePage(10, 20, 30, 40) .build()); @@ -110,7 +110,7 @@ public void testNormalFinish() public void testAbruptFinish() { List types = ImmutableList.of(VARCHAR, BIGINT, BIGINT); - ValuesOperator source = new ValuesOperator(driverContext.addOperatorContext(0, "values"), types, rowPagesBuilder(types) + ValuesOperator source = new ValuesOperator(driverContext.addOperatorContext(0, new PlanNodeId("test"), "values"), types, rowPagesBuilder(types) .addSequencePage(10, 20, 30, 40) .build()); @@ -136,7 +136,7 @@ public void testAddSourceFinish() { PlanNodeId sourceId = new PlanNodeId("source"); final List types = ImmutableList.of(VARCHAR, BIGINT, BIGINT); - TableScanOperator source = new TableScanOperator(driverContext.addOperatorContext(99, "values"), + TableScanOperator source = new TableScanOperator(driverContext.addOperatorContext(99, new PlanNodeId("test"), "values"), sourceId, new PageSourceProvider() { @@ -174,7 +174,7 @@ public ConnectorPageSource createPageSource(Session session, Split split, List types = ImmutableList.of(VARCHAR, BIGINT, BIGINT); // create a table scan operator that does not block, which will cause the driver loop to busy wait - TableScanOperator source = new NotBlockedTableScanOperator(driverContext.addOperatorContext(99, "values"), + TableScanOperator source = new NotBlockedTableScanOperator(driverContext.addOperatorContext(99, new PlanNodeId("test"), "values"), sourceId, new PageSourceProvider() { @@ -255,7 +255,7 @@ public ConnectorPageSource createPageSource(Session session, Split split, Listof()); - BrokenOperator brokenOperator = new BrokenOperator(driverContext.addOperatorContext(0, "source")); + BrokenOperator brokenOperator = new BrokenOperator(driverContext.addOperatorContext(0, new PlanNodeId("test"), "source")); final Driver driver = new Driver(driverContext, source, brokenOperator); // block thread in operator processing @@ -303,7 +303,7 @@ private static Split newMockSplit() private MaterializingOperator createSinkOperator(Operator source) { - return new MaterializingOperator(driverContext.addOperatorContext(1, "sink"), source.getTypes()); + return new MaterializingOperator(driverContext.addOperatorContext(1, new PlanNodeId("test"), "sink"), source.getTypes()); } private static class BrokenOperator diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestFilterAndProjectOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestFilterAndProjectOperator.java index c8ffdf2e0a85..997cbbbf6e72 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestFilterAndProjectOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestFilterAndProjectOperator.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.block.Block; import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -87,6 +88,7 @@ public boolean filter(RecordCursor cursor) }; OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory( 0, + new PlanNodeId("test"), new GenericPageProcessor(filter, ImmutableList.of(singleColumn(VARCHAR, 0), new Add5Projection(1))), ImmutableList.of(VARCHAR, BIGINT)); diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestHashAggregationOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestHashAggregationOperator.java index 483b00d98a5e..bfb0d9dc7f15 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestHashAggregationOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestHashAggregationOperator.java @@ -26,6 +26,7 @@ import com.facebook.presto.spi.type.StandardTypes; import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.planner.plan.AggregationNode.Step; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -116,6 +117,7 @@ public void testHashAggregation(boolean hashEnabled) HashAggregationOperatorFactory operatorFactory = new HashAggregationOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(VARCHAR), hashChannels, Step.SINGLE, @@ -168,6 +170,7 @@ public void testMemoryLimit(boolean hashEnabled) HashAggregationOperatorFactory operatorFactory = new HashAggregationOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(VARCHAR), hashChannels, Step.SINGLE, @@ -206,6 +209,7 @@ public void testHashBuilderResize(boolean hashEnabled) HashAggregationOperatorFactory operatorFactory = new HashAggregationOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(VARCHAR), hashChannels, Step.SINGLE, @@ -241,6 +245,7 @@ public void testHashBuilderResizeLimit(boolean hashEnabled) HashAggregationOperatorFactory operatorFactory = new HashAggregationOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(VARCHAR), hashChannels, Step.SINGLE, @@ -271,6 +276,7 @@ public void testMultiSliceAggregationOutput(boolean hashEnabled) HashAggregationOperatorFactory operatorFactory = new HashAggregationOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT), hashChannels, Step.SINGLE, @@ -301,6 +307,7 @@ public void testMultiplePartialFlushes(boolean hashEnabled) HashAggregationOperatorFactory operatorFactory = new HashAggregationOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT), hashChannels, Step.PARTIAL, diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestHashJoinOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestHashJoinOperator.java index 4b87b91eeb90..7c0b47aa4178 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestHashJoinOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestHashJoinOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.operator.ValuesOperator.ValuesOperatorFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.testing.TestingTaskContext; import com.google.common.collect.ImmutableList; @@ -93,6 +94,7 @@ public void testInnerJoin(boolean parallelBuild, boolean probeHashEnabled, boole .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.innerJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -143,6 +145,7 @@ public void testInnerJoinWithNullProbe(boolean parallelBuild, boolean probeHashE .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.innerJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -185,6 +188,7 @@ public void testInnerJoinWithNullBuild(boolean parallelBuild, boolean probeHashE .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.innerJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -228,6 +232,7 @@ public void testInnerJoinWithNullOnBothSides(boolean parallelBuild, boolean prob .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.innerJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -264,6 +269,7 @@ public void testProbeOuterJoin(boolean parallelBuild, boolean probeHashEnabled, .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.probeOuterJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -319,6 +325,7 @@ public void testOuterJoinWithNullProbe(boolean parallelBuild, boolean probeHashE .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.probeOuterJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -363,6 +370,7 @@ public void testOuterJoinWithNullBuild(boolean parallelBuild, boolean probeHashE .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.probeOuterJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -406,6 +414,7 @@ public void testOuterJoinWithNullOnBothSides(boolean parallelBuild, boolean prob .build(); OperatorFactory joinOperatorFactory = LookupJoinOperators.probeOuterJoin( 0, + new PlanNodeId("test"), lookupSourceSupplier, probePages.getTypes(), Ints.asList(0), @@ -459,8 +468,8 @@ private static LookupSourceSupplier buildHash(boolean parallelBuild, TaskContext // collect input data DriverContext collectDriverContext = taskContext.addPipelineContext(true, true).addDriverContext(); - ValuesOperatorFactory valuesOperatorFactory = new ValuesOperatorFactory(0, buildPages.getTypes(), buildPages.build()); - OperatorFactory collectOperatorFactory = parallelHashBuilder.getCollectOperatorFactory(1); + ValuesOperatorFactory valuesOperatorFactory = new ValuesOperatorFactory(0, new PlanNodeId("test"), buildPages.getTypes(), buildPages.build()); + OperatorFactory collectOperatorFactory = parallelHashBuilder.getCollectOperatorFactory(1, new PlanNodeId("test")); Driver driver = new Driver(collectDriverContext, valuesOperatorFactory.createOperator(collectDriverContext), collectOperatorFactory.createOperator(collectDriverContext)); @@ -471,7 +480,7 @@ private static LookupSourceSupplier buildHash(boolean parallelBuild, TaskContext // build hash tables PipelineContext buildPipeline = taskContext.addPipelineContext(true, true); - OperatorFactory buildOperatorFactory = parallelHashBuilder.getBuildOperatorFactory(); + OperatorFactory buildOperatorFactory = parallelHashBuilder.getBuildOperatorFactory(new PlanNodeId("test")); for (int i = 0; i < PARTITION_COUNT; i++) { DriverContext buildDriverContext = buildPipeline.addDriverContext(); Driver buildDriver = new Driver(buildDriverContext, @@ -487,8 +496,8 @@ private static LookupSourceSupplier buildHash(boolean parallelBuild, TaskContext else { DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); - ValuesOperatorFactory valuesOperatorFactory = new ValuesOperatorFactory(0, buildPages.getTypes(), buildPages.build()); - HashBuilderOperatorFactory hashBuilderOperatorFactory = new HashBuilderOperatorFactory(1, buildPages.getTypes(), hashChannels, buildPages.getHashChannel(), 100); + ValuesOperatorFactory valuesOperatorFactory = new ValuesOperatorFactory(0, new PlanNodeId("test"), buildPages.getTypes(), buildPages.build()); + HashBuilderOperatorFactory hashBuilderOperatorFactory = new HashBuilderOperatorFactory(1, new PlanNodeId("test"), buildPages.getTypes(), hashChannels, buildPages.getHashChannel(), 100); Driver driver = new Driver(driverContext, valuesOperatorFactory.createOperator(driverContext), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestHashPartitionMaskOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestHashPartitionMaskOperator.java index bd6e4249f451..9bd943ec314d 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestHashPartitionMaskOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestHashPartitionMaskOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.RowPagesBuilder; import com.facebook.presto.operator.HashPartitionMaskOperator.HashPartitionMaskOperatorFactory; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.type.BigintOperators; import com.google.common.collect.ImmutableList; @@ -79,6 +80,7 @@ public void testHashPartitionMask(boolean hashEnabled) OperatorFactory operatorFactory = new HashPartitionMaskOperatorFactory( 0, + new PlanNodeId("test"), PARTITION_COUNT, rowPagesBuilder.getTypes(), ImmutableList.of(), @@ -122,6 +124,7 @@ public void testHashPartitionMaskWithMask(boolean hashEnabled) OperatorFactory operatorFactory = new HashPartitionMaskOperatorFactory( 0, + new PlanNodeId("test"), PARTITION_COUNT, rowPagesBuilder.getTypes(), ImmutableList.of(1, 2), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestHashSemiJoinOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestHashSemiJoinOperator.java index d3c9411af8f6..e908a515550b 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestHashSemiJoinOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestHashSemiJoinOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.operator.SetBuilderOperator.SetBuilderOperatorFactory; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -74,7 +75,7 @@ public void testSemiJoin(boolean hashEnabled) DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); // build - OperatorContext operatorContext = driverContext.addOperatorContext(0, ValuesOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), ValuesOperator.class.getSimpleName()); RowPagesBuilder rowPagesBuilder = rowPagesBuilder(hashEnabled, Ints.asList(0), BIGINT); Operator buildOperator = new ValuesOperator(operatorContext, rowPagesBuilder.getTypes(), rowPagesBuilder .row(10) @@ -85,7 +86,7 @@ public void testSemiJoin(boolean hashEnabled) .row(37) .row(50) .build()); - SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); + SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, new PlanNodeId("test"), buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); Operator setBuilderOperator = setBuilderOperatorFactory.createOperator(driverContext); Driver driver = new Driver(driverContext, buildOperator, setBuilderOperator); @@ -101,6 +102,7 @@ public void testSemiJoin(boolean hashEnabled) .build(); HashSemiJoinOperatorFactory joinOperatorFactory = new HashSemiJoinOperatorFactory( 2, + new PlanNodeId("test"), setBuilderOperatorFactory.getSetProvider(), rowPagesBuilderProbe.getTypes(), 0); @@ -130,7 +132,7 @@ public void testBuildSideNulls(boolean hashEnabled) DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); // build - OperatorContext operatorContext = driverContext.addOperatorContext(0, ValuesOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), ValuesOperator.class.getSimpleName()); List buildTypes = ImmutableList.of(BIGINT); RowPagesBuilder rowPagesBuilder = rowPagesBuilder(hashEnabled, Ints.asList(0), buildTypes); Operator buildOperator = new ValuesOperator(operatorContext, buildTypes, rowPagesBuilder @@ -141,7 +143,7 @@ public void testBuildSideNulls(boolean hashEnabled) .row(3) .row((Object) null) .build()); - SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); + SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, new PlanNodeId("test"), buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); Operator setBuilderOperator = setBuilderOperatorFactory.createOperator(driverContext); Driver driver = new Driver(driverContext, buildOperator, setBuilderOperator); @@ -157,6 +159,7 @@ public void testBuildSideNulls(boolean hashEnabled) .build(); HashSemiJoinOperatorFactory joinOperatorFactory = new HashSemiJoinOperatorFactory( 2, + new PlanNodeId("test"), setBuilderOperatorFactory.getSetProvider(), rowPagesBuilderProbe.getTypes(), 0); @@ -180,7 +183,7 @@ public void testProbeSideNulls(boolean hashEnabled) DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); // build - OperatorContext operatorContext = driverContext.addOperatorContext(0, ValuesOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), ValuesOperator.class.getSimpleName()); List buildTypes = ImmutableList.of(BIGINT); RowPagesBuilder rowPagesBuilder = rowPagesBuilder(hashEnabled, Ints.asList(0), buildTypes); Operator buildOperator = new ValuesOperator(operatorContext, buildTypes, rowPagesBuilder @@ -188,7 +191,7 @@ public void testProbeSideNulls(boolean hashEnabled) .row(1) .row(3) .build()); - SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); + SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, new PlanNodeId("test"), buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); Operator setBuilderOperator = setBuilderOperatorFactory.createOperator(driverContext); Driver driver = new Driver(driverContext, buildOperator, setBuilderOperator); @@ -207,6 +210,7 @@ public void testProbeSideNulls(boolean hashEnabled) .build(); HashSemiJoinOperatorFactory joinOperatorFactory = new HashSemiJoinOperatorFactory( 2, + new PlanNodeId("test"), setBuilderOperatorFactory.getSetProvider(), rowPagesBuilderProbe.getTypes(), 0); @@ -230,7 +234,7 @@ public void testProbeAndBuildNulls(boolean hashEnabled) DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); // build - OperatorContext operatorContext = driverContext.addOperatorContext(0, ValuesOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), ValuesOperator.class.getSimpleName()); List buildTypes = ImmutableList.of(BIGINT); RowPagesBuilder rowPagesBuilder = rowPagesBuilder(hashEnabled, Ints.asList(0), buildTypes); Operator buildOperator = new ValuesOperator(operatorContext, buildTypes, rowPagesBuilder @@ -239,7 +243,7 @@ public void testProbeAndBuildNulls(boolean hashEnabled) .row((Object) null) .row(3) .build()); - SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); + SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, new PlanNodeId("test"), buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); Operator setBuilderOperator = setBuilderOperatorFactory.createOperator(driverContext); Driver driver = new Driver(driverContext, buildOperator, setBuilderOperator); @@ -258,6 +262,7 @@ public void testProbeAndBuildNulls(boolean hashEnabled) .build(); HashSemiJoinOperatorFactory joinOperatorFactory = new HashSemiJoinOperatorFactory( 2, + new PlanNodeId("test"), setBuilderOperatorFactory.getSetProvider(), rowPagesBuilderProbe.getTypes(), 0); @@ -282,13 +287,13 @@ public void testMemoryLimit(boolean hashEnabled) .addPipelineContext(true, true) .addDriverContext(); - OperatorContext operatorContext = driverContext.addOperatorContext(0, ValuesOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), ValuesOperator.class.getSimpleName()); List buildTypes = ImmutableList.of(BIGINT); RowPagesBuilder rowPagesBuilder = rowPagesBuilder(hashEnabled, Ints.asList(0), buildTypes); Operator buildOperator = new ValuesOperator(operatorContext, buildTypes, rowPagesBuilder .addSequencePage(10000, 20) .build()); - SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); + SetBuilderOperatorFactory setBuilderOperatorFactory = new SetBuilderOperatorFactory(1, new PlanNodeId("test"), buildOperator.getTypes().get(0), 0, rowPagesBuilder.getHashChannel(), 10); Operator setBuilderOperator = setBuilderOperatorFactory.createOperator(driverContext); Driver driver = new Driver(driverContext, buildOperator, setBuilderOperator); diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestLimitOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestLimitOperator.java index 0f56f821aeb9..fe7228805807 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestLimitOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestLimitOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.operator.LimitOperator.LimitOperatorFactory; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; @@ -61,7 +62,7 @@ public void testLimitWithPageAlignment() .addSequencePage(2, 6) .build(); - OperatorFactory operatorFactory = new LimitOperatorFactory(0, ImmutableList.of(BIGINT), 5); + OperatorFactory operatorFactory = new LimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), 5); Operator operator = operatorFactory.createOperator(driverContext); List expected = rowPagesBuilder(BIGINT) @@ -82,7 +83,7 @@ public void testLimitWithBlockView() .addSequencePage(2, 6) .build(); - OperatorFactory operatorFactory = new LimitOperatorFactory(0, ImmutableList.of(BIGINT), 6); + OperatorFactory operatorFactory = new LimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), 6); Operator operator = operatorFactory.createOperator(driverContext); List expected = rowPagesBuilder(BIGINT) diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestMarkDistinctOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestMarkDistinctOperator.java index e04c12b581c8..ca8dab70eb18 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestMarkDistinctOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestMarkDistinctOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.RowPagesBuilder; import com.facebook.presto.operator.MarkDistinctOperator.MarkDistinctOperatorFactory; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -74,7 +75,7 @@ public void testMarkDistinct(boolean hashEnabled) .addSequencePage(100, 0) .build(); - OperatorFactory operatorFactory = new MarkDistinctOperatorFactory(0, rowPagesBuilder.getTypes(), ImmutableList.of(0), rowPagesBuilder.getHashChannel()); + OperatorFactory operatorFactory = new MarkDistinctOperatorFactory(0, new PlanNodeId("test"), rowPagesBuilder.getTypes(), ImmutableList.of(0), rowPagesBuilder.getHashChannel()); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult.Builder expected = resultBuilder(driverContext.getSession(), BIGINT, BOOLEAN); diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopBuildOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopBuildOperator.java index 9272f1c6fc16..e3df40a9cd09 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopBuildOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopBuildOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.operator.NestedLoopBuildOperator.NestedLoopBuildOperatorFactory; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.TestingTaskContext; import com.google.common.collect.ImmutableList; import org.testng.annotations.AfterClass; @@ -55,7 +56,7 @@ public void testNestedLoopBuild() throws Exception { TaskContext taskContext = createTaskContext(); - NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory(3, ImmutableList.of(BIGINT)); + NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory(3, new PlanNodeId("test"), ImmutableList.of(BIGINT)); DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); NestedLoopBuildOperator nestedLoopBuildOperator = (NestedLoopBuildOperator) nestedLoopBuildOperatorFactory.createOperator(driverContext); NestedLoopJoinPagesSupplier nestedLoopJoinPagesSupplier = nestedLoopBuildOperatorFactory.getNestedLoopJoinPagesSupplier(); @@ -85,7 +86,7 @@ public void testNestedLoopBuildNoBlock() throws Exception { TaskContext taskContext = createTaskContext(); - NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory(3, ImmutableList.of()); + NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory(3, new PlanNodeId("test"), ImmutableList.of()); DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); NestedLoopBuildOperator nestedLoopBuildOperator = (NestedLoopBuildOperator) nestedLoopBuildOperatorFactory.createOperator(driverContext); NestedLoopJoinPagesSupplier nestedLoopJoinPagesSupplier = nestedLoopBuildOperatorFactory.getNestedLoopJoinPagesSupplier(); diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopJoinOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopJoinOperator.java index ce1c8766b72e..87d78d583ea3 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopJoinOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestNestedLoopJoinOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.operator.NestedLoopJoinOperator.NestedLoopPageBuilder; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.testing.TestingTaskContext; import com.google.common.collect.ImmutableList; @@ -74,7 +75,7 @@ public void testNestedLoopJoin() List probeInput = probePages .addSequencePage(2, 0, 1000, 2000) .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR, BIGINT, BIGINT)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR, BIGINT, BIGINT)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); @@ -94,7 +95,7 @@ public void testNestedLoopJoin() buildPages = rowPagesBuilder(ImmutableList.of(VARCHAR, BIGINT, BIGINT)) .addSequencePage(2, 20, 30, 40); nestedLoopJoinPagesSupplier = buildPageSource(taskContext, buildPages); - joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR, BIGINT, BIGINT)); + joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR, BIGINT, BIGINT)); joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // probe @@ -140,7 +141,7 @@ public void testCrossJoinWithNullProbe() .row("B") .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -183,7 +184,7 @@ public void testCrossJoinWithNullBuild() .row("A") .row("B") .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -228,7 +229,7 @@ public void testCrossJoinWithNullOnBothSides() .row((String) null) .row("C") .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -283,7 +284,7 @@ public void testBuildMultiplePages() .row("A") .row("B") .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -328,7 +329,7 @@ public void testProbeMultiplePages() .pageBreak() .row("d") .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -375,7 +376,7 @@ public void testProbeAndBuildMultiplePages() .pageBreak() .row("d") .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -421,7 +422,7 @@ public void testEmptyProbePage() List probeInput = probePages .pageBreak() .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -451,7 +452,7 @@ public void testEmptyBuildPage() .row("B") .pageBreak() .build(); - NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); + NestedLoopJoinOperatorFactory joinOperatorFactory = new NestedLoopJoinOperatorFactory(3, new PlanNodeId("test"), nestedLoopJoinPagesSupplier, ImmutableList.of(VARCHAR)); Operator joinOperator = joinOperatorFactory.createOperator(taskContext.addPipelineContext(true, true).addDriverContext()); // expected @@ -498,8 +499,8 @@ private static NestedLoopJoinPagesSupplier buildPageSource(TaskContext taskConte { DriverContext driverContext = taskContext.addPipelineContext(true, true).addDriverContext(); - ValuesOperatorFactory valuesOperatorFactory = new ValuesOperatorFactory(0, buildPages.getTypes(), buildPages.build()); - NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory(1, buildPages.getTypes()); + ValuesOperatorFactory valuesOperatorFactory = new ValuesOperatorFactory(0, new PlanNodeId("test"), buildPages.getTypes(), buildPages.build()); + NestedLoopBuildOperatorFactory nestedLoopBuildOperatorFactory = new NestedLoopBuildOperatorFactory(1, new PlanNodeId("test"), buildPages.getTypes()); Driver driver = new Driver(driverContext, valuesOperatorFactory.createOperator(driverContext), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestOperatorStats.java b/presto-main/src/test/java/com/facebook/presto/operator/TestOperatorStats.java index 07a32cde2798..dbcdc7a9c2ac 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestOperatorStats.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestOperatorStats.java @@ -13,6 +13,7 @@ */ package com.facebook.presto.operator; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import io.airlift.json.JsonCodec; import io.airlift.units.DataSize; import io.airlift.units.Duration; @@ -30,6 +31,7 @@ public class TestOperatorStats { public static final OperatorStats EXPECTED = new OperatorStats( 41, + new PlanNodeId("test"), "test", 1, @@ -60,6 +62,7 @@ public class TestOperatorStats public static final OperatorStats MERGEABLE = new OperatorStats( 41, + new PlanNodeId("test"), "test", 1, diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestOrderByOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestOrderByOperator.java index dece1cbfef7b..7270dd8735d0 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestOrderByOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestOrderByOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.ExceededMemoryLimitException; import com.facebook.presto.operator.OrderByOperator.OrderByOperatorFactory; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import io.airlift.units.DataSize; @@ -76,6 +77,7 @@ public void testSingleFieldKey() OrderByOperatorFactory operatorFactory = new OrderByOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), ImmutableList.of(1), 10, @@ -108,6 +110,7 @@ public void testMultiFieldKey() OrderByOperatorFactory operatorFactory = new OrderByOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(VARCHAR, BIGINT), ImmutableList.of(0, 1), 10, @@ -140,6 +143,7 @@ public void testReverseOrder() OrderByOperatorFactory operatorFactory = new OrderByOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), ImmutableList.of(0), 10, @@ -176,6 +180,7 @@ public void testMemoryLimit() OrderByOperatorFactory operatorFactory = new OrderByOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), ImmutableList.of(1), 10, diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestRecordProjectOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestRecordProjectOperator.java index 40ae0fc90e37..6e0296216f71 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestRecordProjectOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestRecordProjectOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.spi.InMemoryRecordSet; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.util.InfiniteRecordSet; import com.google.common.collect.ImmutableList; @@ -65,7 +66,7 @@ public void testSingleColumn() InMemoryRecordSet records = new InMemoryRecordSet(ImmutableList.of(VARCHAR), ImmutableList.copyOf(new List[] {ImmutableList.of("abc"), ImmutableList.of("def"), ImmutableList.of("g")})); - OperatorContext operatorContext = driverContext.addOperatorContext(0, RecordProjectOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), RecordProjectOperator.class.getSimpleName()); Operator operator = new RecordProjectOperator(operatorContext, records); MaterializedResult expected = resultBuilder(driverContext.getSession(), VARCHAR) @@ -86,7 +87,7 @@ public void testMultiColumn() ImmutableList.of("def", 2L), ImmutableList.of("g", 0L))); - OperatorContext operatorContext = driverContext.addOperatorContext(0, RecordProjectOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), RecordProjectOperator.class.getSimpleName()); Operator operator = new RecordProjectOperator(operatorContext, records); MaterializedResult expected = resultBuilder(driverContext.getSession(), VARCHAR, BIGINT) @@ -104,7 +105,7 @@ public void testFinish() { InfiniteRecordSet records = new InfiniteRecordSet(ImmutableList.of(VARCHAR, BIGINT), ImmutableList.of("abc", 1L)); - OperatorContext operatorContext = driverContext.addOperatorContext(0, RecordProjectOperator.class.getSimpleName()); + OperatorContext operatorContext = driverContext.addOperatorContext(0, new PlanNodeId("test"), RecordProjectOperator.class.getSimpleName()); Operator operator = new RecordProjectOperator(operatorContext, records); // verify initial state diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestRowNumberOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestRowNumberOperator.java index bb1eb43daa1e..3787102a03d7 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestRowNumberOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestRowNumberOperator.java @@ -19,6 +19,7 @@ import com.facebook.presto.spi.block.BlockBuilder; import com.facebook.presto.spi.block.BlockBuilderStatus; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -101,6 +102,7 @@ public void testRowNumberUnpartitioned() RowNumberOperator.RowNumberOperatorFactory operatorFactory = new RowNumberOperator.RowNumberOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), Ints.asList(1, 0), Ints.asList(), @@ -156,6 +158,7 @@ public void testRowNumberPartitioned(boolean hashEnabled) RowNumberOperator.RowNumberOperatorFactory operatorFactory = new RowNumberOperator.RowNumberOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), Ints.asList(1, 0), Ints.asList(0), @@ -223,6 +226,7 @@ public void testRowNumberPartitionedLimit(boolean hashEnabled) RowNumberOperator.RowNumberOperatorFactory operatorFactory = new RowNumberOperator.RowNumberOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), Ints.asList(1, 0), Ints.asList(0), @@ -293,6 +297,7 @@ public void testRowNumberUnpartitionedLimit() RowNumberOperator.RowNumberOperatorFactory operatorFactory = new RowNumberOperator.RowNumberOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), Ints.asList(1, 0), Ints.asList(), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestScanFilterAndProjectOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestScanFilterAndProjectOperator.java index 9060f3839ffc..53797627821b 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestScanFilterAndProjectOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestScanFilterAndProjectOperator.java @@ -62,6 +62,7 @@ public void testPageSource() ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory factory = new ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory( 0, + new PlanNodeId("test"), new PlanNodeId("0"), new PageSourceProvider() { @Override @@ -95,6 +96,7 @@ public void testRecordCursorSource() ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory factory = new ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory( 0, + new PlanNodeId("test"), new PlanNodeId("0"), new PageSourceProvider() { @Override diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestTopNOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestTopNOperator.java index 1ecec814ef12..21fd4e6124fe 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestTopNOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestTopNOperator.java @@ -15,6 +15,7 @@ import com.facebook.presto.operator.TopNOperator.TopNOperatorFactory; import com.facebook.presto.spi.Page; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import io.airlift.units.DataSize; @@ -80,6 +81,7 @@ public void testSingleFieldKey() TopNOperatorFactory factory = new TopNOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), 2, ImmutableList.of(0), @@ -114,6 +116,7 @@ public void testMultiFieldKey() TopNOperatorFactory operatorFactory = new TopNOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(VARCHAR, BIGINT), 3, ImmutableList.of(0, 1), @@ -150,6 +153,7 @@ public void testReverseOrder() TopNOperatorFactory operatorFactory = new TopNOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), 2, ImmutableList.of(0), @@ -174,6 +178,7 @@ public void testLimitZero() TopNOperatorFactory factory = new TopNOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT), 0, ImmutableList.of(0), @@ -210,6 +215,7 @@ public void testPartialMemoryFull() TopNOperatorFactory factory = new TopNOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT), 100, ImmutableList.of(0), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestTopNRowNumberOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestTopNRowNumberOperator.java index 305de10a7c36..2ea0095d7300 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestTopNRowNumberOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestTopNRowNumberOperator.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.block.SortOrder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -90,6 +91,7 @@ public void testTopNRowNumberPartitioned(boolean hashEnabled) TopNRowNumberOperatorFactory operatorFactory = new TopNRowNumberOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), Ints.asList(1, 0), Ints.asList(0), @@ -139,6 +141,7 @@ public void testTopNRowNumberUnPartitioned() TopNRowNumberOperatorFactory operatorFactory = new TopNRowNumberOperatorFactory( 0, + new PlanNodeId("test"), ImmutableList.of(BIGINT, DOUBLE), Ints.asList(1, 0), Ints.asList(), diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestUnnestOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestUnnestOperator.java index 350db0ce2907..25106ced6459 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestUnnestOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestUnnestOperator.java @@ -16,6 +16,7 @@ import com.facebook.presto.metadata.MetadataManager; import com.facebook.presto.spi.Page; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.type.ArrayType; import com.google.common.collect.ImmutableList; @@ -83,7 +84,7 @@ public void testUnnest() .build(); OperatorFactory operatorFactory = new UnnestOperator.UnnestOperatorFactory( - 0, ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), false); + 0, new PlanNodeId("test"), ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), false); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT, BIGINT, BIGINT, BIGINT) @@ -120,7 +121,7 @@ public void testUnnestWithArray() .build(); OperatorFactory operatorFactory = new UnnestOperator.UnnestOperatorFactory( - 0, ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), false); + 0, new PlanNodeId("test"), ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), false); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT, new ArrayType(BIGINT), new ArrayType(BIGINT), new ArrayType(BIGINT)) @@ -151,7 +152,7 @@ public void testUnnestWithOrdinality() .build(); OperatorFactory operatorFactory = new UnnestOperator.UnnestOperatorFactory( - 0, ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), true); + 0, new PlanNodeId("test"), ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), true); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT, BIGINT, BIGINT, BIGINT, BIGINT) @@ -179,7 +180,7 @@ public void testUnnestNonNumericDoubles() .build(); OperatorFactory operatorFactory = new UnnestOperator.UnnestOperatorFactory( - 0, ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), false); + 0, new PlanNodeId("test"), ImmutableList.of(0), ImmutableList.of(BIGINT), ImmutableList.of(1, 2), ImmutableList.of(arrayType, mapType), false); Operator operator = operatorFactory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT, DOUBLE, BIGINT, DOUBLE) diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java index 289bbc8f7ad6..5dbaf823cf79 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java @@ -26,6 +26,7 @@ import com.facebook.presto.spi.Page; import com.facebook.presto.spi.block.SortOrder; import com.facebook.presto.spi.type.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.facebook.presto.testing.MaterializedResult; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -652,6 +653,7 @@ private static WindowOperatorFactory createFactoryUnbounded( { return new WindowOperatorFactory( 0, + new PlanNodeId("test"), sourceTypes, outputChannels, functions, diff --git a/presto-main/src/test/java/com/facebook/presto/operator/scalar/FunctionAssertions.java b/presto-main/src/test/java/com/facebook/presto/operator/scalar/FunctionAssertions.java index 00b4cbfd46f1..ae4c71339bc4 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/scalar/FunctionAssertions.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/scalar/FunctionAssertions.java @@ -543,7 +543,7 @@ private Operator interpretedFilterProject(Expression filter, Expression projecti session ); - OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory(0, new GenericPageProcessor(filterFunction, ImmutableList.of(projectionFunction)), toTypes( + OperatorFactory operatorFactory = new FilterAndProjectOperator.FilterAndProjectOperatorFactory(0, new PlanNodeId("test"), new GenericPageProcessor(filterFunction, ImmutableList.of(projectionFunction)), toTypes( ImmutableList.of(projectionFunction))); return operatorFactory.createOperator(createDriverContext(session)); } @@ -557,7 +557,7 @@ private OperatorFactory compileFilterWithNoInputColumns(Expression filter, Expre try { PageProcessor processor = compiler.compilePageProcessor(toRowExpression(filter, expressionTypes), ImmutableList.of()); - return new FilterAndProjectOperator.FilterAndProjectOperatorFactory(0, processor, ImmutableList.of()); + return new FilterAndProjectOperator.FilterAndProjectOperatorFactory(0, new PlanNodeId("test"), processor, ImmutableList.of()); } catch (Throwable e) { if (e instanceof UncheckedExecutionException) { @@ -579,7 +579,7 @@ private OperatorFactory compileFilterProject(Expression filter, Expression proje List projections = ImmutableList.of(toRowExpression(projection, expressionTypes)); PageProcessor processor = compiler.compilePageProcessor(toRowExpression(filter, expressionTypes), projections); - return new FilterAndProjectOperator.FilterAndProjectOperatorFactory(0, processor, ImmutableList.of(expressionTypes.get(projection))); + return new FilterAndProjectOperator.FilterAndProjectOperatorFactory(0, new PlanNodeId("test"), processor, ImmutableList.of(expressionTypes.get(projection))); } catch (Throwable e) { if (e instanceof UncheckedExecutionException) { @@ -609,6 +609,7 @@ private SourceOperatorFactory compileScanFilterProject(Expression filter, Expres return new ScanFilterAndProjectOperator.ScanFilterAndProjectOperatorFactory( 0, + new PlanNodeId("test"), SOURCE_ID, PAGE_SOURCE_PROVIDER, cursorProcessor,