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 <[email protected]>
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 <[email protected]>
---
.../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: [email protected]
For additional commands, e-mail: [email protected]