Github user pnowojski commented on a diff in the pull request:
https://github.com/apache/flink/pull/4840#discussion_r146594528
--- 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 --
Would you rather have a runtime error about illegal/unintended write access
or none at all? Java sucks in this regard (missing const-correctness) :(
Exposing `List<...>` have the same issue.
---