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;