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

ASF GitHub Bot commented on DRILL-5547:
---------------------------------------

Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/868#discussion_r126828646
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java
 ---
    @@ -48,11 +50,46 @@
      * Only one instance of this class exists per drillbit. Options set at the 
system level affect the entire system and
      * persist between restarts.
      */
    +
    +/**
    + *  Drill has two different config systems each with its own 
namespace.First being the HOCON based boot time config
    + *  system.This is a hierarchical system where the top layers override the 
bottom ones in the following order
    + *
    + *  Java System Options
    + *  distrib.conf
    + *  drill-override.conf
    + *  drill-module.conf
    + *
    + *  These are the options that are set before the drill starts.But once 
drill starts System or session options can be
    + *  modified using ALTER SYSTEM/SESSION.Even this system provides 
inheritance sytle in the following order
    +
    + *  Session options
    + *  System options
    + *  Hardcoded defaults
    +
    + *  But system/session options have a validator and the validator has a 
hard coded default value for every option. In
    + *  the current system validators are registered so that system/session 
options will always have a default value.
    + *  So when a system/session options are not explicitly set or a user 
system/session option is null the hardcoded
    + *  default was applied since it checks if the option value is null and 
returns the default set in the validator.But
    + *  the config options set during boot time are never read and honored 
since there is no linkage between the two
    + *  config systems.It is also evident that there are some places where 
there is some ad-hoc linkage between the
    + *  two systems.For example, for the code gen compiler, config options are 
supposed to be read if the system option
    + *  is not null.But as the validator provides the default values config 
options are never taken into consideration.
    + *
    + *  The goal of the new system is to link both the systems in such a way 
that boot-time config options take precedence
    + *  over the hard coded defaults set in the validator.All the options in 
the option validator i.e.c options from
    + *  Exec constants, planner settings etc., are extracted and put into a 
new name space called drill.exec.options
    + *  in the .conf file.
    + *  The default values of the validators in the option validator are 
populated with the values in the boot-config.
    + *  This way the values set in the boot time config system are honored.Any 
user who wish to change the option
    + *  values in the config should change the options under the name space 
drill.exec.options
    + *
    + *
    + */
     public class SystemOptionManager extends BaseOptionManager implements 
OptionManager, AutoCloseable {
       private static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(SystemOptionManager.class);
     
    -  private static final CaseInsensitiveMap<OptionValidator> VALIDATORS;
    -
    +  private static CaseInsensitiveMap<OptionValidator> VALIDATORS;
    --- End diff --
    
    Why no longer `final`? Once this map is built, it should never be replaced. 
(The map itself can be changed; `final` just means that the `VALIDATORS` 
variable itself can't be changed.)
    
    And, see comments below in the method that does the defaults setup.


> Drill config options and session options do not work as intended
> ----------------------------------------------------------------
>
>                 Key: DRILL-5547
>                 URL: https://issues.apache.org/jira/browse/DRILL-5547
>             Project: Apache Drill
>          Issue Type: Bug
>          Components:  Server
>    Affects Versions: 1.10.0
>            Reporter: Karthikeyan Manivannan
>            Assignee: Venkata Jyothsna Donapati
>             Fix For: Future
>
>
> In Drill, session options should take precedence over config options. But 
> several of these session options are assigned hard-coded default values when 
> the option validators are initialized. Because of this config options will 
> never be read and honored even if the user did not specify the session 
> option. 
> ClassCompilerSelector.JAVA_COMPILER_VALIDATOR uses CompilerPolicy.DEFAULT as 
> the default value. This default value gets into the session options map via 
> the initialization of validators in SystemOptionManager. 
> Now any piece of code that tries to check if a session option is set will 
> never see a null, so it will always use that value and never try to look into 
> the config options. For example, in the following piece of code from 
> ClassCompilerSelector (), the policy will never be read from the config file.
> policy = CompilerPolicy.valueOf((value != null) ? 
> value.string_val.toUpperCase() : 
> config.getString(JAVA_COMPILER_CONFIG).toUpperCase());



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to