You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/09/09 21:22:52 UTC

[04/10] ambari git commit: AMBARI-18089 - Create Documentation Around All Options In ambari.properties (jonathanhurley)

AMBARI-18089 - Create Documentation Around All Options In ambari.properties (jonathanhurley)


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

Branch: refs/heads/branch-2.5
Commit: cc43870d28f802cbe453221ff116618b58dfa20e
Parents: 5630b5e
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Aug 15 23:57:51 2016 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Sep 9 17:20:40 2016 -0400

----------------------------------------------------------------------
 .../server/orm/InMemoryDefaultTestModule.java   |   10 +-
 .../funtest/server/tests/ServerTestBase.java    |   56 +-
 ambari-server/docs/configuration/index.md       |  303 ++++
 .../org/apache/ambari/annotations/Markdown.java |   30 +-
 .../checks/DatabaseConsistencyCheckHelper.java  |    2 +-
 .../server/configuration/Configuration.java     | 1393 ++++++++++++++----
 .../server/configuration/index_template.md      |   63 +
 .../ambari/server/controller/AmbariServer.java  |    2 +-
 .../controller/utilities/DatabaseChecker.java   |    2 +-
 .../server/configuration/ConfigurationTest.java |   40 +-
 .../utilities/DatabaseCheckerTest.java          |    8 +-
 .../security/ldap/LdapPerformanceTest.java      |    2 +-
 12 files changed, 1573 insertions(+), 338 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cc43870d/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/orm/InMemoryDefaultTestModule.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/orm/InMemoryDefaultTestModule.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/orm/InMemoryDefaultTestModule.java
index 7b49611..ed78ded 100644
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/orm/InMemoryDefaultTestModule.java
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/orm/InMemoryDefaultTestModule.java
@@ -69,11 +69,11 @@ public class InMemoryDefaultTestModule extends AbstractModule {
       sharedResourcesDir = ClassLoader.getSystemClassLoader().getResource("").getPath();
     }
 
-    properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE_KEY, "in-memory");
-    properties.setProperty(Configuration.METADATA_DIR_PATH, stacks);
-    properties.setProperty(Configuration.SERVER_VERSION_FILE, version);
-    properties.setProperty(Configuration.OS_VERSION_KEY, "centos6");
-    properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, sharedResourcesDir);
+    properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE.getKey(), "in-memory");
+    properties.setProperty(Configuration.METADATA_DIR_PATH.getKey(), stacks);
+    properties.setProperty(Configuration.SERVER_VERSION_FILE.getKey(), version);
+    properties.setProperty(Configuration.OS_VERSION.getKey(), "centos6");
+    properties.setProperty(Configuration.SHARED_RESOURCES_DIR.getKey(), sharedResourcesDir);
 
     try {
       install(new BeanDefinitionsCachingTestControllerModule(properties));

http://git-wip-us.apache.org/repos/asf/ambari/blob/cc43870d/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
index e7683cf..a1d672e 100644
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
@@ -18,21 +18,6 @@
 
 package org.apache.ambari.funtest.server.tests;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import org.apache.ambari.funtest.server.LocalAmbariServer;
-import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.ControllerModule;
-import org.apache.ambari.server.orm.DBAccessor;
-import org.apache.commons.codec.binary.Base64;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-
 import java.io.File;
 import java.io.IOException;
 import java.sql.DriverManager;
@@ -40,13 +25,26 @@ import java.sql.SQLException;
 import java.sql.SQLNonTransientConnectionException;
 import java.util.Properties;
 
+import org.apache.ambari.funtest.server.LocalAmbariServer;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.ControllerModule;
+import org.apache.ambari.server.orm.DBAccessor;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
-import org.apache.http.HttpStatus;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
 
 /**
  * Base test infrastructure.
@@ -99,19 +97,19 @@ public class ServerTestBase {
     public static void setupTest() throws Exception {
         if (!isInitialized) {
             Properties properties = new Properties();
-            properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE_KEY, "remote");
-            properties.setProperty(Configuration.SERVER_JDBC_URL_KEY, Configuration.JDBC_IN_MEMORY_URL);
-            properties.setProperty(Configuration.SERVER_JDBC_DRIVER_KEY, Configuration.JDBC_IN_MEMROY_DRIVER);
-            properties.setProperty(Configuration.METADATA_DIR_PATH, "src/test/resources/stacks");
-            properties.setProperty(Configuration.SERVER_VERSION_FILE, "src/test/resources/version");
-            properties.setProperty(Configuration.OS_VERSION_KEY, "centos6");
-            properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, "src/test/resources/");
-
-            properties.setProperty(Configuration.AGENT_USE_SSL, "false");
-            properties.setProperty(Configuration.CLIENT_API_PORT_KEY, Integer.toString(serverPort));
-            properties.setProperty(Configuration.SRVR_ONE_WAY_SSL_PORT_KEY, Integer.toString(serverAgentPort));
+            properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE.getKey(), "remote");
+            properties.setProperty(Configuration.SERVER_JDBC_URL.getKey(), Configuration.JDBC_IN_MEMORY_URL);
+            properties.setProperty(Configuration.SERVER_JDBC_DRIVER.getKey(), Configuration.JDBC_IN_MEMORY_DRIVER);
+            properties.setProperty(Configuration.METADATA_DIR_PATH.getKey(), "src/test/resources/stacks");
+            properties.setProperty(Configuration.SERVER_VERSION_FILE.getKey(), "src/test/resources/version");
+            properties.setProperty(Configuration.OS_VERSION.getKey(), "centos6");
+            properties.setProperty(Configuration.SHARED_RESOURCES_DIR.getKey(), "src/test/resources/");
+
+            properties.setProperty(Configuration.AGENT_USE_SSL.getKey(), "false");
+            properties.setProperty(Configuration.CLIENT_API_PORT.getKey(), Integer.toString(serverPort));
+            properties.setProperty(Configuration.SRVR_ONE_WAY_SSL_PORT.getKey(), Integer.toString(serverAgentPort));
             String tmpDir = System.getProperty("java.io.tmpdir");
-            properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, tmpDir);
+            properties.setProperty(Configuration.SRVR_KSTR_DIR.getKey(), tmpDir);
 
             ControllerModule testModule = new ControllerModule(properties);
 
@@ -159,7 +157,7 @@ public class ServerTestBase {
      */
     protected static void dropDatabase() throws ClassNotFoundException, SQLException {
         String DROP_DERBY_URL = "jdbc:derby:memory:myDB/ambari;drop=true";
-        Class.forName(Configuration.JDBC_IN_MEMROY_DRIVER);
+        Class.forName(Configuration.JDBC_IN_MEMORY_DRIVER);
         try {
             DriverManager.getConnection(DROP_DERBY_URL);
         } catch (SQLNonTransientConnectionException ignored) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/cc43870d/ambari-server/docs/configuration/index.md
----------------------------------------------------------------------
diff --git a/ambari-server/docs/configuration/index.md b/ambari-server/docs/configuration/index.md
new file mode 100644
index 0000000..311def5
--- /dev/null
+++ b/ambari-server/docs/configuration/index.md
@@ -0,0 +1,303 @@
+<!---
+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.
+-->
+
+Ambari Server Configuration
+---
+- [Introduction](#introduction)
+- [Configuration Properties](#configuration-properties)
+- [Baseline Values](#baseline-values)
+- [Database And Persistence](#db-persistence)
+
+<a name="introduction"></a>
+## Introduction
+Ambari Server is configured using a flat text properties file. The file is read once when starting Ambari. Any changes made to the properties file are only reflected after restarting Ambari. 
+
+```
+/etc/ambari-server/conf/ambari.properties
+```
+
+<a name="configuration-properties"></a>
+## Configuration Properties
+The following are the properties which can be used to configure Ambari. 
+
+| Property Name | Description | Default |
+| --- | --- | --- |
+| agent.api.gzip.compression.enabled | Determiens whether communication with the Ambari Agents should have the JSON payloads compressed with GZIP. |`true` | 
+| agent.auto.cache.update | Determines whether the agents will automatically attempt to download updates to stack resources from the Ambari Server. |`true` | 
+| agent.check.mounts.timeout | The timeout, used by the `timeout` command in linux, when checking mounts for free capacity. |`0` | 
+| agent.check.remote.mounts | Determines whether the Ambari Agents will use the `df` or `df -l` command when checking disk mounts for capacity issues. Auto-mounted remote directories can cause long delays. |`false` | 
+| agent.package.install.task.timeout | The time, in seconds, before package installation commands are killed. |`1800` | 
+| agent.package.parallel.commands.limit | The maximum number of tasks which can run within a single operational request. If there are more tasks, then they will be broken up between multiple operations. |`100` | 
+| agent.ssl | Determines whether SSL is used to communicate between Ambari Server and Ambari Agents. |`true` | 
+| agent.stack.retry.on_repo_unavailability | Determines whether agents should retrying installation commands when the repository is not available. This can prevent false installation errors with repositories that are sporadically inaccessible. |`false` | 
+| agent.stack.retry.tries | The number of times an Ambari Agent should retry package installation when it fails due to a repository error. <br/><br/> This property is related to `agent.stack.retry.on_repo_unavailability`. |`5` | 
+| agent.task.timeout | The time, in seconds, before agent commands are killed. This does not include package installation commands. |`900` | 
+| agent.threadpool.size.max | The size of the Jetty connection pool used for handling incoming Ambari Agent requests. |`25` | 
+| alerts.cache.enabled | Determines whether current alerts should be cached. Enabling this can increase performance on large cluster, but can also result in lost alert data if the cache is not flushed frequently. |`false` | 
+| alerts.cache.flush.interval | The time, in minutes, after which cached alert information is flushed to the database<br/><br/> This property is related to `alerts.cache.enabled`. |`10` | 
+| alerts.cache.size | The size of the alert cache.<br/><br/> This property is related to `alerts.cache.enabled`. |`50000` | 
+| alerts.execution.scheduler.maxThreads | The number of threads used to handle alerts received from the Ambari Agents. The value should be increased as the size of the cluster increases. |`2` | 
+| alerts.snmp.dispatcher.udp.port | The UDP port to use when binding the SNMP dispatcher on Ambari Server startup. If no port is specified, then a random port will be used. | | 
+| alerts.template.file | The full path to the XML file that describes the different alert templates. | | 
+| ambari.display.url | The URL to use when creating messages which should include the Ambari Server URL.<br/><br/>The following are examples of valid values:<ul><li>`http://ambari.apache.org:8080`</ul> | | 
+| ambari.ldap.isConfigured | An internal property used for unit testing and development purposes. |`false` | 
+| ambari.python.wrap | The name of the shell script used to wrap all invocations of Python by Ambari.  |`ambari-python-wrap` | 
+| anonymous.audit.name | The name of the user given to requests which are executed without any credentials. |`_anonymous` | 
+| api.authenticated.user | The username of the default user assumed to be executing API calls. When set, authentication is not required in order to login to Ambari or use the REST APIs.   | | 
+| api.csrfPrevention.enabled | Determines whether Cross-Site Request Forgery attacks are prevented by looking for the `X-Requested-By` header. |`true` | 
+| api.gzip.compression.enabled | Determines whether data sent to and from the Ambari service should be compressed. |`true` | 
+| api.gzip.compression.min.size | Used in conjunction with `api.gzip.compression.enabled`, determines the mininum size that an HTTP request must be before it should be compressed. This is measured in bytes. |`10240` | 
+| api.ssl | Determines whether SSL is used in for secure connections to Ambari. When enabled, ambari-server setup-https must be run in order to properly configure keystores. |`false` | 
+| auditlog.enabled | Determines whether audit logging is enabled. |`true` | 
+| auditlog.logger.capacity | The size of the worker queue for audit logger events.<br/><br/> This property is related to `auditlog.enabled`. |`10000` | 
+| authentication.jwt.audiences | A list of the JWT audiences expected. Leaving this blank will allow for any audience.<br/><br/> This property is related to `authentication.jwt.enabled`. | | 
+| authentication.jwt.cookieName | The name of the cookie which will be used to extract the JWT token from the request.<br/><br/> This property is related to `authentication.jwt.enabled`. |`hadoop-jwt` | 
+| authentication.jwt.enabled | Determines whether to use JWT authentication when connecting to remote Hadoop resources. |`false` | 
+| authentication.jwt.originalUrlParamName | The original URL to use when constructing the logic URL for JWT.<br/><br/> This property is related to `authentication.jwt.enabled`. |`originalUrl` | 
+| authentication.jwt.providerUrl | The URL for authentication of the user in the absence of a JWT token when handling a JWT request.<br/><br/> This property is related to `authentication.jwt.enabled`. | | 
+| authentication.jwt.publicKey | The public key to use when verifying the authenticity of a JWT token.<br/><br/> This property is related to `authentication.jwt.enabled`. | | 
+| authentication.ldap.alternateUserSearchEnabled | Determines whether a secondary (alternate) LDAP user search filer is used if the primary filter fails to find a user. |`false` | 
+| authentication.ldap.alternateUserSearchFilter | An alternate LDAP user search filter which can be used if `authentication.ldap.alternateUserSearchEnabled` is enabled and the primary filter fails to find a user. |`(&(userPrincipalName={0})(objectClass={userObjectClass}))` | 
+| authentication.ldap.baseDn | The base DN to use when filtering LDAP users and groups. This is only used when LDAP authentication is enabled. |`dc=ambari,dc=apache,dc=org` | 
+| authentication.ldap.bindAnonymously | Determines whether LDAP requests can connect anonymously or if a managed user is required to connect. |`true` | 
+| authentication.ldap.dnAttribute | The attribute used for determining what the distinguished name property is. |`dn` | 
+| authentication.ldap.groupBase | The filter used when searching for groups in LDAP. |`ou=groups,dc=ambari,dc=apache,dc=org` | 
+| authentication.ldap.groupMembershipAttr | The LDAP attribute which identifies group membership. |`member` | 
+| authentication.ldap.groupNamingAttr | The attribute used to determine the group name in LDAP. |`cn` | 
+| authentication.ldap.groupObjectClass | The class to which group objects in LDAP belong. |`group` | 
+| authentication.ldap.managerDn | The DN of the manager account to use when binding to LDAP if anonymous binding is disabled. | | 
+| authentication.ldap.managerPassword | The password for the manager account used to bind to LDAP if anonymous binding is disabled. | | 
+| authentication.ldap.pagination.enabled | Determines whether results from LDAP are paginated when requested. |`true` | 
+| authentication.ldap.primaryUrl | The LDAP URL used for connecting to an LDAP server when authenticating users. This should include both the host name and port. |`localhost:33389` | 
+| authentication.ldap.referral | Determines whether to follow LDAP referrals to other URLs when the LDAP controller doesn't have the requested object. |`follow` | 
+| authentication.ldap.secondaryUrl | A second LDAP URL to use as a backup when authenticating users. This should include both the host name and port. | | 
+| authentication.ldap.sync.groupMemberFilter | The default filter to use for syncing member from LDAP. | | 
+| authentication.ldap.sync.groupMemberReplacePattern | The default regex pattern to use when replacing the group member attribute ID value with a placeholder. This is used in cases where a UID of an LDAP member is not a full CN or unique ID<br/><br/>The following are examples of valid values:<ul><li>``${member}``</ul> | | 
+| authentication.ldap.sync.userMemberFilter | The default filter to use for syncing users from LDAP. | | 
+| authentication.ldap.sync.userMemberReplacePattern | The default regex pattern to use when replacing the user member attribute ID value with a placeholder. This is used in cases where a UID of an LDAP member is not a full CN or unique ID<br/><br/>The following are examples of valid values:<ul><li>``${member}``</ul> | | 
+| authentication.ldap.useSSL | Determines whether to use LDAP over SSL (LDAPS). |`false` | 
+| authentication.ldap.userBase | The filter used when searching for users in LDAP. |`ou=people,dc=ambari,dc=apache,dc=org` | 
+| authentication.ldap.userObjectClass | The class to which user objects in LDAP belong. |`person` | 
+| authentication.ldap.userSearchFilter | A filter used to lookup a user in LDAP based on the Ambari user name<br/><br/>The following are examples of valid values:<ul><li>`(&({usernameAttribute}={0})(objectClass={userObjectClass}))`</ul> |`(&({usernameAttribute}={0})(objectClass={userObjectClass}))` | 
+| authentication.ldap.usernameAttribute | The attribute used for determining the user name, such as `uid`. |`uid` | 
+| authorization.ldap.adminGroupMappingRules | A comma-separate list of groups which would give a user administrative access to Ambari when syncing from LDAP. This is only used when `authorization.ldap.groupSearchFilter` is blank.<br/><br/>The following are examples of valid values:<ul><li>`administrators`<li>`Hadoop Admins,Hadoop Admins.*,DC Admins,.*Hadoop Operators`</ul> |`Ambari Administrators` | 
+| authorization.ldap.groupSearchFilter | The DN to use when searching for LDAP groups. | | 
+| blueprint.skip_install_tasks | Determines if the request generated by a blueprint should include the package installation tasks. |`false` | 
+| bootstrap.dir | The directory on the Ambari Server file system used for storing Ambari Agent bootstrap information such as request responses. |`/var/run/ambari-server/bootstrap` | 
+| bootstrap.master_host_name | The host name of the Ambari Server which will be used by the Ambari Agents for communication. | | 
+| bootstrap.script | The location and name of the Python script used to bootstrap new Ambari Agent hosts. |`/usr/lib/python2.6/site-packages/ambari_server/bootstrap.py` | 
+| bootstrap.setup_agent.password | The password to set on the `AMBARI_PASSPHRASE` environment variable before invoking the bootstrap script. |`password` | 
+| bootstrap.setup_agent.script | The location and name of the Python script executed on the Ambari Agent host during the bootstrap process. |`/usr/lib/python2.6/site-packages/ambari_server/setupAgent.py` | 
+| client.api.port | The port that client connections will use with the REST API. The Ambari Web client runs on this port. |`8080` | 
+| client.api.ssl.cert_pass_file | The filename which contains the password for the keystores, truststores, and certificates for the REST API when it's protected by SSL. |`https.pass.txt` | 
+| client.api.ssl.crt_pass | The password for the keystores, truststores, and certificates for the REST API when it's protected by SSL. If not specified, then `client.api.ssl.cert_pass_file` should be used. | | 
+| client.api.ssl.keys_dir | The location on the Ambari server where the REST API keystore and password files are stored if using SSL. | | 
+| client.api.ssl.keystore_name | The name of the keystore used when the Ambari Server REST API is protected by SSL. |`https.keystore.p12` | 
+| client.api.ssl.keystore_type | The type of the keystore file specified in `client.api.ssl.keystore_name`. Self-signed certificates can be `PKCS12` while CA signed certificates are `JKS` |`PKCS12` | 
+| client.api.ssl.port | The port that client connections will use with the REST API when using SSL. The Ambari Web client runs on this port if SSL is enabled. |`8443` | 
+| client.api.ssl.truststore_name | The name of the truststore used when the Ambari Server REST API is protected by SSL. |`https.keystore.p12` | 
+| client.api.ssl.truststore_type | The type of the keystore file specified in `client.api.ssl.truststore_name`. Self-signed certificates can be `PKCS12` while CA signed certificates are `JKS` |`PKCS12` | 
+| client.security | The type of authentication mechanism used by Ambari.<br/><br/>The following are examples of valid values:<ul><li>`local`<li>`ldap`</ul> | | 
+| client.threadpool.size.max | The size of the Jetty connection pool used for handling incoming REST API requests. This should be large enough to handle requests from both web browsers and embedded Views. |`25` | 
+| common.services.path | The location on the Ambari Server where common service resources exist. Stack services share the common service files.<br/><br/>The following are examples of valid values:<ul><li>`/var/lib/ambari-server/resources/common-services`</ul> | | 
+| custom.action.definitions | The location on the Ambari Server where custom actions are defined. |`/var/lib/ambari-server/resources/custom_action_definitions` | 
+| db.mysql.jdbc.name | The name of the MySQL JDBC JAR connector. |`mysql-connector-java.jar` | 
+| db.oracle.jdbc.name | The name of the Oracle JDBC JAR connector. |`ojdbc6.jar` | 
+| default.kdcserver.port | The port used to communicate with the Kerberos Key Distribution Center. |`88` | 
+| extensions.path | The location on the Ambari Server where stack extensions exist.<br/><br/>The following are examples of valid values:<ul><li>`/var/lib/ambari-server/resources/extensions`</ul> | | 
+| http.strict-transport-security | When using SSL, this will be used to set the `Strict-Transport-Security` response header. |`max-age=31536000` | 
+| http.x-frame-options | The value that will be used to set the `X-Frame-Options` HTTP response header. |`DENY` | 
+| http.x-xss-protection | The value that will be used to set the `X-XSS-Protection` HTTP response header. |`1; mode=block` | 
+| java.home | The location of the JDK on the Ambari Agent hosts.<br/><br/>The following are examples of valid values:<ul><li>`/usr/jdk64/jdk1.7.0_45`</ul> | | 
+| jce.name | The name of the JCE policy ZIP file. <br/><br/>The following are examples of valid values:<ul><li>`UnlimitedJCEPolicyJDK7.zip`</ul> | | 
+| jdk.name | The name of the JDK installation binary.<br/><br/>The following are examples of valid values:<ul><li>`jdk-7u45-linux-x64.tar.gz`</ul> | | 
+| kdcserver.connection.check.timeout | The timeout, in milliseconds, to wait when communicating with a Kerberos Key Distribution Center. |`10000` | 
+| kerberos.check.jaas.configuration | Determines whether Kerberos-enabled Ambari deployments should use JAAS to validate login credentials. |`false` | 
+| kerberos.keytab.cache.dir | The location on the Ambari Server where Kerberos keytabs are cached. |`/var/lib/ambari-server/data/cache` | 
+| metadata.path | The location on the Ambari Server where the stack resources exist.<br/><br/>The following are examples of valid values:<ul><li>`/var/lib/ambari-server/resources/stacks`</ul> | | 
+| metrics.retrieval-service.cache.timeout | The amount of time, in minutes, that JMX and REST metrics retrieved directly can remain in the cache. |`30` | 
+| mpacks.staging.path | The Ambari Management Pack staging directory on the Ambari Server.<br/><br/>The following are examples of valid values:<ul><li>`/var/lib/ambari-server/resources/mpacks`</ul> | | 
+| packages.pre.installed | Determines whether Ambari Agent instances have already have the necessary stack software installed |`false` | 
+| proxy.allowed.hostports | A comma-separated whitelist of host and port values which Ambari Server can use to determine if a proxy value is valid. |`*:*` | 
+| recommendations.artifacts.lifetime | The amount of time that Recommendation API data is kept on the Ambari Server file system. This is specified using a `hdwmy` syntax for pairing the value with a time unit (hours, days, weeks, months, years)<br/><br/>The following are examples of valid values:<ul><li>`8h`<li>`2w`<li>`1m`</ul> |`1w` | 
+| recommendations.dir | The directory on the Ambari Server file system used for storing Recommendation API artifacts. |`/var/run/ambari-server/stack-recommendations` | 
+| recovery.disabled_components | A comma-separated list of component names which are not included in automatic recovery attempts.<br/><br/>The following are examples of valid values:<ul><li>`NAMENODE,ZOOKEEPER_SERVER`</ul> | | 
+| recovery.enabled_components | A comma-separated list of component names which are included in automatic recovery attempts.<br/><br/>The following are examples of valid values:<ul><li>`NAMENODE,ZOOKEEPER_SERVER`</ul> | | 
+| recovery.lifetime_max_count | The maximum number of recovery attempts of a failed component during the lifetime of an Ambari Agent instance. This is reset when the Ambari Agent is restarted. | | 
+| recovery.max_count | The maximum number of recovery attempts of a failed component during a specified recovery window. | | 
+| recovery.retry_interval | The delay, in minutes, between automatic retry windows. | | 
+| recovery.type | The type of automatic recovery of failed services and components to use.<br/><br/>The following are examples of valid values:<ul><li>`DEFAULT`<li>`AUTO_START`<li>`FULL`</ul> | | 
+| recovery.window_in_minutes | The length of a recovery window, in minutes, in which recovery attempts can be retried.<br/><br/> This property is related to `recovery.max_count`. | | 
+| repo.validation.suffixes.default | The suffixes to use when validating most types of repositories. |`/repodata/repomd.xml` | 
+| repo.validation.suffixes.ubuntu | The suffixes to use when validating Ubuntu repositories. |`/dists/%s/Release` | 
+| resources.dir | The location on the Ambari Server where all resources exist, including common services, stacks, and scripts. |`/var/lib/ambari-server/resources/` | 
+| rolling.upgrade.skip.packages.prefixes | A comma-separated list of packages which will be skipped during a stack upgrade. | | 
+| security.agent.hostname.validate | Determines whether the Ambari Agent host names should be validated against a regular expression to ensure that they are well-formed. |`true` | 
+| security.master.key.location | The location on the Ambari Server of the master key file. This is the key to the master keystore. | | 
+| security.master.keystore.location | The location on the Ambari Server of the master keystore file. | | 
+| security.server.cert_name | The name of the file located in the `security.server.keys_dir` directory where certificates will be generated when Ambari uses the `openssl ca` command. |`ca.crt` | 
+| security.server.crt_pass | The password for the keystores, truststores, and certificates. If not specified, then `security.server.crt_pass_file` should be used | | 
+| security.server.crt_pass.len | The length of the randomly generated password for keystores and truststores.  |`50` | 
+| security.server.crt_pass_file | The filename which contains the password for the keystores, truststores, and certificates. |`pass.txt` | 
+| security.server.csr_name | The name of the certificate request file used when generating certificates. |`ca.csr` | 
+| security.server.disabled.ciphers | A list of cipher suites which are not strong enough to use and will be excluded when creating SSL connections.<br/><br/>The following are examples of valid values:<ul><li>`SSL_RSA_WITH_RC4_128_MD5\|SSL_RSA_WITH_RC4_12\u200c\u200b8_MD5`</ul> | | 
+| security.server.disabled.protocols | The list of protocols which should not be used when creating SSL connections.<br/><br/>The following are examples of valid values:<ul><li>`TLSv1.1\|TLSv1.2`</ul> | | 
+| security.server.key_name | The name of the private key used to sign requests. |`ca.key` | 
+| security.server.keys_dir | The directory on the Ambari Server where keystores are kept. |`.` | 
+| security.server.keystore_name | The name of the keystore file, located in `security.server.keys_dir` |`keystore.p12` | 
+| security.server.keystore_type | The type of the keystore file specified in `security.server.key_name`. Self-signed certificates can be `PKCS12` while CA signed certificates are `JKS` |`PKCS12` | 
+| security.server.one_way_ssl.port | The port that the Ambari Agents will use to communicate with the Ambari Server over SSL. |`8440` | 
+| security.server.passphrase | The password to the Ambari Server to supply to new Ambari Agent hosts being bootstrapped. |`AMBARI_PASSPHRASE` | 
+| security.server.passphrase_env_var | An environment variable which can be used to supply the Ambari Server password when bootstrapping new Ambari Agents. |`AMBARI_PASSPHRASE` | 
+| security.server.truststore_name | The name of the truststore file ambari uses to store trusted certificates. Located in `security.server.keys_dir` |`keystore.p12` | 
+| security.server.truststore_type | The type of the truststore file specified in `security.server.truststore_name`. Self-signed certificates can be `PKCS12` while CA signed certificates are `JKS` |`PKCS12` | 
+| security.server.two_way_ssl | Determines whether two-way SSL should be used between Ambari Server and Ambari Agents so that the agents must also use SSL. |`false` | 
+| security.server.two_way_ssl.port | The port that the Ambari Server will use to communicate with the agents over SSL. |`8441` | 
+| security.temporary.keystore.actibely.purge | Determines whether the temporary keystore should have keys actively purged on a fixed internal. or only when requested after expiration. |`true` | 
+| security.temporary.keystore.retention.minutes | The time, in minutes, that the temporary, in-memory credential store retains values. |`90` | 
+| server.cache.isStale.enabled | Determines when the stale configuration cache is enabled. If disabled, then queries to determine if components need to be restarted will query the database directly. |`true` | 
+| server.cache.isStale.expiration | The expiration time, in {@link TimeUnit#MINUTES}, that stale configuration information is cached.<br/><br/> This property is related to `server.cache.isStale.enabled`. |`600` | 
+| server.connection.max.idle.millis | The time, in milliseconds, that Ambari Agent connections can remain open and idle. |`900000` | 
+| server.ecCacheSize | The size of the cache which is used to hold current operations in memory until they complete. |`10000` | 
+| server.execution.scheduler.isClustered | Determines whether Quartz will use a clustered job scheduled when performing scheduled actions like rolling restarts. |`false` | 
+| server.execution.scheduler.maxDbConnections | The number of concurrent database connections that the Quartz job scheduler can use. |`5` | 
+| server.execution.scheduler.maxThreads | The number of threads that the Quartz job scheduler will use when executing scheduled jobs. |`5` | 
+| server.execution.scheduler.misfire.toleration.minutes | The time, in minutes, that a scheduled job can be run after its missed scheduled execution time. |`480` | 
+| server.execution.scheduler.start.delay.seconds | The delay, in seconds, that a Quartz job must wait before it starts. |`120` | 
+| server.execution.scheduler.wait | The time, in seconds, that the Quartz execution scheduler will wait before checking for new commands to schedule, such as rolling restarts. |`1` | 
+| server.hosts.mapping | The location on the Ambari Server of the file which is used for mapping host names. | | 
+| server.hrcStatusSummary.cache.enabled | Determines whether an existing request's status is cached. This is enabled by default to prevent increases in database access when there are long running operations in progress. |`true` | 
+| server.hrcStatusSummary.cache.expiryDuration | The expiration time, in minutes, of the request status cache.<br/><br/> This property is related to `server.hrcStatusSummary.cache.enabled`. |`30` | 
+| server.hrcStatusSummary.cache.size | The size of the cache which is used to hold a status of every operation in a request.<br/><br/> This property is related to `server.hrcStatusSummary.cache.enabled`. |`10000` | 
+| server.http.request.header.size | The size of the buffer to use, in bytes, for REST API HTTP header requests. |`65536` | 
+| server.http.response.header.size | The size of the buffer to use, in bytes, for REST API HTTP header responses. |`65536` | 
+| server.http.session.inactive_timeout | The time, in seconds, that open HTTP sessions will remain valid while they are inactive. |`1800` | 
+| server.jdbc.connection-pool | The connection pool manager to use for database connections. If using MySQL, then `c3p0` is automatically chosen.<br/><br/>The following are examples of valid values:<ul><li>`internal`<li>`c3p0`</ul> |`internal` | 
+| server.jdbc.connection-pool.acquisition-retry-attempts | The number of times connections should be retried to be acquired from the database before giving up. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`30` | 
+| server.jdbc.connection-pool.acquisition-retry-delay | The delay, in milliseconds, between connection acquisition attempts. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`1000` | 
+| server.jdbc.connection-pool.acquisition-size | The number of connections that should be retrieved when the pool size must increase. This should be set higher than 1 since the assumption is that a pool that needs to grow should probably grow by more than 1. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`5` | 
+| server.jdbc.connection-pool.idle-test-interval | The number of seconds in between testing each idle connection in the connection pool for validity. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`7200` | 
+| server.jdbc.connection-pool.max-age |  The maximum amount of time, in seconds, any connection, whether its been idle or active, should remain in the pool. This will terminate the connection after the expiration age and force new connections to be opened. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`0` | 
+| server.jdbc.connection-pool.max-idle-time | The maximum amount of time, in seconds, that an idle connection can remain in the pool. This should always be greater than the value returned from `server.jdbc.connection-pool.max-idle-time-excess`. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`14400` | 
+| server.jdbc.connection-pool.max-idle-time-excess | The maximum amount of time, in seconds, that connections beyond the minimum pool size should remain in the pool. This should always be less than than the value returned from `server.jdbc.connection-pool.max-idle-time`. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`0` | 
+| server.jdbc.connection-pool.max-size | The maximum number of connections that should exist in the database connection pool. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`32` | 
+| server.jdbc.connection-pool.min-size | The minimum number of connections that should always exist in the database connection pool. Only used with c3p0.<br/><br/> This property is related to `server.jdbc.connection-pool`. |`5` | 
+| server.jdbc.database_name | The name of the database. |`ambari` | 
+| server.jdbc.driver | The name of the PostgresSQL JDBC JAR connector. |`org.postgresql.Driver` | 
+| server.jdbc.generateTables | The table generation strategy to use when initializing JPA. |`NONE` | 
+| server.jdbc.postgres.schema | The schema within a named PostgreSQL database where Ambari's tables, users, and constraints are stored.  | | 
+| server.jdbc.rca.driver | The PostgresSQL driver name for the RCA database. |`org.postgresql.Driver` | 
+| server.jdbc.rca.url | The full JDBC URL for connecting to the RCA database. |`jdbc:postgresql://{hostname}/ambarirca` | 
+| server.jdbc.rca.user.name | The user name for connecting to the database which stores RCA information. |`mapred` | 
+| server.jdbc.rca.user.passwd | The password for the user when connecting to the database which stores RCA information. |`mapred` | 
+| server.jdbc.user.name | The user name used to login to the database. |`ambari` | 
+| server.jdbc.user.passwd | The password for the user when logging into the database. |`bigdata` | 
+| server.metrics.retrieval-service.thread.priority | The priority of threads used by the service which retrieves JMX and REST metrics directly from their respective endpoints. |`5` | 
+| server.metrics.retrieval-service.threadpool.size.core | The core number of threads used to retrieve JMX and REST metrics directly from their respective endpoints. |`16` | 
+| server.metrics.retrieval-service.threadpool.size.max | The maximum number of threads used to retrieve JMX and REST metrics directly from their respective endpoints. |`32` | 
+| server.metrics.retrieval-service.threadpool.worker.size | The number of queued requests allowed for JMX and REST metrics before discarding old requests which have not been fullfilled. |`320` | 
+| server.operations.retry-attempts | The number of retry attempts for failed API and blueprint operations. |`0` | 
+| server.os_family | The operating system family for all hosts in the cluster. This is used when bootstrapping agents and when enabling Kerberos.<br/><br/>The following are examples of valid values:<ul><li>`redhat`<li>`ubuntu`</ul> | | 
+| server.os_type | The operating system version for all hosts in the cluster. This is used when bootstrapping agents and when enabling Kerberos.<br/><br/>The following are examples of valid values:<ul><li>`6`<li>`7`</ul> | | 
+| server.persistence.type | The type of database connection being used. Unless using an embedded PostgresSQL server, then this should be `remote`.<br/><br/>The following are examples of valid values:<ul><li>`local`<li>`remote`</ul> |`local` | 
+| server.property-provider.threadpool.completion.timeout | The maximum time, in milliseconds, that federated requests for data can execute before being terminated. Increasing this value could result in degraded performanc from the REST APIs. |`5000` | 
+| server.property-provider.threadpool.size.core | The core number of threads that will be used to retrieve data from federated datasources, such as remote JMX endpoints. |`16` | 
+| server.property-provider.threadpool.size.max | The maximum number of threads that will be used to retrieve data from federated datasources, such as remote JMX endpoints. |`32` | 
+| server.property-provider.threadpool.worker.size | The maximum size of pending federated datasource requests, such as those to JMX endpoints, which can be queued before rejecting new requests. |`2147483647` | 
+| server.script.timeout | The time, in milliseconds, until an external script is killed. |`5000` | 
+| server.stages.parallel | Determines whether operations in different execution requests can be run concurrently. |`true` | 
+| server.task.timeout | The time, in seconds, before a server-side operation is terminated. |`1200` | 
+| server.timeline.metrics.cache.catchup.interval | The time, in milliseconds, that Ambari Metrics intervals should use when extending the boundaries of the original request.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`300000` | 
+| server.timeline.metrics.cache.connect.timeout.millis | The time, in milliseconds, to wait while attempting to connect to Ambari Metrics.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`5000` | 
+| server.timeline.metrics.cache.disabled | Determines whether Ambari Metric data is cached. |`false` | 
+| server.timeline.metrics.cache.entry.idle.seconds | The time, in seconds, that Ambari Metric data can remain in the cache without being accessed.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`1800` | 
+| server.timeline.metrics.cache.entry.ttl.seconds | The time, in seconds, that Ambari Metric timeline data is cached by Ambari Server.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`3600` | 
+| server.timeline.metrics.cache.heap.percent | The amount of heap on the Ambari Server dedicated to the caching values from Ambari Metrics. Measured as part of the total heap of Ambari Server.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`15%` | 
+| server.timeline.metrics.cache.interval.read.timeout.millis | The time, in milliseconds, that requests to update stale metric data will wait while reading from Ambari Metrics. This allows for greater control by allowing stale values to be returned instead of waiting for Ambari Metrics to always populate responses with the latest data.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`10000` | 
+| server.timeline.metrics.cache.read.timeout.millis | The time, in milliseconds, that initial requests to populate metric data will wait while reading from Ambari Metrics.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`10000` | 
+| server.timeline.metrics.cache.use.custom.sizing.engine | Determines if a custom engine should be used to increase performance of calculating the current size of the cache for Ambari Metric data.<br/><br/> This property is related to `server.timeline.metrics.cache.disabled`. |`true` | 
+| server.timeline.metrics.https.enabled | Determines whether to use to SSL to connect to Ambari Metrics when retrieving metric data. |`false` | 
+| server.tmp.dir | The location on the Ambari Server where temporary artifacts can be created. |`/var/lib/ambari-server/tmp` | 
+| server.version.file | The full path to the file which contains the Ambari Server version. This is used to ensure that there is not a version mismatch between Ambari Agents and Ambari Server.<br/><br/>The following are examples of valid values:<ul><li>`/var/lib/ambari-server/resources/version`</ul> | | 
+| server.version_definition.connect.timeout.millis | The time, in milliseconds, that requests to connect to a URL to retrieve Version Definition Files (VDF) will wait before being terminated. |`5000` | 
+| server.version_definition.read.timeout.millis | The time, in milliseconds, that requests to read from a connected URL to retrieve Version Definition Files (VDF) will wait before being terminated. |`5000` | 
+| shared.resources.dir | The location on the Ambari Server where resources are stored. This is exposed via HTTP in order for Ambari Agents to access them. |`/usr/lib/ambari-server/lib/ambari_commons/resources` | 
+| ssl.trustStore.password | The password to use when setting the `javax.net.ssl.trustStorePassword` property | | 
+| ssl.trustStore.path | The location of the truststore to use when setting the `javax.net.ssl.trustStore` property. | | 
+| ssl.trustStore.type | The type of truststore used by the `javax.net.ssl.trustStoreType` property. | | 
+| stack.upgrade.auto.retry.check.interval.secs | The amount of time to wait, in seconds, between checking for upgrade tasks to be retried. This value is only applicable if `stack.upgrade.auto.retry.timeout.mins` is positive.<br/><br/> This property is related to `stack.upgrade.auto.retry.timeout.mins`. |`20` | 
+| stack.upgrade.auto.retry.command.details.to.ignore | A comma-separate list of upgrade tasks details to skip when retrying failed commands automatically. |`"Execute HDFS Finalize"` | 
+| stack.upgrade.auto.retry.command.names.to.ignore | A comma-separate list of upgrade tasks names to skip when retrying failed commands automatically. |`"ComponentVersionCheckAction","FinalizeUpgradeAction"` | 
+| stack.upgrade.auto.retry.timeout.mins | The amount of time to wait in order to retry a command during a stack upgrade when an agent loses communication. This value must be greater than the `agent.task.timeout` value. |`0` | 
+| stack.upgrade.bypass.prechecks | Determines whether pre-upgrade checks will be skipped when performing a rolling or express stack upgrade. |`false` | 
+| stackadvisor.script | The location and name of the Python stack advisor script executed when configuring services. |`/var/lib/ambari-server/resources/scripts/stack_advisor.py` | 
+| task.query.parameterlist.size | The maximum number of tasks which can be queried by ID from the database. |`999` | 
+| view.extraction.threadpool.size.core | The number of threads used to extract Ambari Views when Ambari Server is starting up. |`10` | 
+| view.extraction.threadpool.size.max | The maximum number of threads used to extract Ambari Views when Ambari Server is starting up. |`20` | 
+| view.extraction.threadpool.timeout | The time, in milliseconds, that non-core threads will live when extraction views on Ambari Server startup. |`100000` | 
+| view.request.threadpool.size.max | The maximum number of threads which will be allocated to handling REST API requests from embedded views. This value should be smaller than `agent.threadpool.size.max`<br/><br/> This property is related to `agent.threadpool.size.max`. |`0` | 
+| view.request.threadpool.timeout | The time, milliseconds, that REST API requests from embedded views can wait if there are no threads available to service the view's request. Setting this too low can cause views to timeout. |`2000` | 
+| views.ambari.request.connect.timeout.millis | The amount of time, in milliseconds, that a view will wait when trying to connect on HTTP(S) operations to the Ambari REST API. |`30000` | 
+| views.ambari.request.read.timeout.millis | The amount of time, in milliseconds, that a view will wait before terminating an HTTP(S) read request to the Ambari REST API. |`45000` | 
+| views.dir | The directory on the Ambari Server file system used for expanding Views and storing webapp work. |`/var/lib/ambari-server/resources/views` | 
+| views.http.strict-transport-security | The value that will be used to set the `Strict-Transport-Security` HTTP response header for Ambari View requests. |`max-age=31536000` | 
+| views.http.x-frame-options | The value that will be used to set the `X-Frame-Options` HTTP response header for Ambari View requests. |`SAMEORIGIN` | 
+| views.http.x-xss-protection | The value that will be used to set the `X-XSS-Protection` HTTP response header for Ambari View requests. |`1; mode=block` | 
+| views.remove.undeployed | Determines whether remove undeployed views from the Ambari database. |`false` | 
+| views.request.connect.timeout.millis | The amount of time, in milliseconds, that a view will wait when trying to connect on HTTP(S) operations to a remote resource. |`5000` | 
+| views.request.read.timeout.millis | The amount of time, in milliseconds, that a view will wait before terminating an HTTP(S) read request. |`10000` | 
+| views.validate | Determines whether to validate a View's configuration XML file against an XSD. |`false` | 
+| webapp.dir | The Ambari Server webapp root directory. |`web` | 
+
+
+<a name="baseline-values"></a>
+## Baseline Values
+As the size of a cluster grows, some of the default property values may no longer be sufficient. The below tables offer recommendations on the values of some configuration properties based on the size and usage of the cluster.
+
+####Alerts & Notifications
+| Property Name | 10 Hosts | ~50 Hosts | ~100 Hosts | 500+ Hosts | 
+| --- | --- | --- | --- | --- |
+| alerts.execution.scheduler.maxThreads | 2 | 2 | 4 | 4 | 
+| alerts.cache.enabled | false | false | false | true | 
+| alerts.cache.flush.interval | 10 | 10 | 10 | 10 | 
+| alerts.cache.size | 50000 | 50000 | 100000 | 100000 | 
+####Jetty API & Agent Thread Pools
+| Property Name | 10 Hosts | ~50 Hosts | ~100 Hosts | 500+ Hosts | 
+| --- | --- | --- | --- | --- |
+| client.threadpool.size.max | 25 | 35 | 50 | 65 | 
+| agent.threadpool.size.max | 25 | 35 | 75 | 100 | 
+
+
+<a name="db-persistence"></a>
+## Database And Persistence
+In addition to the static database connection properties, it's possible to supply custom properties for both EclipseLink and the database driver through `ambari.properties`. 
+
+### Database Driver
+Using the `server.jdbc.properties.` prefix, it's possible to supply specific properties to the database driver being used by Ambari. These properties do not affect JPA or any of the persistence-unit operations. They are solely to govern the behavior of the database driver. 
+
+```
+server.jdbc.properties.lockTimeout=15000
+server.jdbc.properties.loginTimeout=15000
+```
+
+### Persistence Unit
+EclipseLink properties can also be configured using a prefix of `server.persistence.properties.`. The EclipseLink properties should be defined in their entirety with the prefix prepended in front of them.
+
+```
+server.persistence.properties.eclipselink.jdbc.batch-writing.size=25
+server.persistence.properties.eclipselink.profiler=QueryMonitor
+```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/cc43870d/ambari-server/src/main/java/org/apache/ambari/annotations/Markdown.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/annotations/Markdown.java b/ambari-server/src/main/java/org/apache/ambari/annotations/Markdown.java
index 0f7748e..8bcfd0f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/annotations/Markdown.java
+++ b/ambari-server/src/main/java/org/apache/ambari/annotations/Markdown.java
@@ -17,20 +17,17 @@
  */
 package org.apache.ambari.annotations;
 
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
  * The {@link Markdown} annotation is used to add information when creating <a
  * href=https://en.wikipedia.org/wiki/Markdown>Markdown</a> content.
  */
-@Retention(RUNTIME)
-@Target({ TYPE, FIELD, METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD })
 public @interface Markdown {
   /**
    * A description to add for this element when generating Markdown.
@@ -38,4 +35,23 @@ public @interface Markdown {
    * @return
    */
   String description();
+
+  /**
+   * An optional list of example values.
+   *
+   * @return
+   */
+  String[] examples() default {};
+
+  /**
+   * A way of expressing a relationship.
+   */
+  String relatedTo() default "";
+
+  /**
+   * If {@code true}, indicates that the annotated content is for internal-use only.
+   *
+   * @return {@code true} for internal-only content.
+   */
+  boolean internal() default false;
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/cc43870d/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
index d057f00..fa42e8a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
@@ -112,7 +112,7 @@ public class DatabaseConsistencyCheckHelper {
       metainfoDAO = injector.getInstance(MetainfoDAO.class);
     }
 
-    MetainfoEntity schemaVersionEntity = metainfoDAO.findByKey(Configuration.SERVER_VERSION.getKey());
+    MetainfoEntity schemaVersionEntity = metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY);
     String schemaVersion = null;
 
     if (schemaVersionEntity != null) {