[ 
https://issues.apache.org/jira/browse/DRILL-3500?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14637758#comment-14637758
 ] 

Mehant Baid commented on DRILL-3500:
------------------------------------

After having some offline discussion with Jacques, we decided to first evaluate 
the existing planning contexts to make sure the new "context" is needed and 
cannot be merged with one of the existing classes.

1. QueryContextInformation/ContextInformation: This class contains information 
about the query start state for instance query start time, query timezone, 
default schema. This is created in QueryContext and propagated to the 
individual fragments where it will ultimately be consumed by UDF's as an 
Inject. 
2. PlannerSettings: This class essentially exposes session options related to 
the planner and has a bunch of helper methods to get frequently used options.
3. QueryContext: This is the umbrella context that contains all information 
needed for the planning phase (PlannerSettings and QueryContextInformation are 
part of this class).
4. OptimizerRulesContext (newly proposed): This currently exposes state like 
BufferAllocator, FunctionRegistry etc needed to write optimizer rules (for 
interpreter based execution) which is present in the QueryContext . Common 
interface to Drill internal rules and storage plugin specific rules.

With the existing structure of classes OptimizerRulesContext does not really 
fit well with the other classes. Because conceptually the rules need a 
'QueryContext' and this simply provides a interface on top of QueryContext for 
encapsulation. 

We could also go down the route of making PlannerSettings more heavy weight and 
using it as PlannerContext. Couple of my concerns with this approach is that 
for encapsulation purposes we would still need to add an interface on top of it 
since we are exposing this to storage plugins. PlannerContext and QueryContext 
will share a bunch of object references which seems unnecessary since all we 
need is a restricted view of QueryContext.

[~jnadeau] let me know your thoughts on this.





> Provide additional information while registering storage plugin optimizer 
> rules
> -------------------------------------------------------------------------------
>
>                 Key: DRILL-3500
>                 URL: https://issues.apache.org/jira/browse/DRILL-3500
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Mehant Baid
>            Assignee: Mehant Baid
>             Fix For: 1.2.0
>
>
> Currently all the optimizer rules internal to Drill have access to 
> QueryContext. This is used by a few rules like PruneScanRule which invoke the 
> interpreter to perform partition pruning. However the rules that belong to 
> specific storage plugins don't have access to this information. This JIRA 
> aims to do the following
> 1. Add a new interface OptimizerRulesContext that will be implemented by 
> QueryContext. It will contain all the information needed by the rules. This 
> context will be passed to the storage plugin method while getting the 
> optimizer rules specific to that storage plugin.
> 2. Restrict existing internal rules to only accept OptimizerRulesContext 
> instead of QueryContext so information in QueryContext has better 
> encapsulation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to