Stephan Ewen created FLINK-4764:
-----------------------------------

             Summary: Introduce config options
                 Key: FLINK-4764
                 URL: https://issues.apache.org/jira/browse/FLINK-4764
             Project: Flink
          Issue Type: Improvement
          Components: Core
    Affects Versions: 1.1.2
            Reporter: Stephan Ewen
            Assignee: Stephan Ewen
             Fix For: 1.2.0


It is a bit unorthodox to start a discussion via a pull request, but this 
suggestion is best motivated via some code.

I suggest to move away from the current model with `ConfigConstants` and move 
to a model where an `Option` object describes a configuration option 
completely, with default value, fallback keys.

h2. Advantages
  - Much simpler / easier access to values that have deprecated keys
  - Not possible to accidentally overlook deprecated keys
  - Key and default values are grouped together in the definition
  - Clearly states the expected type value for each config key (string, int, 
etc).
  - We can improve this even further to include the description and 
auto-generate the config docs

h2. Example

Simple option:
{code}
Option<String> TASK_MANAGER_TMP_DIRS = new Option<>(
                    "taskmanager.tmp.dirs",                 // config key
                    System.getProperty("java.io.tmpdir"));  // default value
{code}

Option with multiple deprecated keys:
{code}
Option<String> HA_CLUSTER_ID = new Option<>(
                    "high-availability.cluster-id",      // config key
                    null,                                // no default value
                    "high-availability.zookeeper.path.namespace",  // latest 
deprecated key
                    "recovery.zookeeper.path.namespace");         // even 
earlier deprecated key
{code}

Get a config value, this automatically checks deprecated keys and default 
values:
{code}
final String zkQuorum = 
configuration.getValue(ConfigOptions.HA_ZOOKEEPER_QUORUM);
final long connTimeout = 
configuration.getInteger(ConfigOptions.HA_ZOOKEEPER_CONN_TIMEOUT);
{code}

h2. Multiple Options classes

To avoid having one huge class (like `ConfigConstants`), we can easily split 
this up into `TaskManagerOptions`, `JobManagerOptions`, `ZooKeeperOptions`, etc.



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

Reply via email to