Fix cross-parity version listing after pool removal (#267)

Availability-optimized writes can leave a readable null version across separate EC groups when a disk is unavailable. Recount ordinary null versions for all non-strict reads and cover version listing and complete pool removal with end-to-end tests.

Signed-off-by: Feng Ruohang <rh@vonng.com>
This commit is contained in:
Feng Ruohang
2026-11-01 14:08:09 +08:00
committed by GitHub
parent dd905b29f4
commit a7310d59fe
5 changed files with 253 additions and 38 deletions
+5 -3
View File
@@ -2027,9 +2027,11 @@ func mergeXLV2Versions(quorum int, strict bool, requestedVersions int, versions
if !checkedSingleNull {
singleNull = singleNullVersionStreams(originalVersions, false)
// Availability-optimized writes can change EC while a drive
// is offline. Only latest-only non-strict reads may recount
// these ordinary null versions across separate modern EC groups.
mixedECNull = !singleNull && !strict && requestedVersions == 1 &&
// is offline. Only non-strict reads may recount these
// ordinary null versions across separate modern EC groups.
// Each stream holds just this version, so listing all
// versions (decommission, rebalance) must recount too.
mixedECNull = !singleNull && !strict &&
singleNullVersionStreams(originalVersions, true)
checkedSingleNull = true
}