in remote/src/main/java/com/spotify/metrics/remote/SemanticAggregatorMetricRegistry.java [63:93]
public <T extends RemoteMetric> T getOrAdd(
final MetricId name,
final List<String> shardKey,
final SemanticAggregatorMetricBuilder<T> builder
) {
final RemoteMetric metric = metrics.get(name);
if (metric != null) {
if (!builder.isInstance(metric)) {
throw new IllegalArgumentException(
name + " is already used for a different type of metric");
}
return (T) metric;
}
final T addition = builder.newMetric(name, shardKey, remote);
final RemoteMetric previous = metrics.putIfAbsent(name, addition);
if (previous == null) {
return addition;
}
if (!builder.isInstance(previous)) {
throw new IllegalArgumentException(
name + " is already used for a different type of metric");
}
return (T) previous;
}