Merge pull request #16138 from rook/mergify/bp/release-1.17/pr-16087

osd: treat non existing OSD nodes as drained (backport #16087)
This commit is contained in:
Travis Nielsen authored and GitHub committed 2025-07-15 10:58:51 -06:00
commit 1462eac4bd
2 files changed
+35 -1

No files matched your search

@@ -490,6 +490,9 @@ func (r *ReconcileClusterDisruption) getOSDFailureDomains(clusterInfo *cephclien
// hasOSDNodeDrained returns true if OSD pod is not assigned to any node or if the OSD node is not schedulable
func hasOSDNodeDrained(ctx context.Context, c client.Client, osdNodeName string) (bool, error) {
node, err := getNode(ctx, c, osdNodeName)
if apierrors.IsNotFound(err) {
return true, nil
}
if err != nil {
return false, errors.Wrapf(err, "failed to get node %q", osdNodeName)
}
@@ -181,6 +181,30 @@ func TestGetOSDFailureDomains(t *testing.T) {
expectedDrainingFailureDomains: []string{"zone-3"},
expectedDownOSDs: []int{3},
},
{
name: "case 6: osd in zone-3 is pending and the osd node does not exist",
osds: []appsv1.Deployment{
fakeOSDDeployment(1, 1), fakeOSDDeployment(2, 1),
fakeOSDDeployment(3, 0),
},
nodes: []corev1.Node{*getNodeObject("node-1", false), *getNodeObject("node-2", false)},
expectedAllFailureDomains: []string{"zone-1", "zone-2", "zone-3"},
expectedOsdDownFailureDomains: []string{"zone-3"},
expectedDrainingFailureDomains: []string{"zone-3"},
expectedDownOSDs: []int{3},
},
{
name: "case 7: osd in zone-1 and zone-2 are pending and node does not exist",
osds: []appsv1.Deployment{
fakeOSDDeployment(1, 0), fakeOSDDeployment(2, 0),
fakeOSDDeployment(3, 1),
},
nodes: []corev1.Node{*getNodeObject("node-3", false)},
expectedAllFailureDomains: []string{"zone-1", "zone-2", "zone-3"},
expectedOsdDownFailureDomains: []string{"zone-1", "zone-2"},
expectedDrainingFailureDomains: []string{"zone-1", "zone-2"},
expectedDownOSDs: []int{1, 2},
},
}
for _, tc := range testcases {
@@ -426,11 +450,18 @@ func TestHasNodeDrained(t *testing.T) {
assert.False(t, expected)
// Expecting node drain because OSD pod is assigned to an unschedulable node
osdDeployment = fakeOSDDeployment(2, 2)
osdDeployment = fakeOSDDeployment(2, 0)
r = getFakeReconciler(t, getNodeObject("node-2", true), osdDeployment.DeepCopy(), &corev1.ConfigMap{})
expected, err = hasOSDNodeDrained(ctx, r.client, "node-2")
assert.NoError(t, err)
assert.True(t, expected)
// Expecting node drain because OSD pod is assigned to a non existent node
osdDeployment = fakeOSDDeployment(3, 0)
r = getFakeReconciler(t, osdDeployment.DeepCopy(), &corev1.ConfigMap{})
expected, err = hasOSDNodeDrained(ctx, r.client, "node-3")
assert.NoError(t, err)
assert.True(t, expected)
}
func TestSetPDBConfig(t *testing.T) {