This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push: new d6e7ee8ae3 Fix K8sRetag reads the wrong k8s service (#10568) d6e7ee8ae3 is described below commit d6e7ee8ae3fc5541e07ab7f57e3f76ba2f3160b3 Author: innerpeacez <innerpeace.z...@gmail.com> AuthorDate: Tue Mar 21 16:53:58 2023 +0800 Fix K8sRetag reads the wrong k8s service (#10568) --- docs/en/changes/changes.md | 1 + .../apache/skywalking/oap/meter/analyzer/dsl/tagOpt/K8sRetagType.java | 3 +-- .../org/apache/skywalking/oap/meter/analyzer/k8s/K8sInfoRegistry.java | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 14d2f090ec..a20da16af5 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -16,6 +16,7 @@ * Fix otel k8s-cluster rule add namespace dimension for MAL aggregation calculation(Deployment Status,Deployment Spec Replicas) * Support continuous profiling feature. * Support collect process level related metrics. +* Fix K8sRetag reads the wrong k8s service from the cache due to a possible namespace mismatch. #### UI * Revert: cpm5d function. This feature is cancelled from backend. diff --git a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/tagOpt/K8sRetagType.java b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/tagOpt/K8sRetagType.java index df12ed667f..53d9ff5fe5 100644 --- a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/tagOpt/K8sRetagType.java +++ b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/tagOpt/K8sRetagType.java @@ -33,7 +33,7 @@ public enum K8sRetagType implements Retag { final String newLabelName, final String existingLabelName, final String namespaceLabelName) { - Sample[] samples = Arrays.stream(ss).map(sample -> { + return Arrays.stream(ss).map(sample -> { String podName = sample.getLabels().get(existingLabelName); String namespace = sample.getLabels().get(namespaceLabelName); if (!Strings.isNullOrEmpty(podName) && !Strings.isNullOrEmpty(namespace)) { @@ -47,7 +47,6 @@ public enum K8sRetagType implements Retag { } return sample; }).toArray(Sample[]::new); - return samples; } } } diff --git a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/k8s/K8sInfoRegistry.java b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/k8s/K8sInfoRegistry.java index a82e185181..0fc7c54bdc 100644 --- a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/k8s/K8sInfoRegistry.java +++ b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/k8s/K8sInfoRegistry.java @@ -51,6 +51,7 @@ public class K8sInfoRegistry { .namespace(it.getMetadata().getNamespace()) .build()) .orElse(ObjectID.EMPTY))); + ipServiceMap = CacheBuilder.newBuilder() .expireAfterWrite(Duration.ofMinutes(3)) .build(CacheLoader.from(ip -> KubernetesServices.INSTANCE @@ -73,6 +74,7 @@ public class K8sInfoRegistry { .build()) .findFirst() .orElse(ObjectID.EMPTY))); + podServiceMap = CacheBuilder.newBuilder() .expireAfterWrite(Duration.ofMinutes(3)) .build(CacheLoader.from(podObjectID -> { @@ -94,6 +96,7 @@ public class K8sInfoRegistry { .list() .stream() .filter(it -> it.getMetadata() != null) + .filter(it -> Objects.equals(it.getMetadata().getNamespace(), pod.get().getMetadata().getNamespace())) .filter(it -> it.getSpec() != null) .filter(it -> requireNonNull(it.getSpec()).getSelector() != null) .filter(it -> {