Skip to content

Commit 6de2a02

Browse files
committed
Handle Out of host capacity scenario in OCI nodepools
1 parent 637d9ad commit 6de2a02

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

cluster-autoscaler/cloudprovider/oci/nodepools/oci_manager.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,9 @@ func (m *ociManagerImpl) GetNodePoolNodes(np NodePool) ([]cloudprovider.Instance
542542

543543
errorClass := cloudprovider.OtherErrorClass
544544
if *node.NodeError.Code == "LimitExceeded" ||
545-
(*node.NodeError.Code == "InternalServerError" &&
546-
strings.Contains(*node.NodeError.Message, "quota")) {
545+
*node.NodeError.Code == "QuotaExceeded" ||
546+
(*node.NodeError.Code == "InternalError" &&
547+
strings.Contains(*node.NodeError.Message, "Out of host capacity")) {
547548
errorClass = cloudprovider.OutOfResourcesErrorClass
548549
}
549550

cluster-autoscaler/cloudprovider/oci/nodepools/oci_node_pool.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,23 @@ func (np *nodePool) DecreaseTargetSize(delta int) error {
214214
}
215215
}
216216
klog.V(4).Infof("DECREASE_TARGET_CHECK_VIA_COMPUTE: %v", decreaseTargetCheckViaComputeBool)
217+
np.manager.InvalidateAndRefreshCache()
218+
nodes, err := np.manager.GetNodePoolNodes(np)
219+
if err != nil {
220+
klog.V(4).Error(err, "error while performing GetNodePoolNodes call")
221+
return err
222+
}
223+
if !decreaseTargetCheckViaComputeBool {
224+
for _, node := range nodes {
225+
if node.Status != nil && node.Status.ErrorInfo != nil {
226+
if node.Status.ErrorInfo.ErrorClass == cloudprovider.OutOfResourcesErrorClass {
227+
klog.V(4).Infof("Using Compute to calculate nodepool size as nodepool may contain nodes without a compute instance.")
228+
decreaseTargetCheckViaComputeBool = true
229+
break
230+
}
231+
}
232+
}
233+
}
217234
var nodesLen int
218235
if decreaseTargetCheckViaComputeBool {
219236
nodesLen, err = np.manager.GetExistingNodePoolSizeViaCompute(np)
@@ -222,12 +239,6 @@ func (np *nodePool) DecreaseTargetSize(delta int) error {
222239
return err
223240
}
224241
} else {
225-
np.manager.InvalidateAndRefreshCache()
226-
nodes, err := np.manager.GetNodePoolNodes(np)
227-
if err != nil {
228-
klog.V(4).Error(err, "error while performing GetNodePoolNodes call")
229-
return err
230-
}
231242
nodesLen = len(nodes)
232243
}
233244

0 commit comments

Comments
 (0)