[
https://issues.apache.org/jira/browse/DRILL-5547?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16105700#comment-16105700
]
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_r130189636
--- Diff:
exec/java-exec/src/test/java/org/apache/drill/test/TestConfigLinkage.java ---
@@ -0,0 +1,77 @@
+/*
+ * 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.test;
+
+import org.apache.drill.exec.ExecConstants;
+import org.junit.Test;
+import org.apache.drill.common.config.DrillConfig;
+import static org.junit.Assert.assertEquals;
+/*
+ * Tests to test if the linkage between the two config option systems
+ * i.e., the linkage between boot-config system and system/session options.
+ * Tests to assert if the config options are read in the order of session
,system, boot-config */
+
+public class TestConfigLinkage {
+
+ /* Test if session option takes precendence */
+ @Test
+ public void testSessionOption() throws Exception {
+ FixtureBuilder builder =
ClusterFixture.builder().sessionOption(ExecConstants.SLICE_TARGET, 10);
+ try (ClusterFixture cluster = builder.build();
+ ClientFixture client = cluster.clientFixture()) {
+ String slice_target = client.queryBuilder().sql("SELECT val FROM
sys.options2 where name='planner.slice_target'").singletonString();
+ assertEquals(slice_target,"10");
+ }
+ }
+
+ /* Test if system option takes precendence */
+ @Test
+ public void testSystemOption() throws Exception {
+ FixtureBuilder builder =
ClusterFixture.builder().systemOption(ExecConstants.SLICE_TARGET, 20);
+ try (ClusterFixture cluster = builder.build();
+ ClientFixture client = cluster.clientFixture()) {
+ String slice_target = client.queryBuilder().sql("SELECT val FROM
sys.options2 where name='planner.slice_target'").singletonString();
+ assertEquals(slice_target,"20");
+ }
+ }
+
+ /* Test if config option takes precedence if config option is not set */
+ @Test
+ public void testConfigOption() throws Exception {
+ FixtureBuilder builder = ClusterFixture.builder()
+
.configProperty("drill.exec.options."+ExecConstants.SLICE_TARGET, 30);
+ try (ClusterFixture cluster = builder.build();
+ ClientFixture client = cluster.clientFixture()) {
+ String slice_target = client.queryBuilder().sql("SELECT val FROM
sys.options2 where name='planner.slice_target'").singletonString();
+ assertEquals(slice_target,"30");
+ }
+ }
+
+ /* Test if altering system option takes precedence over config option */
+ @Test
+ public void testAlterSystem() throws Exception {
+ try (ClusterFixture cluster = ClusterFixture.standardCluster();
+ ClientFixture client = cluster.clientFixture()) {
+ client.queryBuilder().sql("ALTER SYSTEM SET
`planner.affinity_factor` = 1.5").run();
+ String affinity_factor = client.queryBuilder().sql("SELECT val FROM
sys.options2 where name='planner.affinity_factor'").singletonString();
+ assertEquals(affinity_factor,"1.5");
+ }
+ }
--- End diff --
Additional cases:
* both session and system options set: the session option takes precedence
* Query list of options using the new system table, with options in the
four states (see below). Verify that the returned result is correct.
* Various cases for the max width per node. (Will be tricky, you'll have to
get the CPU count for use in verifying the values.)
Four states: default, system only, session only, both system and session.
Any other code paths that are not exercised by the above set of tests?
> 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)