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 -> {

Reply via email to