This is an automated email from the ASF dual-hosted git repository.
vishalsuvagia pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-2.7 by this push:
new 0b7b2c6ace AMBARI-25963: Metrics metadata sync problem, accessing
metrics which got created though other collector throws NPE (#3720)
0b7b2c6ace is described below
commit 0b7b2c6acef62560d9625364c33eeff84b2afe9a
Author: Mohammad Arshad <[email protected]>
AuthorDate: Mon Aug 14 14:08:07 2023 +0530
AMBARI-25963: Metrics metadata sync problem, accessing metrics which got
created though other collector throws NPE (#3720)
---
.../timeline/discovery/TimelineMetricMetadataManager.java | 10 ++++++++++
.../timeline/discovery/TimelineMetricMetadataSync.java | 1 +
.../metrics/core/timeline/discovery/TestMetadataSync.java | 14 ++++++++++++++
3 files changed, 25 insertions(+)
diff --git
a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
index 8d5edd63c7..9f17ae86f8 100644
---
a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
+++
b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataManager.java
@@ -422,6 +422,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/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
index b3b8d5c334..03bf4ab947 100644
---
a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/discovery/TimelineMetricMetadataSync.java
+++
b/ambari-metrics/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/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
index a00a788135..ff75c5ef96 100644
---
a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataSync.java
+++
b/ambari-metrics/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,11 @@ 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]