Github user zentol commented on a diff in the pull request: https://github.com/apache/flink/pull/4840#discussion_r146627036 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/rest/handler/legacy/metrics/MetricStore.java --- @@ -260,50 +293,66 @@ public String getMetric(String name, String defaultValue) { ? value : defaultValue; } - } - /** - * Sub-structure containing metrics of the JobManager. - */ - public static class JobManagerMetricStore extends ComponentMetricStore { + public static ComponentMetricStore unmodifiable(ComponentMetricStore source) { + if (source == null) { + return null; + } + return new ComponentMetricStore(unmodifiableMap(source.metrics)); + } } /** * Sub-structure containing metrics of a single TaskManager. */ + @ThreadSafe public static class TaskManagerMetricStore extends ComponentMetricStore { - public final Set<String> garbageCollectorNames = new HashSet<>(); + public final Set<String> garbageCollectorNames; + + public TaskManagerMetricStore() { + this(new ConcurrentHashMap<>(), ConcurrentHashMap.newKeySet()); + } + + public TaskManagerMetricStore(Map<String, String> metrics, Set<String> garbageCollectorNames) { + super(metrics); + this.garbageCollectorNames = checkNotNull(garbageCollectorNames); + } public void addGarbageCollectorName(String name) { garbageCollectorNames.add(name); } + + public static TaskManagerMetricStore unmodifiable(TaskManagerMetricStore source) { --- End diff -- If the returned list is a fresh copy independent of the map it can be modifiable; the user can do whatever he wants with it.
---