Repository: incubator-drill Updated Branches: refs/heads/master a88102bfa -> 84fa4f101
Switch to Optiq 0.7-SNAPSHOT. Add use of FrameworkContext and FrameworkConfig. Move PlannerSettings to FrameworkContext usage model. Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/58d33c8a Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/58d33c8a Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/58d33c8a Branch: refs/heads/master Commit: 58d33c8af3e8c4caf5ef0cfc77c8f6f2d88ef1ca Parents: a88102b Author: Jacques Nadeau <[email protected]> Authored: Mon Apr 21 09:21:30 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Mon Apr 21 09:22:02 2014 -0700 ---------------------------------------------------------------------- .../org/apache/drill/exec/ops/QueryContext.java | 10 +++- .../physical/HashToRandomExchangePrel.java | 2 +- .../exec/planner/physical/PlannerSettings.java | 45 ++++++++++++++++ .../exec/planner/physical/PlanningSettings.java | 57 -------------------- .../drill/exec/planner/physical/PrelUtil.java | 4 ++ .../physical/SingleMergeExchangePrel.java | 2 +- .../planner/physical/UnionExchangePrel.java | 2 +- .../drill/exec/planner/sql/DrillSqlWorker.java | 13 ++++- .../planner/sql/handlers/DefaultSqlHandler.java | 7 +-- .../planner/sql/handlers/SetOptionHandler.java | 2 +- .../apache/drill/exec/rpc/user/UserSession.java | 9 ---- .../java/org/apache/drill/PlanningBase.java | 3 ++ pom.xml | 4 +- 13 files changed, 81 insertions(+), 79 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java b/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java index 17d47aa..d658c13 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java @@ -26,6 +26,7 @@ import org.apache.drill.common.config.DrillConfig; import org.apache.drill.exec.cache.DistributedCache; import org.apache.drill.exec.expr.fn.FunctionImplementationRegistry; import org.apache.drill.exec.planner.PhysicalPlanReader; +import org.apache.drill.exec.planner.physical.PlannerSettings; import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint; import org.apache.drill.exec.proto.UserBitShared.QueryId; import org.apache.drill.exec.rpc.control.WorkEventBus; @@ -34,7 +35,7 @@ import org.apache.drill.exec.rpc.user.UserSession; import org.apache.drill.exec.server.DrillbitContext; import org.apache.drill.exec.store.StoragePluginRegistry; -public class QueryContext { +public class QueryContext{ static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(QueryContext.class); private final QueryId queryId; @@ -42,6 +43,7 @@ public class QueryContext { private final WorkEventBus workBus; private UserSession session; public final Multitimer<QuerySetup> timer; + private final PlannerSettings plannerSettings; public QueryContext(UserSession session, QueryId queryId, DrillbitContext drllbitContext) { super(); @@ -50,6 +52,11 @@ public class QueryContext { this.workBus = drllbitContext.getWorkBus(); this.session = session; this.timer = new Multitimer<>(QuerySetup.class); + this.plannerSettings = new PlannerSettings(); + } + + public PlannerSettings getPlannerSettings(){ + return plannerSettings; } public UserSession getSession(){ @@ -108,4 +115,5 @@ public class QueryContext { public FunctionImplementationRegistry getFunctionRegistry(){ return drillbitContext.getFunctionImplementationRegistry(); } + } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java index 4935e58..e5c9661 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java @@ -62,7 +62,7 @@ public class HashToRandomExchangePrel extends SingleRel implements Prel { PhysicalOperator childPOP = child.getPhysicalOperator(creator); - if(PlanningSettings.get(getCluster()).isSingleMode()) return childPOP; + if(PrelUtil.getSettings(getCluster()).isSingleMode()) return childPOP; //Currently, only accepts "NONE". For other, requires SelectionVectorRemover childPOP = PrelUtil.removeSvIfRequired(childPOP, SelectionVectorMode.NONE); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java new file mode 100644 index 0000000..e6e99c0 --- /dev/null +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java @@ -0,0 +1,45 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill.exec.planner.physical; + +import net.hydromatic.optiq.tools.FrameworkContext; + +public class PlannerSettings implements FrameworkContext{ + static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PlannerSettings.class); + + private boolean singleMode; + + public boolean isSingleMode() { + return singleMode; + } + + public void setSingleMode(boolean singleMode) { + this.singleMode = singleMode; + } + + @Override + public <T> T unwrap(Class<T> clazz) { + if(clazz == PlannerSettings.class){ + return (T) this; + }else{ + return null; + } + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java deleted file mode 100644 index ae293a2..0000000 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.drill.exec.planner.physical; - -import org.eigenbase.relopt.RelOptCluster; - -public class PlanningSettings { - static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PlanningSettings.class); - - private static ThreadLocal<PlanningSettings> settings = new ThreadLocal<>(); - - private boolean singleMode; - - public boolean isSingleMode() { - return singleMode; - } - - public void setSingleMode(boolean singleMode) { - this.singleMode = singleMode; - } - - /** - * Convenience method to extract planning settings from RelOptCluster. Uses threadlocal until Optiq supports - * passthrough. - */ - public static PlanningSettings get(RelOptCluster cluster) { - PlanningSettings s = settings.get(); - if (s == null) { - s = new PlanningSettings(); - settings.set(s); - } - - return s; - } - - - public static PlanningSettings get(){ - return get(null); - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java index 5dcf9aa..c8412ab 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java @@ -30,6 +30,7 @@ import org.apache.drill.exec.planner.physical.DrillDistributionTrait.Distributio import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode; import org.eigenbase.rel.RelCollation; import org.eigenbase.rel.RelFieldCollation; +import org.eigenbase.relopt.RelOptCluster; import org.eigenbase.reltype.RelDataType; import com.beust.jcommander.internal.Lists; @@ -71,6 +72,9 @@ public class PrelUtil { return func; } + public static PlannerSettings getSettings(RelOptCluster cluster){ + return cluster.getPlanner().getFrameworkContext().unwrap(PlannerSettings.class); + } public static PhysicalOperator removeSvIfRequired(PhysicalOperator child, SelectionVectorMode... allowed){ SelectionVectorMode current = child.getSVMode(); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java index f5c2547..d9431cc 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java @@ -69,7 +69,7 @@ public class SingleMergeExchangePrel extends SingleRel implements Prel { PhysicalOperator childPOP = child.getPhysicalOperator(creator); - if(PlanningSettings.get(getCluster()).isSingleMode()) return childPOP; + if(PrelUtil.getSettings(getCluster()).isSingleMode()) return childPOP; //Currently, only accepts "NONE". For other, requires SelectionVectorRemover childPOP = PrelUtil.removeSvIfRequired(childPOP, SelectionVectorMode.NONE); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java index a1951f6..f89cbaa 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java @@ -55,7 +55,7 @@ public class UnionExchangePrel extends SingleRel implements Prel { PhysicalOperator childPOP = child.getPhysicalOperator(creator); - if(PlanningSettings.get(getCluster()).isSingleMode()) return childPOP; + if(PrelUtil.getSettings(getCluster()).isSingleMode()) return childPOP; //Currently, only accepts "NONE". For other, requires SelectionVectorRemover childPOP = PrelUtil.removeSvIfRequired(childPOP, SelectionVectorMode.NONE, SelectionVectorMode.TWO_BYTE); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java index e48bc5b..532edf1 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java @@ -26,6 +26,7 @@ import net.hydromatic.optiq.tools.Frameworks; import net.hydromatic.optiq.tools.Planner; import net.hydromatic.optiq.tools.RelConversionException; import net.hydromatic.optiq.tools.RuleSet; +import net.hydromatic.optiq.tools.StdFrameworkConfig; import net.hydromatic.optiq.tools.ValidationException; import org.apache.drill.exec.ops.QueryContext; @@ -61,7 +62,17 @@ public class DrillSqlWorker { traitDefs.add(RelCollationTraitDef.INSTANCE); this.context = context; DrillOperatorTable table = new DrillOperatorTable(context.getFunctionRegistry()); - this.planner = Frameworks.getPlanner(Lex.MYSQL, SqlParserImpl.FACTORY, context.getNewDefaultSchema(), table, traitDefs, StandardConvertletTable.INSTANCE, RULES); + StdFrameworkConfig config = StdFrameworkConfig.newBuilder() // + .lex(Lex.MYSQL) // + .parserFactory(SqlParserImpl.FACTORY) // + .defaultSchema(context.getNewDefaultSchema()) // + .operatorTable(table) // + .traitDefs(traitDefs) // + .convertletTable(StandardConvertletTable.INSTANCE) // + .context(context.getPlannerSettings()) // + .ruleSets(RULES) // + .build(); + this.planner = Frameworks.getPlanner(config); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java index a34a724..bd005ac 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java @@ -40,7 +40,7 @@ import org.apache.drill.exec.planner.logical.DrillScreenRel; import org.apache.drill.exec.planner.logical.DrillStoreRel; import org.apache.drill.exec.planner.physical.DrillDistributionTrait; import org.apache.drill.exec.planner.physical.PhysicalPlanCreator; -import org.apache.drill.exec.planner.physical.PlanningSettings; +import org.apache.drill.exec.planner.physical.PlannerSettings; import org.apache.drill.exec.planner.physical.Prel; import org.apache.drill.exec.planner.sql.DrillSqlWorker; import org.eigenbase.rel.RelNode; @@ -123,13 +123,8 @@ public class DefaultSqlHandler implements SqlHandler{ protected PhysicalOperator convertToPop(Prel prel) throws IOException{ - boolean singleMode = !context.getSession().isEnableExchanges(); - - if(singleMode) PlanningSettings.get().setSingleMode(true); PhysicalPlanCreator creator = new PhysicalPlanCreator(context); PhysicalOperator op = prel.getPhysicalOperator(creator); - - if(singleMode) PlanningSettings.get().setSingleMode(false); return op; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java index 28180d2..64be891 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java @@ -47,7 +47,7 @@ public class SetOptionHandler implements SqlHandler{ String name = option.getName(); SqlNode value = option.getValue(); if(name.equals("NO_EXCHANGES")){ - context.getSession().enableExchanges(false); + context.getPlannerSettings().setSingleMode(true); } return DirectPlan.createDirectPlan(context, true, "disabled exchanges."); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java b/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java index 75545ec..0291978 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java @@ -30,7 +30,6 @@ public class UserSession { private DrillUser user; private String defaultSchema = ""; - private boolean enableExchanges = true; private UserClientConnection connection; public UserSession(UserClientConnection connection, UserCredentials credentials, SchemaFactory factory) throws IOException{ @@ -66,14 +65,6 @@ public class UserSession { return schema; } - public void enableExchanges(boolean enableExchanges){ - this.enableExchanges = enableExchanges; - } - - public boolean isEnableExchanges() { - return enableExchanges; - } - public boolean setSessionOption(String name, String value){ return true; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java index d719bc5..a9ea6da 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java +++ b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java @@ -31,6 +31,7 @@ import org.apache.drill.exec.expr.fn.FunctionImplementationRegistry; import org.apache.drill.exec.memory.TopLevelAllocator; import org.apache.drill.exec.ops.QueryContext; import org.apache.drill.exec.physical.PhysicalPlan; +import org.apache.drill.exec.planner.physical.PlannerSettings; import org.apache.drill.exec.planner.sql.DrillSqlWorker; import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint; import org.apache.drill.exec.rpc.user.UserSession; @@ -91,6 +92,8 @@ public class PlanningBase { result = DrillbitEndpoint.getDefaultInstance(); context.getActiveEndpoints(); result = ImmutableList.of(DrillbitEndpoint.getDefaultInstance()); + context.getPlannerSettings(); + result = new PlannerSettings(); context.getConfig(); result = config; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index bb53650..8291844 100644 --- a/pom.xml +++ b/pom.xml @@ -178,6 +178,8 @@ <configuration> <source>1.7</source> <target>1.7</target> + <maxmem>2g</maxmem> + <fork>true</fork> </configuration> </plugin> <plugin> @@ -610,7 +612,7 @@ <dependency> <groupId>net.hydromatic</groupId> <artifactId>optiq-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <exclusions> <exclusion> <groupId>org.jgrapht</groupId>
