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 133cd15 AMBARI-25962: Host apps metadata is not synced to other collectors when multiple collectors are installed (#118) 133cd15 is described below commit 133cd157f81192d2e1541ce1ffeefdd54e9d71f4 Author: Mohammad Arshad <arshad.mohamma...@gmail.com> AuthorDate: Tue Jul 25 17:26:56 2023 +0530 AMBARI-25962: Host apps metadata is not synced to other collectors when multiple collectors are installed (#118) Signed-off-by: Brahma Reddy Battula <bra...@apache.org> --- .../discovery/TimelineMetricMetadataSync.java | 3 +- .../core/timeline/discovery/TestMetadataSync.java | 39 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) 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 0ffff76..b3b8d5c 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 @@ -200,7 +200,8 @@ public class TimelineMetricMetadataSync implements Runnable { Map<String, TimelineMetricHostMetadata> cachedData = cacheManager.getHostedAppsCache(); for (Map.Entry<String, TimelineMetricHostMetadata> storeEntry : hostedAppsDataFromStore.entrySet()) { - if (!cachedData.containsKey(storeEntry.getKey())) { + if (!cachedData.containsKey(storeEntry.getKey()) || + !cachedData.get(storeEntry.getKey()).getHostedApps().keySet().containsAll(storeEntry.getValue().getHostedApps().keySet())) { cachedData.put(storeEntry.getKey(), storeEntry.getValue()); } } 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 80eb89e..a00a788 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 @@ -19,6 +19,7 @@ package org.apache.ambari.metrics.core.timeline.discovery; import junit.framework.Assert; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric; import org.apache.hadoop.metrics2.sink.timeline.TimelineMetricMetadata; import org.apache.ambari.metrics.core.timeline.PhoenixHBaseAccessor; import org.junit.Test; @@ -27,6 +28,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import static com.mongodb.util.MyAsserts.assertNotNull; import static org.apache.hadoop.metrics2.sink.timeline.TimelineMetricMetadata.MetricType.GAUGE; import static org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.TIMELINE_METRIC_METADATA_FILTERS; import static org.easymock.EasyMock.createNiceMock; @@ -123,4 +125,41 @@ public class TestMetadataSync { Assert.assertEquals(1, metadata.size()); Assert.assertEquals("xxx.pqr.zzz", metadata.keySet().iterator().next().getMetricName()); } + + @Test + public void testRefreshHostAppsOnWrite() throws Exception { + Configuration configuration = createNiceMock(Configuration.class); + PhoenixHBaseAccessor hBaseAccessor = createNiceMock(PhoenixHBaseAccessor.class); + Map<String, TimelineMetricHostMetadata> hostedApps = new HashMap<String, TimelineMetricHostMetadata>() {{ + put("host1", new TimelineMetricHostMetadata(new HashSet<>(Arrays.asList("app1", "app2", "app3")))); + }}; + + expect(configuration.get("timeline.metrics.service.operation.mode")).andReturn("distributed"); + expect(hBaseAccessor.getHostedAppsMetadata()).andReturn(hostedApps); + replay(configuration, hBaseAccessor); + + // register host1 --> (app1,app2) + TimelineMetricMetadataManager metadataManager = new TimelineMetricMetadataManager(configuration, hBaseAccessor); + TimelineMetric tm1=new TimelineMetric("metric1","host1","app1",null ); + TimelineMetric tm2=new TimelineMetric("metric2","host1","app2",null ); + byte[] uuid1 = metadataManager.getUuid(tm1, true); + assertNotNull(uuid1); + byte[] uuid2 = metadataManager.getUuid(tm2, true); + assertNotNull(uuid2); + metadataManager.markSuccessOnSyncHostedAppsMetadata(); + + hostedApps = metadataManager.getHostedAppsCache(); + // Before other collector's host app data is synced + Assert.assertEquals(2, hostedApps.get("host1").getHostedApps().size()); + + metadataManager.metricMetadataSync = new TimelineMetricMetadataSync(metadataManager); + metadataManager.metricMetadataSync.run(); + + verify(configuration, hBaseAccessor); + + hostedApps = metadataManager.getHostedAppsCache(); + Assert.assertEquals(1, hostedApps.size()); + // After other collector's host app data is synced + Assert.assertEquals("Host app list is not synced properly",3, hostedApps.get("host1").getHostedApps().size()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@ambari.apache.org For additional commands, e-mail: commits-h...@ambari.apache.org