Details
-
Improvement
-
Resolution: Fixed
-
Major
-
Lustre 2.4.0
-
None
-
3
-
2410
Description
OSP tries to address one issue found in LOV/OSC: objid is assigned outside of transaction and this can lead to gaps in objid sequence and leaked OST objects.
OSP does this assignment with transaction open. but there is one exception: truncate on a file with no objects created. if later we create OST objects (upon open for write), then MDS sends OST_PUNCH to propagate non-zero size to OST. but we can't do this holding open transaction. so we again have to assign
objid and send OST_PUNCH outside of transaction. this lead to leaked objects
(in case of server failure) and complications in the code.
so we have decided to avoid this situation: truncate will be creating OST objects, return newly created LOVEA back to the client and the client will
be doing regular truncate to OSTs propagating requested size.
essentially truncate becomes a form of open. this is especially true with
SOM, because truncate has to open an epoch. we may use this fact to re-use
some code on MDS to implement OST object creation on truncate.
Attachments
Issue Links
- duplicates
-
LU-2808 osp_object_assign_fid()) ASSERTION( fid_is_zero(lu_object_fid(&o->opo_obj.do_lu)) ) failed:
- Closed