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

weizhou pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.20 by this push:
     new 7c727a34406 CKS: Fix transition exception when scaling Stopped k8s 
clusters (#11598)
7c727a34406 is described below

commit 7c727a344061d73f8ccdc6febbbfa019e1bd1007
Author: Bernardo De Marco Gonçalves <[email protected]>
AuthorDate: Thu Sep 11 05:42:41 2025 -0300

    CKS: Fix transition exception when scaling Stopped k8s clusters (#11598)
    
    * add new k8s cluster transition
    
    * apply suggestion
    
    * apply suggestion
---
 .../main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java    | 4 ++++
 .../cluster/actionworkers/KubernetesClusterScaleWorker.java          | 5 ++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java
index 591da077aec..379a0db2ccd 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java
@@ -58,6 +58,7 @@ public interface KubernetesCluster extends ControlledEntity, 
com.cloud.utils.fsm
         Stopping("Resources for the Kubernetes cluster are being destroyed"),
         Stopped("All resources for the Kubernetes cluster are destroyed, 
Kubernetes cluster may still have ephemeral resource like persistent volumes 
provisioned"),
         Scaling("Transient state in which resources are either getting scaled 
up/down"),
+        ScalingStoppedCluster("Transient state in which the service offerings 
of stopped clusters are getting scaled"),
         Upgrading("Transient state in which cluster is getting upgraded"),
         Alert("State to represent Kubernetes clusters which are not in 
expected desired state (operationally in active control place, stopped cluster 
VM's etc)."),
         Recovering("State in which Kubernetes cluster is recovering from alert 
state"),
@@ -89,8 +90,11 @@ public interface KubernetesCluster extends ControlledEntity, 
com.cloud.utils.fsm
             s_fsm.addTransition(State.Running, Event.AutoscaleRequested, 
State.Scaling);
             s_fsm.addTransition(State.Running, Event.ScaleUpRequested, 
State.Scaling);
             s_fsm.addTransition(State.Running, Event.ScaleDownRequested, 
State.Scaling);
+            s_fsm.addTransition(State.Stopped, Event.ScaleUpRequested, 
State.ScalingStoppedCluster);
             s_fsm.addTransition(State.Scaling, Event.OperationSucceeded, 
State.Running);
             s_fsm.addTransition(State.Scaling, Event.OperationFailed, 
State.Alert);
+            s_fsm.addTransition(State.ScalingStoppedCluster, 
Event.OperationSucceeded, State.Stopped);
+            s_fsm.addTransition(State.ScalingStoppedCluster, 
Event.OperationFailed, State.Alert);
 
             s_fsm.addTransition(State.Running, Event.UpgradeRequested, 
State.Upgrading);
             s_fsm.addTransition(State.Upgrading, Event.OperationSucceeded, 
State.Running);
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java
index 4d50ef7e1f8..f6828e3b203 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java
@@ -284,7 +284,8 @@ public class KubernetesClusterScaleWorker extends 
KubernetesClusterResourceModif
 
     private void scaleKubernetesClusterOffering() throws CloudRuntimeException 
{
         validateKubernetesClusterScaleOfferingParameters();
-        if 
(!kubernetesCluster.getState().equals(KubernetesCluster.State.Scaling)) {
+        List<KubernetesCluster.State> scalingStates = 
List.of(KubernetesCluster.State.Scaling, 
KubernetesCluster.State.ScalingStoppedCluster);
+        if (!scalingStates.contains(kubernetesCluster.getState())) {
             stateTransitTo(kubernetesCluster.getId(), 
KubernetesCluster.Event.ScaleUpRequested);
         }
         if (KubernetesCluster.State.Created.equals(originalState)) {
@@ -475,6 +476,8 @@ public class KubernetesClusterScaleWorker extends 
KubernetesClusterResourceModif
             scaleKubernetesClusterOffering();
         } else if (clusterSizeScalingNeeded) {
             scaleKubernetesClusterSize();
+        } else {
+            return true;
         }
         stateTransitTo(kubernetesCluster.getId(), 
KubernetesCluster.Event.OperationSucceeded);
         return true;

Reply via email to