You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/04/22 11:20:01 UTC

[dubbo] branch 3.0 updated: [3.0] Kubernetes Client dependency upgrade (#7603)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new e933387  [3.0] Kubernetes Client dependency upgrade (#7603)
e933387 is described below

commit e93338749a584dca1a98da9efe828e63b321dd7d
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Apr 22 19:19:48 2021 +0800

    [3.0] Kubernetes Client dependency upgrade (#7603)
    
    * upgrade fabric version, use http protocol in ut instead
---
 dubbo-dependencies-bom/pom.xml                     |  2 +-
 .../kubernetes/KubernetesServiceDiscovery.java     | 31 ++++++++++++----------
 .../kubernetes/KubernetesServiceDiscoveryTest.java | 26 ++++++++++--------
 3 files changed, 33 insertions(+), 26 deletions(-)

diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml
index 8cc1d43..8891d21 100644
--- a/dubbo-dependencies-bom/pom.xml
+++ b/dubbo-dependencies-bom/pom.xml
@@ -148,7 +148,7 @@
         <eureka.version>1.9.12</eureka.version>
 
         <!-- Fabric8 for Kubernetes -->
-        <fabric8_kubernetes_version>4.10.3</fabric8_kubernetes_version>
+        <fabric8_kubernetes_version>5.3.0</fabric8_kubernetes_version>
 
         <!-- Alibaba -->
         <alibaba_spring_context_support_version>1.0.8</alibaba_spring_context_support_version>
diff --git a/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscovery.java b/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscovery.java
index f75837a..9719820 100644
--- a/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscovery.java
@@ -34,13 +34,14 @@ import io.fabric8.kubernetes.api.model.EndpointPort;
 import io.fabric8.kubernetes.api.model.EndpointSubset;
 import io.fabric8.kubernetes.api.model.Endpoints;
 import io.fabric8.kubernetes.api.model.Pod;
+import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.client.Config;
 import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
-import io.fabric8.kubernetes.client.KubernetesClientException;
 import io.fabric8.kubernetes.client.Watch;
 import io.fabric8.kubernetes.client.Watcher;
+import io.fabric8.kubernetes.client.WatcherException;
 
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -123,11 +124,12 @@ public class KubernetesServiceDiscovery implements ServiceDiscovery {
                     .pods()
                     .inNamespace(namespace)
                     .withName(currentHostname)
-                    .edit()
-                    .editOrNewMetadata()
-                    .addToAnnotations(KUBERNETES_PROPERTIES_KEY, JSONObject.toJSONString(serviceInstance.getMetadata()))
-                    .endMetadata()
-                    .done();
+                    .edit(pod->
+                            new PodBuilder(pod)
+                                    .editOrNewMetadata()
+                                    .addToAnnotations(KUBERNETES_PROPERTIES_KEY, JSONObject.toJSONString(serviceInstance.getMetadata()))
+                                    .endMetadata()
+                                    .build());
             if (logger.isInfoEnabled()) {
                 logger.info("Write Current Service Instance Metadata to Kubernetes pod. " +
                         "Current pod name: " + currentHostname);
@@ -149,11 +151,12 @@ public class KubernetesServiceDiscovery implements ServiceDiscovery {
                     .pods()
                     .inNamespace(namespace)
                     .withName(currentHostname)
-                    .edit()
-                    .editOrNewMetadata()
-                    .removeFromAnnotations(KUBERNETES_PROPERTIES_KEY)
-                    .endMetadata()
-                    .done();
+                    .edit(pod ->
+                            new PodBuilder(pod)
+                                    .editOrNewMetadata()
+                                    .removeFromAnnotations(KUBERNETES_PROPERTIES_KEY)
+                                    .endMetadata()
+                                    .build());
             if (logger.isInfoEnabled()) {
                 logger.info("Remove Current Service Instance from Kubernetes pod. Current pod name: " + currentHostname);
             }
@@ -222,7 +225,7 @@ public class KubernetesServiceDiscovery implements ServiceDiscovery {
                     }
 
                     @Override
-                    public void onClose(KubernetesClientException cause) {
+                    public void onClose(WatcherException cause) {
                         // ignore
                     }
                 });
@@ -253,7 +256,7 @@ public class KubernetesServiceDiscovery implements ServiceDiscovery {
                     }
 
                     @Override
-                    public void onClose(KubernetesClientException cause) {
+                    public void onClose(WatcherException cause) {
                         // ignore
                     }
                 });
@@ -284,7 +287,7 @@ public class KubernetesServiceDiscovery implements ServiceDiscovery {
                     }
 
                     @Override
-                    public void onClose(KubernetesClientException cause) {
+                    public void onClose(WatcherException cause) {
                         // ignore
                     }
                 });
diff --git a/dubbo-registry/dubbo-registry-kubernetes/src/test/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscoveryTest.java b/dubbo-registry/dubbo-registry-kubernetes/src/test/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscoveryTest.java
index d3d8c9b..15e9b1a 100644
--- a/dubbo-registry/dubbo-registry-kubernetes/src/test/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscoveryTest.java
+++ b/dubbo-registry/dubbo-registry-kubernetes/src/test/java/org/apache/dubbo/registry/kubernetes/KubernetesServiceDiscoveryTest.java
@@ -30,7 +30,7 @@ import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServiceBuilder;
 import io.fabric8.kubernetes.client.Config;
-import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
@@ -47,9 +47,9 @@ import java.util.Map;
 
 @ExtendWith({MockitoExtension.class})
 public class KubernetesServiceDiscoveryTest {
-    public KubernetesServer mockServer = new KubernetesServer(true, true);
+    public KubernetesServer mockServer = new KubernetesServer(false, true);
 
-    private KubernetesClient mockClient;
+    private NamespacedKubernetesClient mockClient;
 
     private ServiceInstancesChangedListener mockListener = Mockito.mock(ServiceInstancesChangedListener.class);
 
@@ -64,7 +64,7 @@ public class KubernetesServiceDiscoveryTest {
 
         serverUrl = URL.valueOf(mockClient.getConfiguration().getMasterUrl())
                 .setProtocol("kubernetes")
-                .addParameter(KubernetesClientConst.TRUST_CERTS, "true")
+                .addParameter(KubernetesClientConst.USE_HTTPS, "false")
                 .addParameter(KubernetesClientConst.HTTP2_DISABLE, "true");
 
         System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false");
@@ -116,16 +116,20 @@ public class KubernetesServiceDiscoveryTest {
         Mockito.doNothing().when(mockListener).onEvent(Mockito.any());
 
         serviceDiscovery.addServiceInstancesChangedListener(mockListener);
-        mockClient.endpoints().withName("TestService").edit().editFirstSubset()
-                .addNewAddress().withIp("ip2")
-                .withNewTargetRef().withUid("uid2").withName("TestServer").endTargetRef().endAddress()
-                .addNewPort("Test", "Test", 12345, "TCP").endSubset()
-                .done();
+        mockClient.endpoints().withName("TestService")
+                .edit(endpoints ->
+                        new EndpointsBuilder(endpoints)
+                                .editFirstSubset()
+                                .addNewAddress()
+                                .withIp("ip2")
+                                .withNewTargetRef().withUid("uid2").withName("TestServer").endTargetRef()
+                                .endAddress().endSubset()
+                                .build());
 
         Thread.sleep(5000);
         ArgumentCaptor<ServiceInstancesChangedEvent> eventArgumentCaptor =
                 ArgumentCaptor.forClass(ServiceInstancesChangedEvent.class);
-        Mockito.verify(mockListener).onEvent(eventArgumentCaptor.capture());
+        Mockito.verify(mockListener, Mockito.times(2)).onEvent(eventArgumentCaptor.capture());
         Assertions.assertEquals(2, eventArgumentCaptor.getValue().getServiceInstances().size());
 
         serviceDiscovery.unregister(serviceInstance);
@@ -158,7 +162,7 @@ public class KubernetesServiceDiscoveryTest {
         Thread.sleep(5000);
         ArgumentCaptor<ServiceInstancesChangedEvent> eventArgumentCaptor =
                 ArgumentCaptor.forClass(ServiceInstancesChangedEvent.class);
-        Mockito.verify(mockListener).onEvent(eventArgumentCaptor.capture());
+        Mockito.verify(mockListener, Mockito.times(2)).onEvent(eventArgumentCaptor.capture());
         Assertions.assertEquals(1, eventArgumentCaptor.getValue().getServiceInstances().size());
 
         serviceDiscovery.unregister(serviceInstance);