]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
qa: test_pool_min_size should kill osds first then mark them down 65074/head
authorBill Scales <bill_scales@uk.ibm.com>
Sun, 17 Aug 2025 15:42:11 +0000 (16:42 +0100)
committerBill Scales <bill_scales@uk.ibm.com>
Sun, 17 Aug 2025 15:54:26 +0000 (16:54 +0100)
commit16542cb69254ea4dff4b8cbb41a8935a1a72f8a7
tree0b9d188d763a321b3a800820bb754e84c1d5fa12
parent6ccf8a7f478991eb94fc7a6e9e7c93c657e0efa2
qa: test_pool_min_size should kill osds first then mark them down

The objective of test_pool_min_size is to inject up to M failures
in a K+M pool to prove that it has enough redundancy to stay
active.

It was selecting OSDs and then killing and marking them out
one at a time. Testing with wide erasure codes (high values of
K and M - for example 8+4) found that this test sometimes
failed with a PG become dead. Debugging showed that what
was happening is that after one OSD had been killed and
marked out this allowed rebalancing and async recovery to
start which further reduced the redundancy of the PG,
when the remaining error injects happened the PG
correctly became dead.

In practice OSDs are not normally killed and marked out
one after another in quick succession. The more common
scenario is that one or more OSDs fail at about the
same time (lets say over a couple of minutes) and then
after mon_osd_down_out_interval (10 mins) the mon
will mark them out. Killing the OSDs first and then
marking them out prevents additional async recovery
from starting.

If OSDs do fail over a long period of time such that
the mon marks each OSD out then hopefully there is
enough time for async recovery to run between the
failures.

This commit changes the error inject to kill all the
selected OSDs first and then to mark them out.

Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
qa/tasks/ceph_manager.py