AMBARI-23250 : Fix deployment issues in AMS perf branch.
diff --git a/ambari-metrics-timelineservice/pom.xml b/ambari-metrics-timelineservice/pom.xml
index 6a6dc3e..13076f5 100644
--- a/ambari-metrics-timelineservice/pom.xml
+++ b/ambari-metrics-timelineservice/pom.xml
@@ -336,6 +336,22 @@
           <groupId>net.sourceforge.findbugs</groupId>
           <artifactId>annotations</artifactId>
         </exclusion>
+        <exclusion>
+          <artifactId>jersey-server</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>jersey-common</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>jersey-container-servlet-core</artifactId>
+          <groupId>org.glassfish.jersey.containers</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>javax.ws.rs-api</artifactId>
+          <groupId>javax.ws.rs</groupId>
+        </exclusion>
       </exclusions>
     </dependency>
 
@@ -450,6 +466,16 @@
       <artifactId>jersey-server</artifactId>
       <version>1.11</version>
     </dependency>
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-core</artifactId>
+      <version>1.11</version>
+    </dependency>
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-client</artifactId>
+      <version>1.11</version>
+    </dependency>
     <!-- 'mvn dependency:analyze' fails to detect use of this dependency -->
     <dependency>
       <groupId>org.apache.hadoop</groupId>
@@ -481,16 +507,6 @@
       <version>1.1</version>
     </dependency>
     <dependency>
-      <groupId>com.sun.jersey</groupId>
-      <artifactId>jersey-core</artifactId>
-      <version>1.11</version>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.jersey</groupId>
-      <artifactId>jersey-client</artifactId>
-      <version>1.11</version>
-    </dependency>
-    <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <version>4.5.2</version>
@@ -653,6 +669,24 @@
       <groupId>org.apache.phoenix</groupId>
       <artifactId>phoenix-core</artifactId>
       <type>test-jar</type>
+      <exclusions>
+        <exclusion>
+          <artifactId>jersey-server</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>jersey-common</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>jersey-container-servlet-core</artifactId>
+          <groupId>org.glassfish.jersey.containers</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>javax.ws.rs-api</artifactId>
+          <groupId>javax.ws.rs</groupId>
+        </exclusion>
+      </exclusions>
       <version>${phoenix.version}</version>
       <scope>test</scope>
     </dependency>
@@ -661,6 +695,16 @@
       <artifactId>hbase-it</artifactId>
       <version>${hbase.version}</version>
       <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>jersey-common</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>javax.ws.rs-api</artifactId>
+          <groupId>javax.ws.rs</groupId>
+        </exclusion>
+      </exclusions>
       <classifier>tests</classifier>
     </dependency>
     <dependency>
diff --git a/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/uuid/HashBasedUuidGenStrategy.java b/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/uuid/HashBasedUuidGenStrategy.java
index 3acf656..16d1bf2 100644
--- a/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/uuid/HashBasedUuidGenStrategy.java
+++ b/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/uuid/HashBasedUuidGenStrategy.java
@@ -37,7 +37,6 @@
    */
   @Override
   public byte[] computeUuid(TimelineClusterMetric timelineClusterMetric, int maxLength) {
-
     int metricNameUuidLength = 12;
     String metricName = timelineClusterMetric.getMetricName();
 
@@ -51,16 +50,10 @@
      */
     StringBuilder splitSums = new StringBuilder();
     if (splits.length > 0) {
-      for (int s = 0; s < splits.length; s++) {
+      for (String split : splits) {
         int asciiSum = 0;
-        if ( s < splits.length -1) {
-          for (int i = 0; i < splits[s].length(); i++) {
-            asciiSum += (int) splits[s].charAt(i); // Get Ascii Sum.
-          }
-        } else {
-          for (int i = 0; i < splits[s].length(); i++) {
-            asciiSum += ((i+1) * (int) splits[s].charAt(i)); //weighted sum for last split.
-          }
+        for (int i = 0; i < split.length(); i++) {
+          asciiSum += ((i + 1) * (int) split.charAt(i)); //weighted sum for split.
         }
         splitSums.append(asciiSum); //Append the sum to the array of sums.
       }
@@ -69,9 +62,7 @@
     //Compute a unique metric seed for the stemmed metric name
     String stemmedMetric = stem(metricName);
     long metricSeed = 100123456789L;
-    for (int i = 0; i < stemmedMetric.length(); i++) {
-      metricSeed += stemmedMetric.charAt(i);
-    }
+    metricSeed += computeWeightedNumericalAsciiSum(stemmedMetric);
 
     //Reverse the computed seed to get a metric UUID portion which is used optionally.
     byte[] metricUuidPortion = StringUtils.reverse(String.valueOf(metricSeed)).getBytes();
@@ -80,7 +71,9 @@
 
     //If splitSums length > required metric UUID length, use only the required length suffix substring of the splitSums as metric UUID.
     if (splitLength > metricNameUuidLength) {
-      metricUuidPortion = ArrayUtils.subarray(splitSumString.getBytes(), splitLength - metricNameUuidLength, splitLength);
+      int pad = (int)(0.25 * splitLength);
+      metricUuidPortion = ArrayUtils.addAll(ArrayUtils.subarray(splitSumString.getBytes(), splitLength - metricNameUuidLength + pad, splitLength)
+        , ArrayUtils.subarray(metricUuidPortion, 0, pad));
     } else {
       //If splitSums is not enough for required metric UUID length, pad with the metric uuid portion.
       int pad = metricNameUuidLength - splitLength;
@@ -94,7 +87,7 @@
     String appId = timelineClusterMetric.getAppId();
     int appidSeed = 11;
     for (int i = 0; i < appId.length(); i++) {
-      appidSeed += appId.charAt(i);
+      appidSeed += ((i+1) * appId.charAt(i));
     }
     String appIdSeedStr = String.valueOf(appidSeed);
     byte[] appUuidPortion = ArrayUtils.subarray(appIdSeedStr.getBytes(), appIdSeedStr.length() - 2, appIdSeedStr.length());
@@ -105,7 +98,7 @@
     if (StringUtils.isNotEmpty(instanceId)) {
       int instanceIdSeed = 1489;
       for (int i = 0; i < appId.length(); i++) {
-        instanceIdSeed += appId.charAt(i);
+        instanceIdSeed += ((i+1)* appId.charAt(i));
       }
       buffer.putInt(instanceIdSeed);
       ArrayUtils.subarray(buffer.array(), 2, 4);
@@ -126,11 +119,12 @@
   private String[] getIndidivualSplits(String metricName) {
     List<String> tokens = new ArrayList<>();
     String[] splits = new String[0];
-    if (metricName.contains("\\.")) {
+    if (metricName.contains(".")) {
       splits = metricName.split("\\.");
       for (String split : splits) {
         if (split.contains("_")) {
-          tokens.addAll(Arrays.asList(split.split("_")));
+          String[] subSplits = split.split("\\_");
+          tokens.addAll(Arrays.asList(subSplits));
         } else {
           tokens.add(split);
         }
@@ -176,31 +170,37 @@
     if (StringUtils.isEmpty(value)) {
       return null;
     }
+
+    int customAsciiSum = 1489 + (int) computeWeightedNumericalAsciiSum(value); //seed = 1489
+
+    String customAsciiSumStr = String.valueOf(customAsciiSum);
+    if (customAsciiSumStr.length() < maxLength) {
+      return null;
+    } else {
+      return customAsciiSumStr.substring(customAsciiSumStr.length() - maxLength, customAsciiSumStr.length()).getBytes();
+    }
+  }
+
+  private long computeWeightedNumericalAsciiSum(String value) {
     int len = value.length();
-    int numericValue = 0;
-    int seed = 1489;
+    long numericValue = 0;
+    int sum = 0;
     for (int i = 0; i < len; i++) {
       int ascii = value.charAt(i);
       if (48 <= ascii && ascii <= 57) {
         numericValue += numericValue * 10 + (ascii - 48);
       } else {
         if (numericValue > 0) {
-          seed += numericValue;
+          sum += numericValue;
           numericValue = 0;
         }
-        seed+= value.charAt(i);
+        sum += value.charAt(i);
       }
     }
 
     if (numericValue != 0) {
-      seed+=numericValue;
+      sum +=numericValue;
     }
-
-    String seedStr = String.valueOf(seed);
-    if (seedStr.length() < maxLength) {
-      return null;
-    } else {
-      return seedStr.substring(seedStr.length() - maxLength, seedStr.length()).getBytes();
-    }
+    return sum;
   }
 }
\ No newline at end of file
diff --git a/ambari-metrics-timelineservice/src/main/resources/metrics_def/HOST.dat b/ambari-metrics-timelineservice/src/main/resources/metrics_def/HOST.dat
index 3758140..6a7034b 100644
--- a/ambari-metrics-timelineservice/src/main/resources/metrics_def/HOST.dat
+++ b/ambari-metrics-timelineservice/src/main/resources/metrics_def/HOST.dat
@@ -53,3 +53,9 @@
 write_bytes
 write_count
 write_time
+sdisk_dm-12_write_count
+sdisk_dm-21_write_count
+sdisk_dm-40_write_bytes
+sdisk_dm-22_write_bytes
+sdisk_dm-26_write_time
+sdisk_dm-17_write_time
diff --git a/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestTimelineWebServices.java b/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestTimelineWebServices.java
index 83e2a27..cd20470 100644
--- a/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestTimelineWebServices.java
+++ b/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestTimelineWebServices.java
@@ -23,14 +23,8 @@
 import javax.ws.rs.core.MediaType;
 
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
-import org.apache.hadoop.yarn.api.records.timeline.TimelineEntities;
-import org.apache.hadoop.yarn.api.records.timeline.TimelineEntity;
-import org.apache.hadoop.yarn.api.records.timeline.TimelineEvent;
-import org.apache.hadoop.yarn.api.records.timeline.TimelineEvents;
-import org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse;
 import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TestTimelineMetricStore;
 import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricStore;
-import org.apache.hadoop.yarn.server.applicationhistoryservice.timeline.TimelineStore;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.YarnJacksonJaxbJsonProvider;
 import org.junit.Test;