Details
-
Technical task
-
Resolution: Unresolved
-
Minor
-
None
-
None
-
9223372036854775807
Description
Occasionally it is possible that the projid of an OST object does not get the projid set from the MDS, even though the projid is set correctly on the MDT inode and appears as correct when accessed by "lfs project <file>" since the projid is only fetched from the MDT inode. This may lead to incorrect project quota space accounting for that file (the inode accounting is correct since this only counts MDT inodes).
It would seem relatively straight forward to have OST object-modifying RPCs with obdo.o_projid != 0 to update OST objects that have projid==0. This would be the same one-shot mechanism to set the projid for OST objects as is done with UID/GID on first write. This depends on the clients consistently setting obdo.o_projid with the bulk write and setattr RPCs, and the OST to check this, but it can be done without interoperability concerns, especially since the o_projid would always relate to the inode and has no relation to the process that is accessing the file.
While I don't think many existing objects are written after they are first created, I believe we already do atime updates for files once a day, so the projid=0 fix could be combined with that check to avoid adding extra overhead on file access.
Attachments
Issue Links
- is related to
-
LU-16988 mirror extend by FID does not set projid
- Resolved