Details
Description
Currently, lfs getstripe presents parity mirrors as data mirrors, showing lmm_objects (stripe + stripe index) and l_ost_idx + l_fid for each stripe. The field lcme_mirror_link_id shows which data mirror is protected by which parity mirror and vice versa. However, it is unclear which parity stripes cover which data stripes (and vice versa).
The exact presentation can be discussed in this ticket.
For instance, this could be shown by adding additional fields to the YAML dict of each stripe, covering the stripe indices bidirectionally. (raidset info is optional here):
// data mirror
lmm_objects:
- 0: { l_ost_idx: 5, l_fid: [...], l_raidset: 0, l_parity_stripes: "0-1" }
- 1: { l_ost_idx: 6, l_fid: [...], l_raidset: 0, l_parity_stripes: "0-1" }
- 2: { l_ost_idx: 7, l_fid: [...], l_raidset: 0, l_parity_stripes: "0-1" }
- 3: { l_ost_idx: 8, l_fid: [...], l_raidset: 0, l_parity_stripes: "0-1" }
// parity mirror
lmm_objects:
- 0: { l_ost_idx: 12, l_fid: [...], l_raidset: 0, l_parity: 0, l_data_stripes: "0-3" }
- 1: { l_ost_idx: 13, l_fid: [...], l_raidset: 0, l_parity: 1, l_data_stripes: "0-3" }
Another approach could be to add a new argument --ec-map or similar to lfs getstripe to provide separation, e.g., :
lcme_dstripe_count: 4
lcme_cstripe_count: 2
lcme_raidset_count: 3
lcme_raidsets:
- 0: { data_stripes: "0-3", parity_stripes: "0-1" }
- 1: { data_stripes: "4-7", parity_stripes: "2-3" }
- 2: { data_stripes: "8-11", parity_stripes: "4-5" }