Details
-
Improvement
-
Resolution: Fixed
-
Medium
-
None
-
3
-
9223372036854775807
Description
The current LUSTRE_MIRROR_COUNT_MAX is an arbitrary limit imposed to avoid users specifying huge numbers of mirrors and potentially causing problems in the code. With EC using mirrors for EC parity components, it makes sense to expand this limit as part of feature development.
There should be a new LUSTRE_MIRROR_COUNT_DEF=16 added, and used in places where the layouts are being created.. The LUSTRE_MIRROR_COUNT_MAX should be increased to something like 128 or 256 and kept in places that are accessing existing layouts (which might be larger in the future, so should code should be flexible in what it accepts). 128 or 256 mirrors should be enough for now, since this would allow 16+2 RAID Set for a full 2000-stripe file.
It probably makes sense to add a server-side tunable parameter like lod.*.mirror_count_max that is LUSTRE_MIRROR_COUNT_DEF by default (to avoid issues with current clients seeing too-many-mirrors files), that can be used in lod_declare_layout_merge() instead of a hard-coded constant. That would maintain compatibility for existing clients that may have some grief processing a layout with more mirrors, while allowing the number of mirrors to be increased dynamically in the future when all clients can handle this. This is the only code on the server that checks the mirror count. The remaining checks are in lfs.c, so they can be updated more easily.