You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2020/07/08 13:18:28 UTC

[brooklyn-server] 18/20: Change sensor polling

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

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 8b074003effe61ea2357e3c643943380066fad8c
Author: Duncan Grant <du...@cloudsoft.io>
AuthorDate: Wed Jul 8 13:04:19 2020 +0100

    Change sensor polling
    
    Was previously creating feed per sensor but this was failing randomly
---
 .../container/entity/helm/HelmEntityImpl.java      | 35 ++++++++--------------
 .../container/entity/helm/HelmEntityLiveTest.java  |  8 ++---
 2 files changed, 16 insertions(+), 27 deletions(-)

diff --git a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java
index 70dda0f..0c2ccf1 100644
--- a/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java
+++ b/locations/container/src/main/java/org/apache/brooklyn/container/entity/helm/HelmEntityImpl.java
@@ -21,7 +21,9 @@ package org.apache.brooklyn.container.entity.helm;
 import com.google.common.base.Functions;
 import com.google.common.collect.ImmutableList;
 import io.fabric8.kubernetes.api.model.apps.Deployment;
+import io.fabric8.kubernetes.api.model.apps.DoneableDeployment;
 import io.fabric8.kubernetes.client.*;
+import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.container.location.kubernetes.KubernetesLocation;
@@ -124,27 +126,6 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity {
                 .period(Duration.TEN_SECONDS)
                 .build());
 
-        String config = getLocation().getConfig(KubernetesLocation.KUBECONFIG);
-        KubernetesClient client = getClient(config);
-        String helmNameInstallName = getConfig(HelmEntity.HELM_DEPLOYMENT_NAME);
-        List<Deployment> deployments = getDeployments(client, helmNameInstallName);
-
-        for (Deployment deployment : deployments) {
-            String sensorName = "helm.deployment." + deployment.getMetadata().getName() + ".replicas";
-            addFeed(FunctionFeed.builder()
-            .entity(this)
-            .poll(new FunctionPollConfig<String, Integer>(Sensors.newIntegerSensor(sensorName))
-                    .callable(getKubeReplicasCallable(deployment.getMetadata().getName())))
-                    .period(Duration.TEN_SECONDS)
-                    .build());
-
-            addFeed(FunctionFeed.builder()
-                    .entity(this)
-                    .poll(new FunctionPollConfig<String, Integer>(Sensors.newIntegerSensor(sensorName))
-                            .callable(getKubeReplicasAvailableCallable(deployment.getMetadata().getName())))
-                    .period(Duration.TEN_SECONDS)
-                    .build());
-        }
     }
 
     private void addHelmFeed(String command, AttributeSensor<String> sensor) {
@@ -249,6 +230,12 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity {
             public List<String> call() throws Exception {
                 KubernetesClient client = getClient(config);
                 List<Deployment> deployments = getDeployments(client, helmNameInstallName);
+                for (Deployment deployment : deployments) {
+                    String sensorName = "helm.deployment." + deployment.getMetadata().getName() + ".replicas";
+                    sensors().set(Sensors.newIntegerSensor(sensorName), deployment.getStatus().getReplicas());
+                    sensors().set(Sensors.newIntegerSensor(sensorName+".available"), deployment.getStatus().getAvailableReplicas());
+                }
+
                 return deployments.stream().map(deployment -> deployment.getMetadata().getName()).collect(Collectors.toList());
             }
         };
@@ -312,7 +299,8 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity {
             @Override
             public Integer call() throws Exception {
                 KubernetesClient client = getClient(config);
-                return countReplicas(getDeployments(client, deploymentName));
+                Deployment deployment = client.apps().deployments().inNamespace(getNamespace()).withName(deploymentName).get();
+                return deployment.getStatus().getReplicas();
             }
         };
     }
@@ -324,7 +312,8 @@ public class HelmEntityImpl extends AbstractEntity implements HelmEntity {
             @Override
             public Integer call() throws Exception {
                 KubernetesClient client = getClient(config);
-                return countAvailableReplicas(getDeployments(client, deploymentName));
+                Deployment deployment = client.apps().deployments().inNamespace(getNamespace()).withName(deploymentName).get();
+                return deployment.getStatus().getAvailableReplicas();
             }
         };
     }
diff --git a/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java b/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java
index d6d53fd..291f84d 100644
--- a/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java
+++ b/locations/container/src/test/java/org/apache/brooklyn/container/entity/helm/HelmEntityLiveTest.java
@@ -130,13 +130,13 @@ public class HelmEntityLiveTest extends BrooklynAppLiveTestSupport {
 
         app.start(newKubernetesLocation());
 
-        assertAttributeEqualsEventually(andManageChild, HelmEntity.AVAILABLE_REPLICAS, 1);
-        assertAttributeEqualsEventually(andManageChild, HelmEntity.REPLICAS, 1);
+        assertAttributeEqualsEventually(andManageChild, Sensors.newIntegerSensor("helm.deployment.prometheus-server.replicas"), 1);
+        assertAttributeEqualsEventually(andManageChild, Sensors.newIntegerSensor("helm.deployment.prometheus-server.replicas.available"), 1);
 
         andManageChild.resize("prometheus-server", 2);
 
-        assertAttributeEqualsEventually(andManageChild, HelmEntity.AVAILABLE_REPLICAS, 2);
-        assertAttributeEqualsEventually(andManageChild, HelmEntity.REPLICAS, 2);
+        assertAttributeEqualsEventually(andManageChild, Sensors.newIntegerSensor("helm.deployment.prometheus-server.replicas"), 2);
+        assertAttributeEqualsEventually(andManageChild, Sensors.newIntegerSensor("helm.deployment.prometheus-server.replicas.available"), 2);
 
         assertAttributeEqualsEventually(andManageChild, HelmEntity.DEPLOYMENT_READY, true);
     }