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 cb2676845b Improve Kubernetes coordinator to only select ready OAP 
Pods to build cluster (#10950)
cb2676845b is described below

commit cb2676845b4a47d6187cc82d440379666880d29d
Author: kezhenxu94 <[email protected]>
AuthorDate: Fri Jun 16 21:45:19 2023 +0800

    Improve Kubernetes coordinator to only select ready OAP Pods to build 
cluster (#10950)
---
 .github/workflows/skywalking.yaml                              |  6 ++++++
 docs/en/changes/changes.md                                     |  1 +
 .../cluster/plugin/kubernetes/KubernetesCoordinator.java       |  7 +++++--
 .../cluster/plugin/kubernetes/KubernetesCoordinatorTest.java   |  3 +++
 .../apache/skywalking/library/kubernetes/KubernetesPods.java   | 10 ++++++++++
 5 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/skywalking.yaml 
b/.github/workflows/skywalking.yaml
index 2ab10625cd..e4f80444d6 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -792,6 +792,12 @@ jobs:
           ALS_ANALYZER: ${{ matrix.analyzer }}
         with:
           e2e-file: $GITHUB_WORKSPACE/test/e2e-v2/cases/istio/als/e2e.yaml
+      - uses: actions/upload-artifact@v2
+        if: ${{ failure() }}
+        name: Upload Logs
+        with:
+          name: logs
+          path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
 
   e2e-test-java-versions:
     if: |
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 2f9d8aec62..aa76893093 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -8,6 +8,7 @@
 
 * Add Neo4j component ID(112) language: Python.
 * Add Istio ServiceEntry registry to resolve unknown IPs in ALS.
+* Improve Kubernetes coordinator to only select ready OAP Pods to build 
cluster.
 
 #### UI
 
diff --git 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
index f084ae96a0..cda5e40cd9 100644
--- 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
+++ 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
@@ -23,6 +23,7 @@ import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.api.model.PodStatus;
 import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.library.kubernetes.KubernetesPods;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
 import org.apache.skywalking.oap.server.core.cluster.ClusterHealthStatus;
@@ -178,8 +179,10 @@ public class KubernetesCoordinator extends 
ClusterCoordinator {
                 switch (event) {
                     case ADDED:
                     case MODIFIED:
-                        if 
("Running".equalsIgnoreCase(pod.getStatus().getPhase())) {
-                            
this.remoteInstanceMap.put(remoteInstance.getAddress().toString(), 
remoteInstance);
+                        if (KubernetesPods.isReady(pod)) {
+                            
remoteInstanceMap.put(remoteInstance.getAddress().toString(), remoteInstance);
+                        } else {
+                            
remoteInstanceMap.remove(remoteInstance.getAddress().toString());
                         }
                         break;
                     case DELETED:
diff --git 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
index 2f89a9186d..4e35e9e134 100644
--- 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
+++ 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
@@ -20,6 +20,7 @@ package 
org.apache.skywalking.oap.server.cluster.plugin.kubernetes;
 
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.api.model.Pod;
+import io.fabric8.kubernetes.api.model.PodCondition;
 import io.fabric8.kubernetes.api.model.PodStatus;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.CoreModule;
@@ -327,6 +328,7 @@ public class KubernetesCoordinatorTest {
         v1Pod.getStatus().setPhase("Running");
         v1Pod.getMetadata().setUid(uid);
         v1Pod.getStatus().setPodIP(ip);
+        v1Pod.getStatus().setConditions(List.of(new PodCondition("", "", "", 
"", "True", "Ready")));
         return v1Pod;
     }
 
@@ -338,6 +340,7 @@ public class KubernetesCoordinatorTest {
             v1Pod.setStatus(new PodStatus());
             v1Pod.getMetadata().setUid(SELF_UID + i);
             v1Pod.getStatus().setPodIP(LOCAL_HOST);
+            v1Pod.getStatus().setConditions(List.of(new PodCondition("", "", 
"", "", "True", "Ready")));
             pods.add(v1Pod);
         }
         return pods;
diff --git 
a/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
 
b/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
index ea82445de6..2da878c77c 100644
--- 
a/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
+++ 
b/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
@@ -72,6 +72,16 @@ public enum KubernetesPods {
         });
     }
 
+    public static boolean isReady(Pod pod) {
+        return "Running".equalsIgnoreCase(pod.getStatus().getPhase()) &&
+            pod.getStatus()
+               .getConditions()
+               .stream()
+               .anyMatch(condition ->
+                   "Ready".equalsIgnoreCase(condition.getType()) &&
+                       "True".equalsIgnoreCase(condition.getStatus()));
+    }
+
     @SneakyThrows
     public Optional<Pod> findByIP(final String ip) {
         return podByIP.get(ip);

Reply via email to