This is an automated email from the ASF dual-hosted git repository.

brahma pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ambari-metrics.git


The following commit(s) were added to refs/heads/master by this push:
     new 4bf5b28  AMBARI-25963: Metrics metadata sync problem, accessing 
metrics which got created though other collector throws NPE (#119)
4bf5b28 is described below

commit 4bf5b283d002d00df844613811966fbd60db2aa8
Author: Mohammad Arshad <arshad.mohamma...@gmail.com>
AuthorDate: Fri Jul 28 17:15:53 2023 +0530

    AMBARI-25963: Metrics metadata sync problem, accessing metrics which got 
created though other collector throws NPE (#119)
    
    Signed-off-by: Brahma Reddy Battula <bra...@apache.org>
---
 .../timeline/discovery/TimelineMetricMetadataManager.java | 10 ++++++++++
 .../timeline/discovery/TimelineMetricMetadataSync.java    |  1 +
 .../metrics/core/timeline/discovery/TestMetadataSync.java | 15 +++++++++++++++
 3 files changed, 26 insertions(+)

diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
index aa8c88a..94671c4 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
@@ -421,6 +421,16 @@ public class TimelineMetricMetadataManager {
     }
   }
 
+  /**
+   * Add uuid to metrics metadata mapping.
+   *
+   * @param uuid        metrics uuid
+   * @param metadataKey metrics metadata key
+   */
+  public void addMetricsInUuidMap(byte[] uuid, TimelineMetricMetadataKey 
metadataKey) {
+    uuidKeyMap.put(new TimelineMetricUuid(uuid), metadataKey);
+  }
+
   /**
    * Returns the UUID gen strategy.
    * @param configuration the config
diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
index b3b8d5c..03bf4ab 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
@@ -110,6 +110,7 @@ public class TimelineMetricMetadataSync implements Runnable 
{
       for (Map.Entry<TimelineMetricMetadataKey, TimelineMetricMetadata> 
metadataEntry : metadataFromStore.entrySet()) {
         if (!cachedMetadata.containsKey(metadataEntry.getKey())) {
           cachedMetadata.put(metadataEntry.getKey(), metadataEntry.getValue());
+          cacheManager.addMetricsInUuidMap(metadataEntry.getValue().getUuid(), 
metadataEntry.getKey());
         }
       }
     }
diff --git 
a/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
 
b/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
index a00a788..8eb4290 100644
--- 
a/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
+++ 
b/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
@@ -18,6 +18,9 @@
 package org.apache.ambari.metrics.core.timeline.discovery;
 
 import junit.framework.Assert;
+import 
org.apache.ambari.metrics.core.timeline.aggregators.TimelineClusterMetric;
+import org.apache.ambari.metrics.core.timeline.uuid.MetricUuidGenStrategy;
+import org.apache.ambari.metrics.core.timeline.uuid.Murmur3HashUuidGenStrategy;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetricMetadata;
@@ -37,6 +40,7 @@ import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
 public class TestMetadataSync {
+  private  MetricUuidGenStrategy uuidGenStrategy = new 
Murmur3HashUuidGenStrategy();
   @Test
   public void testRefreshMetadataOnWrite() throws Exception {
     Configuration configuration = createNiceMock(Configuration.class);
@@ -44,8 +48,10 @@ public class TestMetadataSync {
 
     final TimelineMetricMetadata testMetadata1 = new TimelineMetricMetadata(
       "m1", "a1", null, "", GAUGE.name(), System.currentTimeMillis(), true, 
false);
+    setMetricsUuid(testMetadata1);
     final TimelineMetricMetadata testMetadata2 = new TimelineMetricMetadata(
       "m2", "a2", null, "", GAUGE.name(), System.currentTimeMillis(), true, 
false);
+    setMetricsUuid(testMetadata2);
 
     Map<TimelineMetricMetadataKey, TimelineMetricMetadata> metadata =
       new HashMap<TimelineMetricMetadataKey, TimelineMetricMetadata>() {{
@@ -82,6 +88,9 @@ public class TestMetadataSync {
     Assert.assertEquals(2, metadata.size());
     Assert.assertTrue(metadata.containsKey(new TimelineMetricMetadataKey("m1", 
"a1", null)));
     Assert.assertTrue(metadata.containsKey(new TimelineMetricMetadataKey("m2", 
"a2", null)));
+    // Check if synced metrics can be found with uuid
+    Assert.assertNotNull("metrics not found with testMetadata1 uuid", 
metadataManager.getMetricFromUuid(testMetadata1.getUuid()));
+    Assert.assertNotNull("metrics not found with testMetadata2 uuid", 
metadataManager.getMetricFromUuid(testMetadata2.getUuid()));
 
     hostedApps = metadataManager.getHostedAppsCache();
     Assert.assertEquals(2, hostedApps.size());
@@ -95,6 +104,12 @@ public class TestMetadataSync {
 
   }
 
+  private void setMetricsUuid(TimelineMetricMetadata tmm) {
+    byte[] uuidBytes = uuidGenStrategy.computeUuid(new 
TimelineClusterMetric(tmm.getMetricName(), tmm.getAppId(),
+            tmm.getInstanceId(), tmm.getSeriesStartTime()), 
TimelineMetricMetadataManager.TIMELINE_METRIC_UUID_LENGTH);
+    tmm.setUuid(uuidBytes);
+  }
+
   @Test
   public void testFilterByRegexOnMetricName() throws Exception {
     Configuration configuration = createNiceMock(Configuration.class);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@ambari.apache.org
For additional commands, e-mail: commits-h...@ambari.apache.org

Reply via email to