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 <ars...@apache.org> 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: commits-unsubscr...@ambari.apache.org For additional commands, e-mail: commits-h...@ambari.apache.org