diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MonitoringInfoMetricName.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MonitoringInfoMetricName.java index bd3ccc871a50..c6dda30354d5 100644 --- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MonitoringInfoMetricName.java +++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MonitoringInfoMetricName.java @@ -19,13 +19,12 @@ import static org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkArgument; -import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import java.util.Objects; import org.apache.beam.model.pipeline.v1.MetricsApi; import org.apache.beam.sdk.metrics.MetricName; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Strings; +import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableMap; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -33,13 +32,10 @@ * key instead of only a name+namespace. This is useful when defining system defined metrics with a * specific urn via a {@code CounterContainer}. */ -@SuppressWarnings({ - "nullness" // TODO(https://issues.apache.org/jira/browse/BEAM-10402) -}) public class MonitoringInfoMetricName extends MetricName { - private String urn; - private Map labels = new HashMap(); + private final String urn; + private final Map labels; private MonitoringInfoMetricName(String urn, Map labels) { checkArgument(!Strings.isNullOrEmpty(urn), "MonitoringInfoMetricName urn must be non-empty"); @@ -47,34 +43,36 @@ private MonitoringInfoMetricName(String urn, Map labels) { // TODO(ajamato): Move SimpleMonitoringInfoBuilder to :runners:core-construction-java // and ensure all necessary labels are set for the specific URN. this.urn = urn; - for (Entry entry : labels.entrySet()) { - this.labels.put(entry.getKey(), entry.getValue()); - } + this.labels = ImmutableMap.copyOf(labels); } @Override public String getNamespace() { - if (labels.containsKey(MonitoringInfoConstants.Labels.NAMESPACE)) { - // User-generated metric - return labels.getOrDefault(MonitoringInfoConstants.Labels.NAMESPACE, null); - } else if (labels.containsKey(MonitoringInfoConstants.Labels.PCOLLECTION)) { - // System-generated metric - return labels.getOrDefault(MonitoringInfoConstants.Labels.PCOLLECTION, null); - } else if (labels.containsKey(MonitoringInfoConstants.Labels.PTRANSFORM)) { - // System-generated metric - return labels.getOrDefault(MonitoringInfoConstants.Labels.PTRANSFORM, null); - } else { - return urn.split(":", 2)[0]; + // User-generated metric + String ret = labels.get(MonitoringInfoConstants.Labels.NAMESPACE); + if (ret != null) { + return ret; + } + // System-generated metric + ret = labels.get(MonitoringInfoConstants.Labels.PCOLLECTION); + if (ret != null) { + return ret; + } + // System-generated metric + ret = labels.get(MonitoringInfoConstants.Labels.PTRANSFORM); + if (ret != null) { + return ret; } + return urn.split(":", 2)[0]; } @Override public String getName() { - if (labels.containsKey(MonitoringInfoConstants.Labels.NAME)) { - return labels.getOrDefault(MonitoringInfoConstants.Labels.NAME, null); - } else { - return urn.split(":", 2)[1]; + String ret = labels.get(MonitoringInfoConstants.Labels.NAME); + if (ret != null) { + return ret; } + return urn.split(":", 2)[1]; } /** @return the urn of this MonitoringInfo metric. */ diff --git a/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/GcsUtil.java b/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/GcsUtil.java index 668d94bbfd89..9e4e51680e1a 100644 --- a/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/GcsUtil.java +++ b/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/GcsUtil.java @@ -466,7 +466,8 @@ SeekableByteChannel open(GcsPath path, GoogleCloudStorageReadOptions readOptions MonitoringInfoConstants.Labels.RESOURCE, GcpResourceIdentifiers.cloudStorageBucket(path.getBucket())); baseLabels.put( - MonitoringInfoConstants.Labels.GCS_PROJECT_ID, googleCloudStorageOptions.getProjectId()); + MonitoringInfoConstants.Labels.GCS_PROJECT_ID, + String.valueOf(googleCloudStorageOptions.getProjectId())); baseLabels.put(MonitoringInfoConstants.Labels.GCS_BUCKET, path.getBucket()); ServiceCallMetric serviceCallMetric = @@ -580,7 +581,8 @@ public WritableByteChannel create(GcsPath path, CreateOptions options) throws IO MonitoringInfoConstants.Labels.RESOURCE, GcpResourceIdentifiers.cloudStorageBucket(path.getBucket())); baseLabels.put( - MonitoringInfoConstants.Labels.GCS_PROJECT_ID, googleCloudStorageOptions.getProjectId()); + MonitoringInfoConstants.Labels.GCS_PROJECT_ID, + String.valueOf(googleCloudStorageOptions.getProjectId())); baseLabels.put(MonitoringInfoConstants.Labels.GCS_BUCKET, path.getBucket()); ServiceCallMetric serviceCallMetric =