[AMBARI-24637] Ambari metrics service check failed during UI deploy. (#2316)
* [AMBARI-24637] Ambari metrics service check failed during UI deploy.
* [AMBARI-24637] Ambari metrics service check failed during UI deploy. (2)
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 c461dc0..2dedd77 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
@@ -299,7 +299,6 @@
apps = new ConcurrentHashMap<>();
if (timelineMetricHostMetadata == null) {
TimelineMetricHostMetadata newHostMetadata = new TimelineMetricHostMetadata(apps);
- newHostMetadata.setUuid(getUuidForHostname(hostname, true));
HOSTED_APPS_MAP.put(hostname, newHostMetadata);
} else {
HOSTED_APPS_MAP.get(hostname).setHostedApps(apps);
@@ -453,17 +452,19 @@
}
byte[] uuid = uuidGenStrategy.computeUuid(hostname, HOSTNAME_UUID_LENGTH);
- if (uuidHostMap.containsKey(new TimelineMetricUuid(uuid))) {
- LOG.error("Duplicate key computed for " + hostname +", Collides with " + uuidHostMap.get(uuid));
+ TimelineMetricUuid timelineMetricUuid = new TimelineMetricUuid(uuid);
+ if (uuidHostMap.containsKey(timelineMetricUuid) && !hostname.equals(uuidHostMap.get(timelineMetricUuid))) {
+ LOG.error("Duplicate key computed for " + hostname +", Collides with " + uuidHostMap.get(timelineMetricUuid));
return null;
}
- if (timelineMetricHostMetadata == null) {
- timelineMetricHostMetadata = new TimelineMetricHostMetadata();
- HOSTED_APPS_MAP.put(hostname, timelineMetricHostMetadata);
+ timelineMetricHostMetadata = HOSTED_APPS_MAP.computeIfAbsent(hostname, k -> new TimelineMetricHostMetadata());
+ if (timelineMetricHostMetadata.getUuid() == null) {
+ timelineMetricHostMetadata.setUuid(uuid);
}
- timelineMetricHostMetadata.setUuid(uuid);
- uuidHostMap.put(new TimelineMetricUuid(uuid), hostname);
+ if (!uuidHostMap.containsKey(timelineMetricUuid)) {
+ uuidHostMap.put(timelineMetricUuid, hostname);
+ }
return uuid;
}
@@ -501,6 +502,7 @@
return null;
}
+ timelineMetricMetadata = METADATA_CACHE.get(key);
if (timelineMetricMetadata == null) {
timelineMetricMetadata = new TimelineMetricMetadata();
timelineMetricMetadata.setMetricName(timelineClusterMetric.getMetricName());
@@ -509,9 +511,14 @@
METADATA_CACHE.put(key, timelineMetricMetadata);
}
- timelineMetricMetadata.setUuid(uuid.uuid);
+ if (timelineMetricMetadata.getUuid() == null) {
+ timelineMetricMetadata.setUuid(uuid.uuid);
+ }
timelineMetricMetadata.setIsPersisted(false);
- uuidKeyMap.put(uuid, key);
+
+ if (!uuidKeyMap.containsKey(uuid)) {
+ uuidKeyMap.put(uuid, key);
+ }
return uuid.uuid;
}
diff --git a/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataManager.java b/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataManager.java
index 28bb75e..90def86 100644
--- a/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataManager.java
+++ b/ambari-metrics-timelineservice/src/test/java/org/apache/ambari/metrics/core/timeline/discovery/TestMetadataManager.java
@@ -184,6 +184,7 @@
public void testWildcardSanitization() throws IOException, SQLException, URISyntaxException {
// Initialize new manager
metadataManager = new TimelineMetricMetadataManager(new Configuration(), hdb);
+ hdb.setMetadataInstance(metadataManager);
final long now = System.currentTimeMillis();
TimelineMetrics timelineMetrics = new TimelineMetrics();