mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-24 23:10:41 +02:00
ec.encode: require shard placement to meet -shardReplicaPlacement (#11947)
* ec: measure shard placement against replica-placement caps ecShardPlacementViolations reports where a volume's newest-generation shard placement exceeds the per-node and per-rack caps a -shardReplicaPlacement requests, using the same digit mapping the balance planner enforces (SameRackCount = shards/node, DiffRackCount = shards/rack, dc-qualified rack keys). * ec.encode: -strictPlacement keeps originals when placement breaches caps -shardReplicaPlacement tells the balancer the requested per-node and per-rack shard limits, but nothing verifies the outcome. With -strictPlacement the pre-delete shard verification also measures the final placement against those caps: a volume still over the node or rack limit aborts before its source is deleted, so the encode only completes when the requested failure-domain spread is actually met. * ec.encode: cover the strict-placement delete gate with a test The gate in verifyEcShardsBeforeDelete now runs against a stubbed topology: a compliant spread passes while an over-cap placement is refused before source deletion. The retry knobs become package vars so the test does not wait out the heartbeat-propagation backoff. * ec.encode: enforce -shardReplicaPlacement without a flag Drop the -strictPlacement option: the requested per-node and per-rack caps are always requirements at the pre-delete verification, so the encode only completes when the placement actually honors them.
This commit is contained in:
1 parent
f5e319ae8e
commit
baf0dd680e
3 files changed
+197
-8
No files matched your search
@@ -54,7 +54,8 @@ func (c *commandEcEncode) Help() string {
|
||||
per node (the data-center digit is not used for EC). For example
|
||||
-shardReplicaPlacement=021 requests at most 1 shard per node and 2 per rack.
|
||||
Only when the final placement meets these limits does losing one rack cost
|
||||
at most 2 shards; the command does not guarantee that the limits are met.
|
||||
at most 2 shards, so the encode fails (and keeps the original volumes)
|
||||
when the cluster cannot honor them.
|
||||
|
||||
The -collection parameter is a comma-separated list of collection names, with
|
||||
"*" and "?" wildcards, and regex patterns:
|
||||
|
||||
Reference in new issue
Block a user