Details
-
Technical task
-
Resolution: Fixed
-
Minor
-
Lustre 2.11.0
-
9223372036854775807
Description
If the DoM component extent_end is set larger than the MDT dom_stripesize (via lfs setstripe -Eextent_end -L mdt ) then this currently generates an error. Since users do not have any easy way to determine the dom_stripesize on the MDT, and it may in fact be different on a per-MDT basis (e.g. if MDT0000 sets dom_stripesize=0 because it was formatted before DoM, or it is adjusted automatically by the MDS when the MDT is nearly full). This complicates DoM usage for users (imagine a striped directory that has different DoM size limits for the MDTs it is striped over).
The MDS should automatically adjust the component extent_end to match the MDT dom_stripesize, and if dom_stripesize=0 then the DoM component should be removed.
Attachments
Issue Links
- is related to
-
LU-10786 sanity-flr test_45: Create /mnt/lustre/d45.sanity-flr/f45.sanity-flr failed
-
- Resolved
-
-
LU-10917 If setstripe for DoM file fails, less/no information is given
-
- Resolved
-
-
LU-11608 DoM2: inherited DoM component size is not limited
-
- Resolved
-
-
LU-10070 PFL self-extending file layout
-
- Resolved
-
- is related to
-
LU-10465 increase default stripe size to 4MB
-
- Resolved
-
- mentioned in
-
Page Loading...
This question has likely been answered elsewhere, but yes, it's possible to know if a layout is a default layout. At file creation time, there's a moment where you inherit from a template. But after that there's no way to know, currently.
It seems like your suggestion is if any MDT in the set is low on space, then remove the DOM component from the layout (presumably at file creation time rather than permanently, since ideally out of space is transient). So we stop doing DOM entirely because we can't skip that one MDT. That will require some interrogation of the MDTs but it should be possible, if a little awkward.
An alternate possibility occurs to me, sort of adjacent to the self-extending PFL work and exploiting similar ideas. DOM is always the first component & so is always instantiated. But we could do the "stripe to target, then check space on target before really making objects" trick I'm using in the SEPFL work (posting soon, sorry).
If there's insufficient space on a particular MDT, we could either try another MDT (...not so sure about this one...) or we could rewrite the layout dynamically to remove the DoM component, assuming it's followed by a regular OST component. (Which it doesn't have to be.)
If we did the "try another MDT" solution, we'd either need to try all MDTs and fail once they were out of space, or we'd still have to do the "rewrite layout to replace DoM with regular OST layout" thing.
Just stop doing DoM once one MDT is full does seem like the easiest (and perhaps most comprehensible) behavior. But there's another route if we wanted to take it.