Module fxfs::object_store

source ·




  • Id and descriptor for a child entry.
  • DataObjectHandle is a typed handle for file-like objects that store data in the default data attribute. In addition to traditional files, this means things like the journal, superblocks, and layer files.
  • Like object_handle::Writer, but allows custom transaction options to be set, and makes every write go directly to the handle in a transaction.
  • ExtentKey is a child of ObjectKey for Object attributes that have attached extents (at time of writing this was only the used for file contents).
  • TODO(b/308870667): Potentially revise FsverityMetadata with stricter types and storage optimizations.
  • Object-level attributes. Note that these are not the same as “attributes” in the ObjectValue::Attribute sense, which refers to an arbitrary data payload associated with an object. This naming collision is unfortunate.
  • ObjectKey is a key in the object store.
  • An object store supports a file like interface for objects. Objects are keyed by a 64 bit identifier. And object store has to be backed by a parent object store (which stores metadata for the object store). The top-level object store (a.k.a. the root parent object store) is in-memory only.
  • This consists of POSIX attributes that are not used in Fxfs but it may be meaningful to some clients to have the ability to to set and retrieve these values.
  • StoreObjectHandle is the lowest-level, untyped handle to an object with the id [object_id] in a particular store, [owner]. It provides functionality shared across all objects, such as reading and writing attributes and managing encryption keys.
  • UNIX epoch based timestamp in the UTC timezone.



  • For Blobs in Fxfs, we store the merkle tree at a well-known attribute. TODO( Is this the best place to store the merkle tree? What about inline with data?
  • The common case for extents which cover the data payload of some object.
  • The range of fxfs attribute ids which are reserved for extended attribute values. Whenever a new attribute is needed, the first unused id will be chosen from this range. It’s technically safe to change these values, but it has potential consequences - they are only used during id selection, so any existing extended attributes keep their ids, which means any past or present selected range here could potentially have used attributes unless they are explicitly migrated, which isn’t currently done.
  • For fsverity files in Fxfs, we store the merkle tree of the verified file at a well-known attribute.


  • DataObjectHandle stores an owner that must implement this trait, which allows the handle to get back to an ObjectStore.