mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-10 00:07:44 +02:00
ec: strict_placement option so encode only runs while guarantees hold (#11656)
* ec: strict_placement option so encode only runs while guarantees hold Shard placement during encode was best-effort (PlaceDurabilityFirst): when the cluster could not satisfy the per-disk caps, anti-affinity, replica-placement or per-rack caps, the constraints were relaxed and the volume was encoded anyway, weaker than configured. A strict_placement option on the erasure coding task switches planning to PlaceStrict so the volume's planning fails instead, and the encode is retried when capacity allows the guarantee. Also documents the resilience rule in ec.encode help: a volume survives losing any nodes or racks holding at most parity-shards shards between them, and how -shardReplicaPlacement's rack and node digits bound that loss. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * ec: expose strict_placement through the plugin form and persisted task policy The admin UI, the admin.toml maintenance mapping, and the TaskPolicy serialization all dropped the new flag; add the bool field to ErasureCodingTaskConfig, the worker config form, and both conversion directions. * shell: describe shardReplicaPlacement as requested limits, not guarantees ec.encode places shards best-effort, so the configured rack/node caps only bound shard loss when the final placement actually satisfies them. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
30cf53265b
commit
8f80dac30f
10 files changed
+134
-5
No files matched your search
@@ -47,6 +47,15 @@ func (c *commandEcEncode) Help() string {
|
||||
If you only have less than 4 volume servers, with erasure coding, at least you can afford to
|
||||
have 4 corrupted shard files.
|
||||
|
||||
The guarantee follows from where shards land: a volume survives the loss of any
|
||||
nodes (or racks) that hold at most parityShards (4) shards between them. Spread
|
||||
is best-effort; -shardReplicaPlacement requests limits: its rack digit
|
||||
sets the requested shards per rack, and its node digit the requested shards
|
||||
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.
|
||||
|
||||
The -collection parameter is a comma-separated list of collection names, with
|
||||
"*" and "?" wildcards, and regex patterns:
|
||||
- One collection: ec.encode -collection="mybucket"
|
||||
|
||||
Reference in new issue
Block a user