You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by hi...@apache.org on 2015/09/01 22:55:57 UTC

[2/2] tez git commit: TEZ-2294. Add tez-site-template.xml with description of config properties. (hitesh)

TEZ-2294. Add tez-site-template.xml with description of config properties. (hitesh)


Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/50df8651
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/50df8651
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/50df8651

Branch: refs/heads/master
Commit: 50df8651f27d8bc8d463cf8c8cd70ceea3e6af4f
Parents: 5cb0079
Author: Hitesh Shah <hi...@apache.org>
Authored: Tue Sep 1 13:55:16 2015 -0700
Committer: Hitesh Shah <hi...@apache.org>
Committed: Tue Sep 1 13:55:41 2015 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 docs/pom.xml                                    |   1 +
 pom.xml                                         |  61 +++--
 tez-api/pom.xml                                 |  33 ++-
 .../common/annotation/ConfigurationClass.java   |  31 +++
 .../annotation/ConfigurationProperty.java       |  36 +++
 .../apache/tez/dag/api/TezConfiguration.java    | 126 +++++++++-
 tez-dist/pom.xml                                |   5 +
 tez-runtime-library/pom.xml                     |  32 +++
 .../library/api/TezRuntimeConfiguration.java    |  67 ++++--
 tez-tools/pom.xml                               |   2 +
 .../tez-javadoc-tools/findbugs-exclude.xml      |  22 ++
 tez-tools/tez-javadoc-tools/pom.xml             |  92 ++++++++
 .../javadoc/doclet/ConfigStandardDoclet.java    | 233 +++++++++++++++++++
 .../apache/tez/tools/javadoc/model/Config.java  |  40 ++++
 .../tez/tools/javadoc/model/ConfigProperty.java |  46 ++++
 .../tez/tools/javadoc/util/HtmlWriter.java      | 161 +++++++++++++
 .../apache/tez/tools/javadoc/util/Writer.java   |  39 ++++
 .../tez/tools/javadoc/util/XmlWriter.java       |  96 ++++++++
 19 files changed, 1083 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 66fe000..3c7d0bd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -7,6 +7,7 @@ Release 0.8.1: Unreleased
 INCOMPATIBLE CHANGES
 
 ALL CHANGES:
+  TEZ-2294. Add tez-site-template.xml with description of config properties.
   TEZ-2757. Fix download links for Tez releases.
   TEZ-2742. VertexImpl.finished() terminationCause hides member var of the
   same name

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/docs/pom.xml
----------------------------------------------------------------------
diff --git a/docs/pom.xml b/docs/pom.xml
index b76f9ba..df6f3ef 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -444,6 +444,7 @@
           <artifactId>maven-project-info-reports-plugin</artifactId>
           <configuration>
             <customBundle>${project.basedir}/src/site/custom/project-info-report.properties</customBundle>
+            <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
           </configuration>
           <reportSets>
             <reportSet>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index fe996d0..d1d5fe6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -160,6 +160,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.tez</groupId>
+        <artifactId>tez-tools</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.tez</groupId>
         <artifactId>tez-plugins</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -885,6 +890,14 @@
             </lifecycleMappingMetadata>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>2.7</version>
+          <configuration>
+            <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
 
@@ -1134,6 +1147,37 @@
       </build>
     </profile>
     <profile>
+      <id>jdk1.7</id>
+      <activation>
+        <jdk>1.7</jdk>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>jdk.tools</groupId>
+          <artifactId>jdk.tools</artifactId>
+          <version>1.7</version>
+          <scope>system</scope>
+          <systemPath>${java.home}/../lib/tools.jar</systemPath>
+        </dependency>
+      </dependencies>
+    </profile>
+    <profile>
+      <id>jdk1.8</id>
+      <activation>
+        <jdk>1.8</jdk>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>jdk.tools</groupId>
+          <artifactId>jdk.tools</artifactId>
+          <version>1.8</version>
+          <scope>system</scope>
+          <systemPath>${java.home}/../lib/tools.jar</systemPath>
+        </dependency>
+      </dependencies>
+    </profile>
+
+    <profile>
       <activation>
         <activeByDefault>false</activeByDefault>
       </activation>
@@ -1187,21 +1231,12 @@
         <frontend-maven-plugin.version>0.0.22</frontend-maven-plugin.version>
       </properties>
     </profile>
-
   </profiles>
 
   <reporting>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>2.7</version>
-        <configuration>
-          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-javadoc-plugin</artifactId>
         <version>${javadoc-maven-plugin.version}</version>
         <reportSets>
@@ -1224,14 +1259,6 @@
           </reportSet>
         </reportSets>
       </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>findbugs-maven-plugin</artifactId>
-        <version>${findbugs-maven-plugin.version}</version>
-        <configuration>
-          <excludeFilterFile>${basedir}/findbugs-exclude.xml</excludeFilterFile>
-        </configuration>
-      </plugin>
     </plugins>
   </reporting>
 

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-api/pom.xml
----------------------------------------------------------------------
diff --git a/tez-api/pom.xml b/tez-api/pom.xml
index 1baec8f..b3eb97c 100644
--- a/tez-api/pom.xml
+++ b/tez-api/pom.xml
@@ -27,7 +27,7 @@
   <dependencies>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
+      <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
@@ -177,4 +177,35 @@
     </plugins>
   </build>
 
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <reportSets>
+          <reportSet>
+            <id>configgen</id>
+            <configuration>
+              <doclet>org.apache.tez.tools.javadoc.doclet.ConfigStandardDoclet</doclet>
+              <docletArtifacts>
+                <docletArtifact>
+                  <groupId>org.apache.tez</groupId>
+                  <artifactId>tez-javadoc-tools</artifactId>
+                  <version>${project.version}</version>
+                </docletArtifact>
+              </docletArtifacts>
+              <destDir>apidocs/configs</destDir>
+              <name>TezConfigGenerator</name>
+              <description>Tez Configuration documentation</description>
+            </configuration>
+            <reports>
+              <report>javadoc</report>
+              <report>aggregate</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+    </plugins>
+  </reporting>
+
 </project>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationClass.java
----------------------------------------------------------------------
diff --git a/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationClass.java b/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationClass.java
new file mode 100644
index 0000000..6b8fdaf
--- /dev/null
+++ b/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationClass.java
@@ -0,0 +1,31 @@
+/**
+ * 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.tez.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+
+@Private
+@Target(ElementType.TYPE)
+public @interface ConfigurationClass {
+
+  public String templateFileName();
+}

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationProperty.java
----------------------------------------------------------------------
diff --git a/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationProperty.java b/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationProperty.java
new file mode 100644
index 0000000..f7d37e2
--- /dev/null
+++ b/tez-api/src/main/java/org/apache/tez/common/annotation/ConfigurationProperty.java
@@ -0,0 +1,36 @@
+/**
+ * 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.tez.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+
+@Private
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ConfigurationProperty {
+
+  public boolean mandatory() default false;
+  public String type() default "string";
+  public String[] validValues() default {};
+}

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-api/src/main/java/org/apache/tez/dag/api/TezConfiguration.java
----------------------------------------------------------------------
diff --git a/tez-api/src/main/java/org/apache/tez/dag/api/TezConfiguration.java b/tez-api/src/main/java/org/apache/tez/dag/api/TezConfiguration.java
index 54d490b..4d12740 100644
--- a/tez-api/src/main/java/org/apache/tez/dag/api/TezConfiguration.java
+++ b/tez-api/src/main/java/org/apache/tez/dag/api/TezConfiguration.java
@@ -23,6 +23,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.tez.common.annotation.ConfigurationClass;
+import org.apache.tez.common.annotation.ConfigurationProperty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.classification.InterfaceAudience.Private;
@@ -39,8 +41,11 @@ import com.google.common.annotations.VisibleForTesting;
  * Defines the configurations for Tez. These configurations are typically specified in 
  * tez-site.xml on the client machine where TezClient is used to launch the Tez application.
  * tez-site.xml is expected to be picked up from the classpath of the client process.
+ * @see <a href="../../../../../configs/TezConfiguration.html">Detailed Configuration Information</a>
+ * @see <a href="../../../../../configs/tez-default-template.xml">XML-based Config Template</a>
  */
 @Public
+@ConfigurationClass(templateFileName = "tez-default-template.xml")
 public class TezConfiguration extends Configuration {
 
   public final static String TEZ_SITE_XML = "tez-site.xml";
@@ -122,6 +127,7 @@ public class TezConfiguration extends Configuration {
    * artifacts that it creates within the specified staging dir. Does not affect any user data.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_AM_STAGING_SCRATCH_DATA_AUTO_DELETE = TEZ_AM_PREFIX +
       "staging.scratch-data.auto-delete";
   public static final boolean TEZ_AM_STAGING_SCRATCH_DATA_AUTO_DELETE_DEFAULT = true;
@@ -130,6 +136,7 @@ public class TezConfiguration extends Configuration {
    * String value. Specifies a directory where Tez can create temporary job artifacts.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_STAGING_DIR = TEZ_PREFIX + "staging-dir";
   public static final String TEZ_AM_STAGING_DIR_DEFAULT = "/tmp/"
       + System.getProperty("user.name") + "/tez/staging";
@@ -139,6 +146,7 @@ public class TezConfiguration extends Configuration {
    * Path to a credentials file (with serialized credentials) located on the local file system.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_CREDENTIALS_PATH = TEZ_PREFIX + "credentials.path";
 
   @Private
@@ -164,6 +172,7 @@ public class TezConfiguration extends Configuration {
    * mode is recommended. If session mode is enabled then container reuse is recommended.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_SESSION_MODE = TEZ_AM_PREFIX + "mode.session";
   public static final boolean TEZ_AM_SESSION_MODE_DEFAULT = false;
 
@@ -184,6 +193,7 @@ public class TezConfiguration extends Configuration {
    *   org.apache.hadoop.ipc=INFO;org.apache.hadoop.security=INFO is not valid
    * */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_LOG_LEVEL = TEZ_AM_PREFIX + "log.level";
   public static final String TEZ_AM_LOG_LEVEL_DEFAULT = "INFO";
 
@@ -204,6 +214,7 @@ public class TezConfiguration extends Configuration {
    *   org.apache.hadoop.ipc=INFO;org.apache.hadoop.security=INFO is not valid
    * */
   @ConfigurationScope(Scope.VERTEX)
+  @ConfigurationProperty
   public static final String TEZ_TASK_LOG_LEVEL = TEZ_TASK_PREFIX + "log.level";
   public static final String TEZ_TASK_LOG_LEVEL_DEFAULT = "INFO";
 
@@ -240,6 +251,7 @@ public class TezConfiguration extends Configuration {
    * this value must be appropriately chosen. Defaults to the safe choice of true.
    */
   @ConfigurationScope(Scope.DAG)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_COMMIT_ALL_OUTPUTS_ON_DAG_SUCCESS =
       TEZ_AM_PREFIX + "commit-all-outputs-on-dag-success";
   public static final boolean TEZ_AM_COMMIT_ALL_OUTPUTS_ON_DAG_SUCCESS_DEFAULT = true;
@@ -260,6 +272,7 @@ public class TezConfiguration extends Configuration {
    * be overridden per job.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_LAUNCH_CLUSTER_DEFAULT_CMD_OPTS =
       TEZ_AM_PREFIX + "launch.cluster-default.cmd-opts";
   public static final String TEZ_AM_LAUNCH_CLUSTER_DEFAULT_CMD_OPTS_DEFAULT =
@@ -271,6 +284,7 @@ public class TezConfiguration extends Configuration {
    * Tez can determine them automatically.
    * */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_LAUNCH_CMD_OPTS = TEZ_AM_PREFIX +  "launch.cmd-opts";
   public static final String TEZ_AM_LAUNCH_CMD_OPTS_DEFAULT = 
       "-XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -XX:+UseNUMA -XX:+UseParallelGC";
@@ -282,6 +296,7 @@ public class TezConfiguration extends Configuration {
    * be overridden per job.
    */
   @ConfigurationScope(Scope.AM) // TODO DAG/Vertex level
+  @ConfigurationProperty
   public static final String TEZ_TASK_LAUNCH_CLUSTER_DEFAULT_CMD_OPTS =
       TEZ_TASK_PREFIX + "launch.cluster-default.cmd-opts";
   public static final String TEZ_TASK_LAUNCH_CLUSTER_DEFAULT_CMD_OPTS_DEFAULT =
@@ -293,6 +308,7 @@ public class TezConfiguration extends Configuration {
    * so that Tez can determine them automatically.
    */
   @ConfigurationScope(Scope.AM) // TODO DAG/Vertex level
+  @ConfigurationProperty
   public static final String TEZ_TASK_LAUNCH_CMD_OPTS = TEZ_TASK_PREFIX
       + "launch.cmd-opts";
   public static final String TEZ_TASK_LAUNCH_CMD_OPTS_DEFAULT =
@@ -308,6 +324,7 @@ public class TezConfiguration extends Configuration {
    * on container memory size. Value should be greater than 0 and less than 1.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="float")
   public static final String TEZ_CONTAINER_MAX_JAVA_HEAP_FRACTION =
       TEZ_PREFIX + "container.max.java.heap.fraction";
   public static final double TEZ_CONTAINER_MAX_JAVA_HEAP_FRACTION_DEFAULT = 0.8;
@@ -324,6 +341,7 @@ public class TezConfiguration extends Configuration {
    * These get added to the app master environment prior to launching it.
   */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_LAUNCH_ENV = TEZ_AM_PREFIX
       + "launch.env";
   public static final String TEZ_AM_LAUNCH_ENV_DEFAULT = NATIVE_LIB_PARAM_DEFAULT;
@@ -336,12 +354,14 @@ public class TezConfiguration extends Configuration {
    * These get added to the task environment prior to launching it.
    */
   @ConfigurationScope(Scope.VERTEX)
+  @ConfigurationProperty
   public static final String TEZ_TASK_LAUNCH_ENV = TEZ_TASK_PREFIX
       + "launch.env";
   public static final String TEZ_TASK_LAUNCH_ENV_DEFAULT = NATIVE_LIB_PARAM_DEFAULT;
 
   @Private
   @ConfigurationScope(Scope.DAG)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_CANCEL_DELEGATION_TOKENS_ON_COMPLETION = TEZ_PREFIX +
       "cancel.delegation.tokens.on.completion";
   public static final boolean TEZ_CANCEL_DELEGATION_TOKENS_ON_COMPLETION_DEFAULT = true;
@@ -358,6 +378,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_TASK_LISTENER_THREAD_COUNT =
       TEZ_AM_PREFIX + "task.listener.thread-count";
   public static final int TEZ_AM_TASK_LISTENER_THREAD_COUNT_DEFAULT = 30;
@@ -370,6 +391,7 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_COUNTERS_MAX = TEZ_PREFIX + "counters.max";
   public static final int TEZ_COUNTERS_MAX_DEFAULT = 1200;
 
@@ -380,6 +402,7 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_COUNTERS_MAX_GROUPS = TEZ_PREFIX + "counters.max.groups";
   public static final int TEZ_COUNTERS_MAX_GROUPS_DEFAULT = 500;
 
@@ -390,6 +413,7 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_COUNTERS_COUNTER_NAME_MAX_LENGTH =
       TEZ_PREFIX + "counters.counter-name.max-length";
   public static final int TEZ_COUNTERS_COUNTER_NAME_MAX_LENGTH_DEFAULT = 64;
@@ -401,6 +425,7 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_COUNTERS_GROUP_NAME_MAX_LENGTH =
       TEZ_PREFIX + "counters.group-name.max-length";
   public static final int TEZ_COUNTERS_GROUP_NAME_MAX_LENGTH_DEFAULT = 256;
@@ -411,6 +436,7 @@ public class TezConfiguration extends Configuration {
    * when some tasks are running slower due bad/slow machines
    */
   @ConfigurationScope(Scope.VERTEX)  // TODO Verify the vertex speculation, TEZ-1788
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_SPECULATION_ENABLED = TEZ_AM_PREFIX + "speculation.enabled";
   public static final boolean TEZ_AM_SPECULATION_ENABLED_DEFAULT = false;
   
@@ -420,7 +446,8 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_LEGACY_SPECULATIVE_SLOWTASK_THRESHOLD = 
+  @ConfigurationProperty(type="float")
+  public static final String TEZ_AM_LEGACY_SPECULATIVE_SLOWTASK_THRESHOLD =
                                      TEZ_AM_PREFIX + "legacy.speculative.slowtask.threshold";
 
   /**
@@ -428,6 +455,7 @@ public class TezConfiguration extends Configuration {
    * master. Expert level setting. 
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_CONTAINERLAUNCHER_THREAD_COUNT_LIMIT =
     TEZ_AM_PREFIX + "containerlauncher.thread-count-limit";
 
@@ -439,6 +467,7 @@ public class TezConfiguration extends Configuration {
    * Int value. Specifies the number of task failures on a node before the node is considered faulty.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_MAX_TASK_FAILURES_PER_NODE = TEZ_AM_PREFIX
       + "maxtaskfailures.per.node";
   public static final int TEZ_AM_MAX_TASK_FAILURES_PER_NODE_DEFAULT = 10;
@@ -450,7 +479,8 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_MAX_APP_ATTEMPTS = TEZ_AM_PREFIX + 
+  @ConfigurationProperty(type="integer")
+  public static final String TEZ_AM_MAX_APP_ATTEMPTS = TEZ_AM_PREFIX +
       "max.app.attempts";
   public static final int TEZ_AM_MAX_APP_ATTEMPTS_DEFAULT = 2;
   
@@ -459,6 +489,7 @@ public class TezConfiguration extends Configuration {
    * This does not count killed attempts. Task failure results in DAG failure.
    */
   @ConfigurationScope(Scope.VERTEX)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_TASK_MAX_FAILED_ATTEMPTS =
       TEZ_AM_PREFIX + "task.max.failed.attempts";
   public static final int TEZ_AM_TASK_MAX_FAILED_ATTEMPTS_DEFAULT = 4;
@@ -468,6 +499,7 @@ public class TezConfiguration extends Configuration {
    * will not be used to execute tasks.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_NODE_BLACKLISTING_ENABLED = TEZ_AM_PREFIX
       + "node-blacklisting.enabled";
   public static final boolean TEZ_AM_NODE_BLACKLISTING_ENABLED_DEFAULT = true;
@@ -478,12 +510,14 @@ public class TezConfiguration extends Configuration {
    * temporary surges in failures (e.g. due to network outages). 
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_NODE_BLACKLISTING_IGNORE_THRESHOLD = TEZ_AM_PREFIX
       + "node-blacklisting.ignore-threshold-node-percent";
   public static final int TEZ_AM_NODE_BLACKLISTING_IGNORE_THRESHOLD_DEFAULT = 33;
 
   /** Int value. Number of threads to handle client RPC requests. Expert level setting.*/
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_CLIENT_THREAD_COUNT =
       TEZ_AM_PREFIX + "client.am.thread-count";
   public static final int TEZ_AM_CLIENT_THREAD_COUNT_DEFAULT = 1;
@@ -494,6 +528,7 @@ public class TezConfiguration extends Configuration {
    * For example 50000-50050,50100-50200
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_CLIENT_AM_PORT_RANGE =
       TEZ_AM_PREFIX + "client.am.port-range";
 
@@ -510,18 +545,21 @@ public class TezConfiguration extends Configuration {
    * String value. The class to be used for DAG Scheduling. Expert level setting.
    */
   @ConfigurationScope(Scope.DAG)
+  @ConfigurationProperty
   public static final String TEZ_AM_DAG_SCHEDULER_CLASS = TEZ_AM_PREFIX + "dag.scheduler.class";
   public static final String TEZ_AM_DAG_SCHEDULER_CLASS_DEFAULT =
       "org.apache.tez.dag.app.dag.impl.DAGSchedulerNaturalOrder";
 
   /** Int value. The amount of memory in MB to be used by the AppMaster */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_RESOURCE_MEMORY_MB = TEZ_AM_PREFIX
       + "resource.memory.mb";
   public static final int TEZ_AM_RESOURCE_MEMORY_MB_DEFAULT = 1024;
 
   /** Int value. The number of virtual cores to be used by the app master */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_RESOURCE_CPU_VCORES = TEZ_AM_PREFIX
       + "resource.cpu.vcores";
   public static final int TEZ_AM_RESOURCE_CPU_VCORES_DEFAULT = 1;
@@ -530,6 +568,7 @@ public class TezConfiguration extends Configuration {
    * all vertices. Setting it to the same value for all tasks is helpful for container reuse and 
    * thus good for performance typically. */
   @ConfigurationScope(Scope.DAG)  // TODO vertex level
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_TASK_RESOURCE_MEMORY_MB = TEZ_TASK_PREFIX
       + "resource.memory.mb";
   public static final int TEZ_TASK_RESOURCE_MEMORY_MB_DEFAULT = 1024;
@@ -538,6 +577,7 @@ public class TezConfiguration extends Configuration {
    * Int value. The number of virtual cores to be used by tasks.
    */
   @ConfigurationScope(Scope.DAG)  // TODO vertex level
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_TASK_RESOURCE_CPU_VCORES = TEZ_TASK_PREFIX
       + "resource.cpu.vcores";
   public static final int TEZ_TASK_RESOURCE_CPU_VCORES_DEFAULT = 1; 
@@ -548,6 +588,7 @@ public class TezConfiguration extends Configuration {
    * help in scaling up. Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_RM_HEARTBEAT_INTERVAL_MS_MAX = TEZ_AM_PREFIX
       + "am-rm.heartbeat.interval-ms.max";
   public static final int TEZ_AM_RM_HEARTBEAT_INTERVAL_MS_MAX_DEFAULT = 1000;
@@ -558,6 +599,7 @@ public class TezConfiguration extends Configuration {
    * number of concurrent tasks. Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_TASK_GET_TASK_SLEEP_INTERVAL_MS_MAX = TEZ_TASK_PREFIX
       + "get-task.sleep.interval-ms.max";
   public static final int TEZ_TASK_GET_TASK_SLEEP_INTERVAL_MS_MAX_DEFAULT = 200;
@@ -568,6 +610,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_TASK_AM_HEARTBEAT_INTERVAL_MS = TEZ_TASK_PREFIX
       + "am.heartbeat.interval-ms.max";
   public static final int TEZ_TASK_AM_HEARTBEAT_INTERVAL_MS_DEFAULT = 100;
@@ -578,6 +621,7 @@ public class TezConfiguration extends Configuration {
    * counters. Improves AM scalability. Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_TASK_AM_HEARTBEAT_COUNTER_INTERVAL_MS = TEZ_TASK_PREFIX
       + "am.heartbeat.counter.interval-ms.max";
   public static final int TEZ_TASK_AM_HEARTBEAT_COUNTER_INTERVAL_MS_DEFAULT =
@@ -588,6 +632,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting. Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_TASK_MAX_EVENTS_PER_HEARTBEAT = TEZ_TASK_PREFIX
       + "max-events-per-heartbeat";
   public static final int TEZ_TASK_MAX_EVENTS_PER_HEARTBEAT_DEFAULT = 500;
@@ -600,6 +645,7 @@ public class TezConfiguration extends Configuration {
   @Unstable
   @Private
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_TASK_GENERATE_COUNTERS_PER_IO = TEZ_TASK_PREFIX
       + "generate.counters.per.io";
   @Private
@@ -611,6 +657,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TASK_HEARTBEAT_TIMEOUT_MS = TEZ_TASK_PREFIX + "timeout-ms";
 
   public static final int TASK_HEARTBEAT_TIMEOUT_MS_DEFAULT = 5 * 60 * 1000;
@@ -620,6 +667,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TASK_HEARTBEAT_TIMEOUT_CHECK_MS = TEZ_TASK_PREFIX + "heartbeat.timeout.check-ms";
 
   public static final int TASK_HEARTBEAT_TIMEOUT_CHECK_MS_DEFAULT = 30 * 1000;
@@ -631,6 +679,7 @@ public class TezConfiguration extends Configuration {
   @Private
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_TASK_SCALE_MEMORY_ENABLED = TEZ_TASK_PREFIX
       + "scale.memory.enabled";
   @Private
@@ -642,6 +691,7 @@ public class TezConfiguration extends Configuration {
   @Private
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_TASK_SCALE_MEMORY_ALLOCATOR_CLASS = TEZ_TASK_PREFIX
       + "scale.memory.allocator.class";
   @Private
@@ -655,6 +705,7 @@ public class TezConfiguration extends Configuration {
   @Private
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="double")
   public static final String TEZ_TASK_SCALE_MEMORY_RESERVE_FRACTION = TEZ_TASK_PREFIX
       + "scale.memory.reserve-fraction";
   @Private
@@ -667,6 +718,7 @@ public class TezConfiguration extends Configuration {
   @Private
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="float")
   public static final String TEZ_TASK_SCALE_MEMORY_ADDITIONAL_RESERVATION_FRACTION_PER_IO =
       TEZ_TASK_PREFIX + "scale.memory.additional-reservation.fraction.per-io";
 
@@ -676,6 +728,7 @@ public class TezConfiguration extends Configuration {
    * Max cumulative total reservation for additional IOs.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="float")
   public static final String TEZ_TASK_SCALE_MEMORY_ADDITIONAL_RESERVATION_FRACTION_MAX =
       TEZ_TASK_PREFIX + "scale.memory.additional-reservation.fraction.max";
   /*
@@ -686,6 +739,7 @@ public class TezConfiguration extends Configuration {
   @Private
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_TASK_SCALE_MEMORY_WEIGHTED_RATIOS =
       TEZ_TASK_PREFIX + "scale.memory.ratios";
 
@@ -695,6 +749,7 @@ public class TezConfiguration extends Configuration {
    * Defines the ProcessTree implementation which will be used to collect resource utilization.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_TASK_RESOURCE_CALCULATOR_PROCESS_TREE_CLASS =
       TEZ_TASK_PREFIX + "resource.calculator.process-tree.class";
 
@@ -704,6 +759,7 @@ public class TezConfiguration extends Configuration {
    * This improves performance by not incurring recurring launch overheads.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_CONTAINER_REUSE_ENABLED = TEZ_AM_PREFIX
       + "container.reuse.enabled";
   public static final boolean TEZ_AM_CONTAINER_REUSE_ENABLED_DEFAULT = true;
@@ -713,6 +769,7 @@ public class TezConfiguration extends Configuration {
    * enabled.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_CONTAINER_REUSE_RACK_FALLBACK_ENABLED =
       TEZ_AM_PREFIX + "container.reuse.rack-fallback.enabled";
   public static final boolean
@@ -724,6 +781,7 @@ public class TezConfiguration extends Configuration {
    * volume being read from the primary data sources.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_CONTAINER_REUSE_NON_LOCAL_FALLBACK_ENABLED =
       TEZ_AM_PREFIX + "container.reuse.non-local-fallback.enabled";
   public static final boolean
@@ -734,6 +792,7 @@ public class TezConfiguration extends Configuration {
    * of locality. NODE -> RACK -> NON_LOCAL. Delay scheduling parameter. Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="long")
   public static final String
       TEZ_AM_CONTAINER_REUSE_LOCALITY_DELAY_ALLOCATION_MILLIS =
       TEZ_AM_PREFIX + "container.reuse.locality.delay-allocation-millis";
@@ -745,7 +804,8 @@ public class TezConfiguration extends Configuration {
    * reuse is enabled. Set to -1 to never release idle containers (not recommended). 
    */
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MIN_MILLIS = 
+  @ConfigurationProperty(type="integer")
+  public static final String TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MIN_MILLIS =
     TEZ_AM_PREFIX + "container.idle.release-timeout-min.millis";
   public static final long
     TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MIN_MILLIS_DEFAULT = 5000l;  
@@ -761,7 +821,8 @@ public class TezConfiguration extends Configuration {
    * creates a graceful reduction in the amount of idle resources held
    */
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MAX_MILLIS = 
+  @ConfigurationProperty(type="long")
+  public static final String TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MAX_MILLIS =
       TEZ_AM_PREFIX + "container.idle.release-timeout-max.millis";
   public static final long
     TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MAX_MILLIS_DEFAULT = 10000l;
@@ -772,7 +833,8 @@ public class TezConfiguration extends Configuration {
    * of containers to provide fast response times for the next DAG.
    */
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_SESSION_MIN_HELD_CONTAINERS = 
+  @ConfigurationProperty(type="integer")
+  public static final String TEZ_AM_SESSION_MIN_HELD_CONTAINERS =
       TEZ_AM_PREFIX + "session.min.held-containers";
   public static final int TEZ_AM_SESSION_MIN_HELD_CONTAINERS_DEFAULT = 0;
 
@@ -795,7 +857,8 @@ public class TezConfiguration extends Configuration {
    * setting.
    */
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_PREEMPTION_PERCENTAGE = 
+  @ConfigurationProperty(type="integer")
+  public static final String TEZ_AM_PREEMPTION_PERCENTAGE =
       TEZ_AM_PREFIX + "preemption.percentage";
   public static final int TEZ_AM_PREEMPTION_PERCENTAGE_DEFAULT = 10;
   
@@ -805,7 +868,8 @@ public class TezConfiguration extends Configuration {
    * RM can act on the released resources and assign new ones to us. Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
-  public static final String TEZ_AM_PREEMPTION_HEARTBEATS_BETWEEN_PREEMPTIONS = 
+  @ConfigurationProperty(type="integer")
+  public static final String TEZ_AM_PREEMPTION_HEARTBEATS_BETWEEN_PREEMPTIONS =
       TEZ_AM_PREFIX + "preemption.heartbeats-between-preemptions";
   public static final int TEZ_AM_PREEMPTION_HEARTBEATS_BETWEEN_PREEMPTIONS_DEFAULT = 3;
 
@@ -831,6 +895,7 @@ public class TezConfiguration extends Configuration {
    * </ol>
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_LIB_URIS = TEZ_PREFIX + "lib.uris";
 
   /**
@@ -846,6 +911,7 @@ public class TezConfiguration extends Configuration {
    *
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AUX_URIS = TEZ_PREFIX + "aux.uris";
 
   /**
@@ -853,7 +919,9 @@ public class TezConfiguration extends Configuration {
    * raw Tez application where classpath is propagated with application
    * via {@link LocalResource}s. This is mainly useful for developer/debugger scenarios.
    */
+  @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_IGNORE_LIB_URIS = TEZ_PREFIX + "ignore.lib.uris";
 
   /**
@@ -863,6 +931,7 @@ public class TezConfiguration extends Configuration {
    * tez-deployment which contains the hadoop libraries.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_USE_CLUSTER_HADOOP_LIBS = TEZ_PREFIX + "use.cluster.hadoop-libs";
   public static final boolean TEZ_USE_CLUSTER_HADOOP_LIBS_DEFAULT = false;
 
@@ -874,6 +943,7 @@ public class TezConfiguration extends Configuration {
    * specified.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_CLUSTER_ADDITIONAL_CLASSPATH_PREFIX =
       TEZ_PREFIX + "cluster.additional.classpath.prefix";
 
@@ -881,6 +951,7 @@ public class TezConfiguration extends Configuration {
    * Session-related properties
    */
   @Private
+  @ConfigurationProperty
   public static final String TEZ_SESSION_PREFIX =
       TEZ_PREFIX + "session.";
 
@@ -891,6 +962,7 @@ public class TezConfiguration extends Configuration {
    * applicable. Otherwise increase the timeout (set to -1 for infinity. Not recommended)
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_SESSION_CLIENT_TIMEOUT_SECS =
       TEZ_SESSION_PREFIX + "client.timeout.secs";
   public static final int TEZ_SESSION_CLIENT_TIMEOUT_SECS_DEFAULT =
@@ -901,6 +973,7 @@ public class TezConfiguration extends Configuration {
    * shutting down. Only relevant in session mode.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_SESSION_AM_DAG_SUBMIT_TIMEOUT_SECS =
       TEZ_SESSION_PREFIX + "am.dag.submit.timeout.secs";
   public static final int TEZ_SESSION_AM_DAG_SUBMIT_TIMEOUT_SECS_DEFAULT =
@@ -910,6 +983,7 @@ public class TezConfiguration extends Configuration {
    * String value. The queue name for all jobs being submitted from a given client.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_QUEUE_NAME = TEZ_PREFIX + "queue.name";
 
   /**
@@ -923,6 +997,7 @@ public class TezConfiguration extends Configuration {
    * Boolean value. Generate debug artifacts like DAG plan in text format.
    */
   @ConfigurationScope(Scope.DAG)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_GENERATE_DEBUG_ARTIFACTS =
       TEZ_PREFIX + "generate.debug.artifacts";
   public static final boolean TEZ_GENERATE_DEBUG_ARTIFACTS_DEFAULT = false;
@@ -940,6 +1015,7 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_TASK_SPECIFIC_LAUNCH_CMD_OPTS_LIST = TEZ_PREFIX + "task-specific" +
       ".launch.cmd-opts.list";
 
@@ -952,6 +1028,7 @@ public class TezConfiguration extends Configuration {
    */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_TASK_SPECIFIC_LAUNCH_CMD_OPTS = TEZ_PREFIX + "task-specific" +
       ".launch.cmd-opts";
 
@@ -973,6 +1050,7 @@ public class TezConfiguration extends Configuration {
    * */
   @Unstable
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_TASK_SPECIFIC_LOG_LEVEL = TEZ_PREFIX + "task-specific" + ".log.level";
 
   /**
@@ -980,6 +1058,7 @@ public class TezConfiguration extends Configuration {
    * Specify the class to use for logging history data
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_HISTORY_LOGGING_SERVICE_CLASS =
       TEZ_PREFIX + "history.logging.service.class";
 
@@ -992,6 +1071,7 @@ public class TezConfiguration extends Configuration {
    * used for {@link TezConfiguration#TEZ_HISTORY_LOGGING_SERVICE_CLASS}
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_SIMPLE_HISTORY_LOGGING_DIR =
       TEZ_PREFIX + "simple.history.logging.dir";
   
@@ -1000,6 +1080,7 @@ public class TezConfiguration extends Configuration {
    * logging gets disabled. The job continues to run after this.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_SIMPLE_HISTORY_LOGGING_MAX_ERRORS =
       TEZ_PREFIX + "simple.history.max.errors";
   public static final int TEZ_SIMPLE_HISTORY_LOGGING_MAX_ERRORS_DEFAULT = 10;
@@ -1009,6 +1090,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="long")
   public static final String YARN_ATS_EVENT_FLUSH_TIMEOUT_MILLIS =
       TEZ_PREFIX + "yarn.ats.event.flush.timeout.millis";
   public static final long YARN_ATS_EVENT_FLUSH_TIMEOUT_MILLIS_DEFAULT =
@@ -1019,6 +1101,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String YARN_ATS_MAX_EVENTS_PER_BATCH =
       TEZ_PREFIX + "yarn.ats.max.events.per.batch";
   public static final int YARN_ATS_MAX_EVENTS_PER_BATCH_DEFAULT = 5;
@@ -1029,11 +1112,13 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String YARN_ATS_MAX_POLLING_TIME_PER_EVENT = TEZ_PREFIX
       + "yarn.ats.max.polling.time.per.event.millis";
   public static final int YARN_ATS_MAX_POLLING_TIME_PER_EVENT_DEFAULT = 10;
 
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String YARN_ATS_ACL_DOMAINS_AUTO_CREATE = TEZ_PREFIX
       + "yarn.ats.acl.domains.auto-create";
   public static final boolean YARN_ATS_ACL_DOMAINS_AUTO_CREATE_DEFAULT = true;
@@ -1050,6 +1135,7 @@ public class TezConfiguration extends Configuration {
    * incomplete DAGs from the previous instance of the app master.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String DAG_RECOVERY_ENABLED =
       TEZ_PREFIX + "dag.recovery.enabled";
   public static final boolean DAG_RECOVERY_ENABLED_DEFAULT = true;
@@ -1059,6 +1145,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String DAG_RECOVERY_FILE_IO_BUFFER_SIZE =
       TEZ_PREFIX + "dag.recovery.io.buffer.size";
   public static final int DAG_RECOVERY_FILE_IO_BUFFER_SIZE_DEFAULT = 8192;
@@ -1067,6 +1154,7 @@ public class TezConfiguration extends Configuration {
    * Int value. Number of recovery events to buffer before flushing them to the recovery log.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String DAG_RECOVERY_MAX_UNFLUSHED_EVENTS =
       TEZ_PREFIX + "dag.recovery.max.unflushed.events";
   public static final int DAG_RECOVERY_MAX_UNFLUSHED_EVENTS_DEFAULT = 100;
@@ -1075,6 +1163,7 @@ public class TezConfiguration extends Configuration {
    * Int value. Interval, in seconds, between flushing recovery data to the recovery log.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String DAG_RECOVERY_FLUSH_INTERVAL_SECS =
       TEZ_PREFIX + "dag.recovery.flush.interval.secs";
   public static final int DAG_RECOVERY_FLUSH_INTERVAL_SECS_DEFAULT = 30;
@@ -1084,6 +1173,7 @@ public class TezConfiguration extends Configuration {
    *  the app master. Primarily used for debugging.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_LOCAL_MODE =
     TEZ_PREFIX + "local.mode";
 
@@ -1094,6 +1184,7 @@ public class TezConfiguration extends Configuration {
    */
   @Private
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_INLINE_TASK_EXECUTION_ENABLED =
     TEZ_AM_PREFIX + "inline.task.execution.enabled";
 
@@ -1108,6 +1199,7 @@ public class TezConfiguration extends Configuration {
    * The maximium number of tasks running in parallel within the app master process.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="integer")
   public static final String TEZ_AM_INLINE_TASK_EXECUTION_MAX_TASKS =
     TEZ_AM_PREFIX + "inline.task.execution.max-tasks";
 
@@ -1133,6 +1225,7 @@ public class TezConfiguration extends Configuration {
    * Boolean value. Configuration to enable/disable ACL checks.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_ACLS_ENABLED = TEZ_AM_PREFIX + "acls.enabled";
   public static final boolean TEZ_AM_ACLS_ENABLED_DEFAULT = true;
 
@@ -1144,6 +1237,7 @@ public class TezConfiguration extends Configuration {
    * groups
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_VIEW_ACLS = TEZ_AM_PREFIX + "view-acls";
 
   /**
@@ -1154,13 +1248,16 @@ public class TezConfiguration extends Configuration {
    * groups
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_MODIFY_ACLS = TEZ_AM_PREFIX + "modify-acls";
 
   /**
    * Boolean value.
    * Disable version check between client and AM/DAG. Default false.
    */
+  @Private
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_DISABLE_CLIENT_VERSION_CHECK = TEZ_AM_PREFIX
       + "disable.client-version-check";
   public static final boolean TEZ_AM_DISABLE_CLIENT_VERSION_CHECK_DEFAULT = false;
@@ -1169,7 +1266,9 @@ public class TezConfiguration extends Configuration {
    * Boolean value.
    * Allow disabling of Timeline Domains even if Timeline is being used.
    */
+  @Private
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_ALLOW_DISABLED_TIMELINE_DOMAINS = TEZ_PREFIX
       + "allow.disabled.timeline-domains";
   public static final boolean TEZ_AM_ALLOW_DISABLED_TIMELINE_DOMAINS_DEFAULT = false;
@@ -1189,6 +1288,7 @@ public class TezConfiguration extends Configuration {
    *   http://uihost:9001/#/tez-app/application_1421880306565_0001/
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_AM_TEZ_UI_HISTORY_URL_TEMPLATE = TEZ_AM_PREFIX
       + "tez-ui.history-url.template";
   public static final String TEZ_AM_TEZ_UI_HISTORY_URL_TEMPLATE_DEFAULT =
@@ -1202,6 +1302,7 @@ public class TezConfiguration extends Configuration {
    * be specified.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty
   public static final String TEZ_HISTORY_URL_BASE = TEZ_PREFIX
       + "tez-ui.history-url.base";
 
@@ -1211,6 +1312,7 @@ public class TezConfiguration extends Configuration {
    * updates for running application.
    */
   @ConfigurationScope(Scope.AM)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_AM_WEBSERVICE_ENABLE = TEZ_AM_PREFIX
       + "tez-ui.webservice.enable";
   public static final boolean TEZ_AM_WEBSERVICE_ENABLE_DEFAULT = true;
@@ -1240,6 +1342,7 @@ public class TezConfiguration extends Configuration {
    * Status Poll interval in Milliseconds used when getting DAG status with timeout.
    */
   @ConfigurationScope(Scope.DAG)
+  @ConfigurationProperty(type="long")
   public static final String TEZ_DAG_STATUS_POLLINTERVAL_MS = TEZ_PREFIX
       + "dag.status.pollinterval-ms";
   public static final long TEZ_DAG_STATUS_POLLINTERVAL_MS_DEFAULT = 500;
@@ -1248,7 +1351,9 @@ public class TezConfiguration extends Configuration {
    * Long value.
    * Time to wait (in seconds) for apps to complete on MiniTezCluster shutdown.
    */
+  @Private
   @ConfigurationScope(Scope.TEST)
+  @ConfigurationProperty(type="long")
   public static final String TEZ_TEST_MINI_CLUSTER_APP_WAIT_ON_SHUTDOWN_SECS =
       TEZ_PREFIX + "test.minicluster.app.wait.on.shutdown.secs";
   public static final long TEZ_TEST_MINI_CLUSTER_APP_WAIT_ON_SHUTDOWN_SECS_DEFAULT = 30;
@@ -1260,6 +1365,7 @@ public class TezConfiguration extends Configuration {
    */
   @Private
   @ConfigurationScope(Scope.CLIENT)
+  @ConfigurationProperty(type="long")
   public static final String TEZ_CLIENT_DIAGNOSTICS_WAIT_TIMEOUT_MS =
       TEZ_PREFIX + "client.diagnostics.wait.timeout-ms";
   @Private
@@ -1273,6 +1379,7 @@ public class TezConfiguration extends Configuration {
    */
   @Private
   @ConfigurationScope(Scope.CLIENT)
+  @ConfigurationProperty
   public static final String TEZ_CLIENT_JAVA_OPTS_CHECKER_CLASS =
       TEZ_PREFIX + "java.opts.checker.class";
 
@@ -1282,6 +1389,7 @@ public class TezConfiguration extends Configuration {
    */
   @Private
   @ConfigurationScope(Scope.CLIENT)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_CLIENT_JAVA_OPTS_CHECKER_ENABLED =
       TEZ_PREFIX + "java.opts.checker.enabled";
   public static final boolean TEZ_CLIENT_JAVA_OPTS_CHECKER_ENABLED_DEFAULT = true;
@@ -1292,8 +1400,8 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.CLIENT)
+  @ConfigurationProperty(type="long")
   public static final String TEZ_CLIENT_HARD_KILL_TIMEOUT_MS = TEZ_PREFIX + "client.timeout-ms";
-
   public static final long TEZ_CLIENT_HARD_KILL_TIMEOUT_MS_DEFAULT = 30 * 1000L;
 
   /**
@@ -1302,7 +1410,7 @@ public class TezConfiguration extends Configuration {
    * Expert level setting.
    */
   @ConfigurationScope(Scope.CLIENT)
+  @ConfigurationProperty(type="boolean")
   public static final String TEZ_CLIENT_ASYNCHRONOUS_STOP = TEZ_PREFIX + "client.asynchronous-stop";
-
   public static final boolean TEZ_CLIENT_ASYNCHRONOUS_STOP_DEFAULT = true;
 }

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-dist/pom.xml
----------------------------------------------------------------------
diff --git a/tez-dist/pom.xml b/tez-dist/pom.xml
index 9c7fa61..0605c63 100644
--- a/tez-dist/pom.xml
+++ b/tez-dist/pom.xml
@@ -30,6 +30,11 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.tez</groupId>
+      <artifactId>tez-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tez</groupId>
       <artifactId>tez-dag</artifactId>
       <version>${project.version}</version>
     </dependency>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-runtime-library/pom.xml
----------------------------------------------------------------------
diff --git a/tez-runtime-library/pom.xml b/tez-runtime-library/pom.xml
index 239d62d..efb9c12 100644
--- a/tez-runtime-library/pom.xml
+++ b/tez-runtime-library/pom.xml
@@ -138,4 +138,36 @@
       </plugin>
     </plugins>
   </build>
+
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <reportSets>
+          <reportSet>
+            <id>configgen</id>
+            <configuration>
+              <doclet>org.apache.tez.tools.javadoc.doclet.ConfigStandardDoclet</doclet>
+              <docletArtifacts>
+                <docletArtifact>
+                  <groupId>org.apache.tez</groupId>
+                  <artifactId>tez-javadoc-tools</artifactId>
+                  <version>${project.version}</version>
+                </docletArtifact>
+              </docletArtifacts>
+              <destDir>apidocs/configs</destDir>
+              <name>TezConfigGenerator</name>
+              <description>Tez Configuration documentation</description>
+            </configuration>
+            <reports>
+              <report>javadoc</report>
+              <report>aggregate</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+    </plugins>
+  </reporting>
+
 </project>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-runtime-library/src/main/java/org/apache/tez/runtime/library/api/TezRuntimeConfiguration.java
----------------------------------------------------------------------
diff --git a/tez-runtime-library/src/main/java/org/apache/tez/runtime/library/api/TezRuntimeConfiguration.java b/tez-runtime-library/src/main/java/org/apache/tez/runtime/library/api/TezRuntimeConfiguration.java
index 5d4ed88..a84448f 100644
--- a/tez-runtime-library/src/main/java/org/apache/tez/runtime/library/api/TezRuntimeConfiguration.java
+++ b/tez-runtime-library/src/main/java/org/apache/tez/runtime/library/api/TezRuntimeConfiguration.java
@@ -30,6 +30,8 @@ import org.apache.hadoop.classification.InterfaceAudience.Public;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.apache.hadoop.classification.InterfaceStability.Unstable;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.tez.common.annotation.ConfigurationClass;
+import org.apache.tez.common.annotation.ConfigurationProperty;
 import org.apache.tez.runtime.library.conf.OrderedPartitionedKVOutputConfig.SorterImpl;
 
 /**
@@ -37,11 +39,14 @@ import org.apache.tez.runtime.library.conf.OrderedPartitionedKVOutputConfig.Sort
  * <p/>
  * Note for developers: Whenever a new key is added to this file, it must also be added to the set of
  * known tezRuntimeKeys.
+ * @see <a href="../../../../../../configs/TezRuntimeConfiguration.html">Detailed Configuration Information</a>
+ * @see <a href="../../../../../configs/tez-runtime-default-template.xml">XML-based Config Template</a>
  */
 
 // TODO EVENTUALLY A description for each property.
 @Public
 @Evolving
+@ConfigurationClass(templateFileName = "tez-runtime-default-template.xml")
 public class TezRuntimeConfiguration {
 
   private static final String TEZ_RUNTIME_PREFIX = "tez.runtime.";
@@ -69,6 +74,7 @@ public class TezRuntimeConfiguration {
   /**
    * Configuration key to enable/disable IFile readahead.
    */
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_IFILE_READAHEAD = TEZ_RUNTIME_PREFIX +
       "ifile.readahead";
   public static final boolean TEZ_RUNTIME_IFILE_READAHEAD_DEFAULT = true;
@@ -76,6 +82,7 @@ public class TezRuntimeConfiguration {
   /**
    * Configuration key to set the IFile readahead length in bytes.
    */
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_IFILE_READAHEAD_BYTES = TEZ_RUNTIME_PREFIX +
       "ifile.readahead.bytes";
   public static final int TEZ_RUNTIME_IFILE_READAHEAD_BYTES_DEFAULT =
@@ -91,20 +98,24 @@ public class TezRuntimeConfiguration {
   public static final String TEZ_RUNTIME_IO_FILE_BUFFER_SIZE = "io.file.buffer.size";
 
 
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_IO_SORT_FACTOR = TEZ_RUNTIME_PREFIX +
       "io.sort.factor";
   public static final int TEZ_RUNTIME_IO_SORT_FACTOR_DEFAULT = 100;
 
 
+  @ConfigurationProperty(type = "float")
   public static final String TEZ_RUNTIME_SORT_SPILL_PERCENT = TEZ_RUNTIME_PREFIX +
       "sort.spill.percent";
   public static final float TEZ_RUNTIME_SORT_SPILL_PERCENT_DEFAULT = 0.8f;
 
 
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_IO_SORT_MB = TEZ_RUNTIME_PREFIX + "io.sort.mb";
   public static final int TEZ_RUNTIME_IO_SORT_MB_DEFAULT = 100;
 
 
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_INDEX_CACHE_MEMORY_LIMIT_BYTES = TEZ_RUNTIME_PREFIX +
       "index.cache.memory.limit.bytes";
   public static final int TEZ_RUNTIME_INDEX_CACHE_MEMORY_LIMIT_BYTES_DEFAULT =
@@ -112,6 +123,7 @@ public class TezRuntimeConfiguration {
 
 
   // TODO Use the default value
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_COMBINE_MIN_SPILLS = TEZ_RUNTIME_PREFIX +
       "combine.min.spills";
   public static final int TEZ_RUNTIME_COMBINE_MIN_SPILLS_DEFAULT = 3;
@@ -125,10 +137,12 @@ public class TezRuntimeConfiguration {
    *    - PIPELINED ( default )
    *    {@link org.apache.tez.runtime.library.conf.OrderedPartitionedKVOutputConfig.SorterImpl}
    */
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_SORTER_CLASS = TEZ_RUNTIME_PREFIX +
       "sorter.class";
   public static final String TEZ_RUNTIME_SORTER_CLASS_DEFAULT = SorterImpl.PIPELINED.name();
 
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_PIPELINED_SORTER_SORT_THREADS = TEZ_RUNTIME_PREFIX +
       "pipelined.sorter.sort.threads";
   public static final int TEZ_RUNTIME_PIPELINED_SORTER_SORT_THREADS_DEFAULT = 2;
@@ -137,6 +151,7 @@ public class TezRuntimeConfiguration {
    * Report partition statistics (e.g better scheduling in ShuffleVertexManager). TEZ-2496
    * This can be enabled/disabled at vertex level.
    */
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_REPORT_PARTITION_STATS = TEZ_RUNTIME_PREFIX +
       "report.partition.stats";
   public static final boolean TEZ_RUNTIME_REPORT_PARTITION_STATS_DEFAULT = true;
@@ -144,6 +159,7 @@ public class TezRuntimeConfiguration {
   /**
    * Size of the buffer to use if not writing directly to disk.
    */
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_UNORDERED_OUTPUT_BUFFER_SIZE_MB = TEZ_RUNTIME_PREFIX +
       "unordered.output.buffer.size-mb";
   public static final int TEZ_RUNTIME_UNORDERED_OUTPUT_BUFFER_SIZE_MB_DEFAULT = 100;
@@ -153,6 +169,7 @@ public class TezRuntimeConfiguration {
    * This is only meant to be used by unit tests for now.
    */
   @Private
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_UNORDERED_OUTPUT_MAX_PER_BUFFER_SIZE_BYTES =
       TEZ_RUNTIME_PREFIX +
           "unordered.output.max-per-buffer.size-bytes";
@@ -161,125 +178,140 @@ public class TezRuntimeConfiguration {
    * Specifies a partitioner class, which is used in Tez Runtime components
    * like OnFileSortedOutput
    */
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_PARTITIONER_CLASS =
       TEZ_RUNTIME_PREFIX + "partitioner.class";
 
   /**
    * Specifies a combiner class (primarily for Shuffle)
    */
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_COMBINER_CLASS = TEZ_RUNTIME_PREFIX + "combiner.class";
 
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_PARALLEL_COPIES = TEZ_RUNTIME_PREFIX +
       "shuffle.parallel.copies";
   public static final int TEZ_RUNTIME_SHUFFLE_PARALLEL_COPIES_DEFAULT = 20;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_FETCH_FAILURES_LIMIT = TEZ_RUNTIME_PREFIX +
       "shuffle.fetch.failures.limit";
   public static final int TEZ_RUNTIME_SHUFFLE_FETCH_FAILURES_LIMIT_DEFAULT = 5;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_FETCH_MAX_TASK_OUTPUT_AT_ONCE =
       TEZ_RUNTIME_PREFIX +
           "shuffle.fetch.max.task.output.at.once";
   public final static int TEZ_RUNTIME_SHUFFLE_FETCH_MAX_TASK_OUTPUT_AT_ONCE_DEFAULT
       = 20;
 
-
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_SHUFFLE_NOTIFY_READERROR = TEZ_RUNTIME_PREFIX +
       "shuffle.notify.readerror";
   public static final boolean TEZ_RUNTIME_SHUFFLE_NOTIFY_READERROR_DEFAULT = true;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_CONNECT_TIMEOUT = TEZ_RUNTIME_PREFIX +
       "shuffle.connect.timeout";
   public static final int TEZ_RUNTIME_SHUFFLE_STALLED_COPY_TIMEOUT_DEFAULT =
       3 * 60 * 1000;
 
-
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_SHUFFLE_KEEP_ALIVE_ENABLED = TEZ_RUNTIME_PREFIX +
       "shuffle.keep-alive.enabled";
   public static final boolean TEZ_RUNTIME_SHUFFLE_KEEP_ALIVE_ENABLED_DEFAULT = false;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_KEEP_ALIVE_MAX_CONNECTIONS = TEZ_RUNTIME_PREFIX +
       "shuffle.keep-alive.max.connections";
   public static final int TEZ_RUNTIME_SHUFFLE_KEEP_ALIVE_MAX_CONNECTIONS_DEFAULT = 20;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_READ_TIMEOUT =
       TEZ_RUNTIME_PREFIX + "shuffle.read.timeout";
   public final static int TEZ_RUNTIME_SHUFFLE_READ_TIMEOUT_DEFAULT =
       3 * 60 * 1000;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_BUFFER_SIZE =
       TEZ_RUNTIME_PREFIX + "shuffle.buffersize";
   public final static int TEZ_RUNTIME_SHUFFLE_BUFFER_SIZE_DEFAULT =
       8 * 1024;
 
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_SHUFFLE_USE_ASYNC_HTTP = TEZ_RUNTIME_PREFIX +
       "shuffle.use.async.http";
   public static final boolean TEZ_RUNTIME_SHUFFLE_USE_ASYNC_HTTP_DEFAULT = false;
 
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_SHUFFLE_ENABLE_SSL = TEZ_RUNTIME_PREFIX +
       "shuffle.ssl.enable";
   public static final boolean TEZ_RUNTIME_SHUFFLE_ENABLE_SSL_DEFAULT = false;
 
-
+  @ConfigurationProperty(type = "float")
   public static final String TEZ_RUNTIME_SHUFFLE_FETCH_BUFFER_PERCENT = TEZ_RUNTIME_PREFIX +
       "shuffle.fetch.buffer.percent";
   public static final float TEZ_RUNTIME_SHUFFLE_FETCH_BUFFER_PERCENT_DEFAULT =
       0.90f;
 
-
+  @ConfigurationProperty(type = "float")
   public static final String TEZ_RUNTIME_SHUFFLE_MEMORY_LIMIT_PERCENT = TEZ_RUNTIME_PREFIX +
       "shuffle.memory.limit.percent";
   public static final float TEZ_RUNTIME_SHUFFLE_MEMORY_LIMIT_PERCENT_DEFAULT =
       0.25f;
 
   // Rename to fraction
+  @ConfigurationProperty(type = "float")
   public static final String TEZ_RUNTIME_SHUFFLE_MERGE_PERCENT = TEZ_RUNTIME_PREFIX +
       "shuffle.merge.percent";
   public static final float TEZ_RUNTIME_SHUFFLE_MERGE_PERCENT_DEFAULT = 0.90f;
 
-
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_SHUFFLE_MEMTOMEM_SEGMENTS = TEZ_RUNTIME_PREFIX +
       "shuffle.memory-to-memory.segments";
 
-
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_SHUFFLE_ENABLE_MEMTOMEM = TEZ_RUNTIME_PREFIX +
       "shuffle.memory-to-memory.enable";
   public static final boolean TEZ_RUNTIME_SHUFFLE_ENABLE_MEMTOMEM_DEFAULT =
       false;
 
-
+  @ConfigurationProperty(type = "float")
   public static final String TEZ_RUNTIME_INPUT_POST_MERGE_BUFFER_PERCENT = TEZ_RUNTIME_PREFIX +
       "task.input.post-merge.buffer.percent";
   public static final float TEZ_RUNTIME_INPUT_BUFFER_PERCENT_DEFAULT = 0.0f;
 
 
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_GROUP_COMPARATOR_CLASS = TEZ_RUNTIME_PREFIX +
       "group.comparator.class";
 
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_INTERNAL_SORTER_CLASS = TEZ_RUNTIME_PREFIX +
       "internal.sorter.class";
 
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_KEY_COMPARATOR_CLASS =
       TEZ_RUNTIME_PREFIX + "key.comparator.class";
 
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_KEY_CLASS = TEZ_RUNTIME_PREFIX + "key.class";
 
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_VALUE_CLASS = TEZ_RUNTIME_PREFIX + "value.class";
 
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_COMPRESS = TEZ_RUNTIME_PREFIX + "compress";
 
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_COMPRESS_CODEC = TEZ_RUNTIME_PREFIX + "compress.codec";
 
   // TODO Move this key to MapReduce
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_KEY_SECONDARY_COMPARATOR_CLASS =
       TEZ_RUNTIME_PREFIX + "key.secondary.comparator.class";
 
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_EMPTY_PARTITION_INFO_VIA_EVENTS_ENABLED =
       TEZ_RUNTIME_PREFIX +
           "empty.partitions.info-via-events.enabled";
@@ -288,6 +320,7 @@ public class TezRuntimeConfiguration {
   /**
    * If the shuffle input is on the local host bypass the http fetch and access the files directly
    */
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_OPTIMIZE_LOCAL_FETCH = TEZ_RUNTIME_PREFIX + "optimize.local.fetch";
   public static final boolean TEZ_RUNTIME_OPTIMIZE_LOCAL_FETCH_DEFAULT = true;
 
@@ -298,6 +331,7 @@ public class TezRuntimeConfiguration {
    * Ensure to set tez.runtime.enable.final-merge.in.output=false.
    * Speculative execution needs to be turned off when using this parameter. //TODO: TEZ-2132
    */
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_PIPELINED_SHUFFLE_ENABLED =
       TEZ_RUNTIME_PREFIX + "pipelined-shuffle.enabled";
   public static final boolean TEZ_RUNTIME_PIPELINED_SHUFFLE_ENABLED_DEFAULT = false;
@@ -306,6 +340,7 @@ public class TezRuntimeConfiguration {
    * Expert level setting. Enable final merge in ordered (defaultsorter/pipelinedsorter) outputs.
    * Speculative execution needs to be turned off when disabling this parameter. //TODO: TEZ-2132
    */
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_ENABLE_FINAL_MERGE_IN_OUTPUT =
       TEZ_RUNTIME_PREFIX + "enable.final-merge.in.output";
   public static final boolean TEZ_RUNTIME_ENABLE_FINAL_MERGE_IN_OUTPUT_DEFAULT = true;
@@ -314,6 +349,7 @@ public class TezRuntimeConfiguration {
   /**
    * Share data fetched between tasks running on the same host if applicable
    */
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_OPTIMIZE_SHARED_FETCH = TEZ_RUNTIME_PREFIX
       + "optimize.shared.fetch";
 
@@ -328,6 +364,7 @@ public class TezRuntimeConfiguration {
    */
   @Unstable
   @Private
+  @ConfigurationProperty(type = "boolean")
   public static final String TEZ_RUNTIME_CLEANUP_FILES_ON_INTERRUPT = TEZ_RUNTIME_PREFIX
       + "cleanup.files.on.interrupt";
   public static final boolean TEZ_RUNTIME_CLEANUP_FILES_ON_INTERRUPT_DEFAULT = false;
@@ -339,12 +376,14 @@ public class TezRuntimeConfiguration {
    * Value: Boolean
    * Whether to publish configuration information to History logger. Default false.
    */
+  @ConfigurationProperty
   public static final String TEZ_RUNTIME_CONVERT_USER_PAYLOAD_TO_HISTORY_TEXT =
       TEZ_RUNTIME_PREFIX + "convert.user-payload.to.history-text";
   public static final boolean TEZ_RUNTIME_CONVERT_USER_PAYLOAD_TO_HISTORY_TEXT_DEFAULT = false;
 
   @Unstable
   @Private
+  @ConfigurationProperty(type = "integer")
   public static final String TEZ_RUNTIME_RECORDS_BEFORE_PROGRESS = TEZ_RUNTIME_PREFIX +
       "merge.progress.records";
   public static final long TEZ_RUNTIME_RECORDS_BEFORE_PROGRESS_DEFAULT = 10000;
@@ -448,4 +487,4 @@ public class TezRuntimeConfiguration {
   public static Map<String, String> getOtherConfigDefaults() {
     return Collections.unmodifiableMap(otherConfMap);
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-tools/pom.xml
----------------------------------------------------------------------
diff --git a/tez-tools/pom.xml b/tez-tools/pom.xml
index af1d304..bf3053e 100644
--- a/tez-tools/pom.xml
+++ b/tez-tools/pom.xml
@@ -28,7 +28,9 @@
 
   <modules>
     <module>analyzers</module>
+    <module>tez-javadoc-tools</module>
   </modules>
+
   <build>
     <plugins>
       <plugin>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-tools/tez-javadoc-tools/findbugs-exclude.xml
----------------------------------------------------------------------
diff --git a/tez-tools/tez-javadoc-tools/findbugs-exclude.xml b/tez-tools/tez-javadoc-tools/findbugs-exclude.xml
new file mode 100644
index 0000000..ad8f6e4
--- /dev/null
+++ b/tez-tools/tez-javadoc-tools/findbugs-exclude.xml
@@ -0,0 +1,22 @@
+<!--
+  Licensed 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. See accompanying LICENSE file.
+-->
+<FindBugsFilter>
+
+  <Match>
+    <Class name="org.apache.tez.tools.javadoc.model.ConfigProperty"/>
+    <Field name="validValues"/>
+    <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
+  </Match>
+
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-tools/tez-javadoc-tools/pom.xml
----------------------------------------------------------------------
diff --git a/tez-tools/tez-javadoc-tools/pom.xml b/tez-tools/tez-javadoc-tools/pom.xml
new file mode 100644
index 0000000..11290cc
--- /dev/null
+++ b/tez-tools/tez-javadoc-tools/pom.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed 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. See accompanying LICENSE file.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.tez</groupId>
+    <artifactId>tez-tools</artifactId>
+    <version>0.8.1-SNAPSHOT</version>
+  </parent>
+  <artifactId>tez-javadoc-tools</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tez</groupId>
+      <artifactId>tez-api</artifactId>
+    </dependency>
+  </dependencies>
+
+  <profiles>
+    <profile>
+      <id>platform-macosx</id>
+      <activation>
+        <file>
+          <exists>${java.home}/../Classes/classes.jar</exists>
+        </file>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>com.sun</groupId>
+          <artifactId>tools</artifactId>
+          <version>${java.version}</version>
+          <scope>system</scope>
+          <systemPath>${java.home}/../Classes/classes.jar</systemPath>
+        </dependency>
+      </dependencies>
+    </profile>
+    <profile>
+      <id>other-os</id>
+      <activation>
+        <file>
+          <exists>${java.home}/../lib/tools.jar</exists>
+        </file>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>com.sun</groupId>
+          <artifactId>tools</artifactId>
+          <version>${java.version}</version>
+          <scope>system</scope>
+          <systemPath>${java.home}/../lib/tools.jar</systemPath>
+        </dependency>
+      </dependencies>
+    </profile>
+  </profiles>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/doclet/ConfigStandardDoclet.java
----------------------------------------------------------------------
diff --git a/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/doclet/ConfigStandardDoclet.java b/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/doclet/ConfigStandardDoclet.java
new file mode 100644
index 0000000..6cc9ced
--- /dev/null
+++ b/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/doclet/ConfigStandardDoclet.java
@@ -0,0 +1,233 @@
+/**
+ * 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.tez.tools.javadoc.doclet;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
+import org.apache.hadoop.classification.InterfaceStability.Unstable;
+import org.apache.tez.common.annotation.ConfigurationClass;
+import org.apache.tez.common.annotation.ConfigurationProperty;
+import org.apache.tez.tools.javadoc.model.Config;
+import org.apache.tez.tools.javadoc.model.ConfigProperty;
+import org.apache.tez.tools.javadoc.util.HtmlWriter;
+import org.apache.tez.tools.javadoc.util.XmlWriter;
+
+import com.sun.javadoc.AnnotationDesc;
+import com.sun.javadoc.AnnotationDesc.ElementValuePair;
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.DocErrorReporter;
+import com.sun.javadoc.FieldDoc;
+import com.sun.javadoc.LanguageVersion;
+import com.sun.javadoc.RootDoc;
+import com.sun.tools.doclets.standard.Standard;
+
+public class ConfigStandardDoclet {
+
+  private static final String DEBUG_SWITCH = "-debug";
+  private static boolean debugMode = false;
+
+  public static LanguageVersion languageVersion() {
+    return LanguageVersion.JAVA_1_5;
+  }
+
+  private static void logMessage(String message) {
+    if (!debugMode) {
+      return;
+    }
+    System.out.println(message);
+  }
+
+  public static boolean start(RootDoc root) {
+    //look for debug flag
+    for (String[] opts : root.options()) {
+      for (String opt : opts) {
+        if (opt.equals(DEBUG_SWITCH)) {
+          debugMode = true;
+        }
+      }
+    }
+
+    logMessage("Running doclet " + ConfigStandardDoclet.class.getSimpleName());
+    ClassDoc[] classes = root.classes();
+    for (int i = 0; i < classes.length; ++i) {
+      processDoc(classes[i]);
+    }
+
+    return true;
+  }
+
+  private static void processDoc(ClassDoc doc) {
+    logMessage("Parsing : " + doc);
+    if (!doc.isClass()) {
+      logMessage("Ignoring non-class: " + doc);
+      return;
+    }
+
+    AnnotationDesc[] annotations = doc.annotations();
+    boolean isConfigClass = false;
+    String templateName = null;
+    for (AnnotationDesc annotation : annotations) {
+      logMessage("Checking annotation: " + annotation.annotationType());
+      if (annotation.annotationType().qualifiedTypeName().equals(
+          ConfigurationClass.class.getName())) {
+        isConfigClass = true;
+        for (ElementValuePair element : annotation.elementValues()) {
+          if (element.element().name().equals("templateFileName")) {
+            templateName = stripQuotes(element.value().toString());
+          }
+        }
+        break;
+      }
+    }
+
+    if (!isConfigClass) {
+      logMessage("Ignoring non-config class: " + doc);
+      return;
+    }
+
+    logMessage("Processing config class: " + doc);
+    Config config = new Config(doc.name(), templateName);
+    Map<String, ConfigProperty> configProperties = config.configProperties;
+
+    FieldDoc[] fields = doc.fields();
+    for (FieldDoc field : fields) {
+      if (field.isPrivate()) {
+        logMessage("Skipping private field: " + field);
+        continue;
+      }
+      if (!field.isStatic()) {
+        logMessage("Skipping non-static field: " + field);
+        continue;
+      }
+
+      if (field.name().endsWith("_PREFIX")) {
+        logMessage("Skipping non-config prefix constant field: " + field);
+        continue;
+      }
+      if (field.name().equals("TEZ_SITE_XML")) {
+        logMessage("Skipping constant field: " + field);
+        continue;
+      }
+
+      if (field.name().endsWith("_DEFAULT")) {
+
+        String name = field.name().substring(0,
+            field.name().lastIndexOf("_DEFAULT"));
+        if (!configProperties.containsKey(name)) {
+          configProperties.put(name, new ConfigProperty());
+        }
+        ConfigProperty configProperty = configProperties.get(name);
+        if (field.constantValue() == null) {
+          logMessage("Got null constant value"
+              + ", name=" + name
+              + ", field=" + field.name()
+              + ", val=" + field.constantValueExpression());
+          configProperty.defaultValue = field.constantValueExpression();
+        } else {
+          configProperty.defaultValue = field.constantValue().toString();
+        }
+        configProperty.inferredType = field.type().simpleTypeName();
+
+        if (name.equals("TEZ_AM_STAGING_DIR") && configProperty.defaultValue != null) {
+          String defaultValue = configProperty.defaultValue;
+          defaultValue = defaultValue.replace(System.getProperty("user.name"), "${user.name}");
+          configProperty.defaultValue = defaultValue;
+        }
+
+        continue;
+      }
+
+      String name = field.name();
+      if (!configProperties.containsKey(name)) {
+        configProperties.put(name, new ConfigProperty());
+      }
+      ConfigProperty configProperty = configProperties.get(name);
+      configProperty.propertyName = field.constantValue().toString();
+
+      AnnotationDesc[] annotationDescs = field.annotations();
+
+      for (AnnotationDesc annotationDesc : annotationDescs) {
+
+        if (annotationDesc.annotationType().qualifiedTypeName().equals(
+            Private.class.getCanonicalName())) {
+          configProperty.isPrivate = true;
+        }
+        if (annotationDesc.annotationType().qualifiedTypeName().equals(
+            Unstable.class.getCanonicalName())) {
+          configProperty.isUnstable = true;
+        }
+        if (annotationDesc.annotationType().qualifiedTypeName().equals(
+            Evolving.class.getCanonicalName())) {
+          configProperty.isEvolving = true;
+        }
+        if (annotationDesc.annotationType().qualifiedTypeName().equals(
+            ConfigurationProperty.class.getCanonicalName())) {
+          configProperty.isValidConfigProp = true;
+
+          boolean foundType = false;
+          for (ElementValuePair element : annotationDesc.elementValues()) {
+            if (element.element().name().equals("type")) {
+              configProperty.type = stripQuotes(element.value().toString());
+              foundType = true;
+            } else {
+              logMessage("Unhandled annotation property: " + element.element().name());
+            }
+          }
+        }
+      }
+
+      configProperty.description = field.commentText();
+
+    }
+
+    HtmlWriter writer = new HtmlWriter();
+    try {
+      writer.write(config);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+
+    XmlWriter xmlWriter = new XmlWriter();
+    try {
+      xmlWriter.write(config);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+
+  }
+
+  private static String stripQuotes(String s) {
+    if (s.charAt(0) == '"' && s.charAt(s.length()-1) == '"') {
+      return s.substring(1, s.length()-1);
+    }
+    return s;
+  }
+
+  public static int optionLength(String option) {
+    return Standard.optionLength(option);
+  }
+
+  public static boolean validOptions(String options[][], DocErrorReporter reporter) {
+    return true;
+  }
+}

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/Config.java
----------------------------------------------------------------------
diff --git a/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/Config.java b/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/Config.java
new file mode 100644
index 0000000..604d48a
--- /dev/null
+++ b/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/Config.java
@@ -0,0 +1,40 @@
+/**
+ * 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.tez.tools.javadoc.model;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+public class Config {
+
+  public final String templateName;
+  public final String configName;
+  public Map<String, ConfigProperty> configProperties;
+
+  public Config(String configName, String templateName) {
+    this.configName = configName;
+    this.templateName = templateName;
+    this.configProperties = new TreeMap<String, ConfigProperty>();
+  }
+
+  public Config() {
+    this(null, null);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/tez/blob/50df8651/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/ConfigProperty.java
----------------------------------------------------------------------
diff --git a/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/ConfigProperty.java b/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/ConfigProperty.java
new file mode 100644
index 0000000..94c7e27
--- /dev/null
+++ b/tez-tools/tez-javadoc-tools/src/main/java/org/apache/tez/tools/javadoc/model/ConfigProperty.java
@@ -0,0 +1,46 @@
+/**
+ * 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.tez.tools.javadoc.model;
+
+public class ConfigProperty {
+
+  public String propertyName;
+  public String defaultValue;
+  public String description;
+  public String type = "string";
+  public boolean isPrivate = false;
+  public boolean isUnstable = false;
+  public boolean isEvolving = false;
+  public boolean isValidConfigProp = false;
+  public String[] validValues;
+  public String inferredType;
+
+  @Override
+  public String toString() {
+    return "name=" + propertyName
+        + ", defaultValue=" + defaultValue
+        + ", description=" + description
+        + ", type=" + type
+        + ", private=" + isPrivate
+        + ", validValues=" + (validValues == null ? "null" : validValues)
+        + ", isConfigProp=" + isValidConfigProp;
+  }
+}
+
+