Lines Matching refs:blob

1 # Blobstore Programmer's Guide {#blob}
28 using the term 'blob'. The Blobstore is designed to allow asynchronous, uncached, parallel reads an…
52 * **Blob**: A blob is an ordered list of clusters. Blobs are manipulated (created, sized, deleted, …
53 …failures and reboots. Applications use a Blobstore provided identifier to access a particular blob.
54 …Blobs are read and written in units of pages by specifying an offset from the start of the blob. A…
55 …store metadata in the form of key/value pairs with each blob which we'll refer to as xattrs (exten…
81 * **Blob Metadata Updates**: Each blob has its own set of metadata (xattrs, size, etc). For perform…
85 * **Blobstore Metadata Updates**: Blobstore itself has its own metadata which, like per blob metada…
86 …RAM and on-disk. Unlike the per blob metadata, however, the Blobstore metadata region is not made …
88 …metadata is updated (blob creation, deletion, resize, etc.) and not unloaded properly, it will nee…
132 With external snapshots (see @ref blob_pg_esnap_and_esnap_clone), a read from a blob may lead to
139 When an application creates a blob, it does not provide a name as is the case with many other simil…
152 …a blob is allocated/deallocated or changes in size, disk LBAs will be manipulated in groups of clu…
168 …as a blob that clones an external snapshot (an "esnap clone") is opened so that the blobstore cons…
185 reading/writing to an area of a blob that a metadata operation is deallocating).
207 Setting and removing of xattrs in Blobstore is a metadata operation, xattrs are stored in per blob
208 Therefore, xattrs are not persisted until a blob synchronization call is made and completed. Having…
209 persisting per blob metadata allows for applications to perform batches of xattr updates, for examp…
214 As described earlier, there are two types of metadata in Blobstore, per blob and one global
215 metadata for the Blobstore itself. Only the per blob metadata can be explicitly synchronized via A…
218 based on a parsing of the per blob metadata. For consistent start times, it is important to always …
224 …ver, if walking through the existing blobs via the iter API, if your application finds the blob its
230 The super blob is simply a single blob ID that can be stored as part of the global metadata to act
231 as sort of a "root" blob. The application may choose to use this blob to store any information that…
248 …allows the developer to get to a `blob>` prompt and then very quickly interact with Blobstore with…
289 Each blob is allocated a non-contiguous set of pages inside the metadata region for its metadata. T…
296 Each blob is an ordered list of clusters, where starting LBA of a cluster is called extent. A blob
301 when creating a blob.
307 Otherwise additionally incurs serializing whole linked list of pages for the blob.
311 Every new cluster allocation incurs serializing whole linked list of pages for the blob.
315 Each in-use cluster is allocated to blobstore metadata or to a particular blob. Once a cluster is
316 allocated to a blob it is considered owned by that blob and that particular blob's metadata
320 Through the use of thin provisioning, snapshots, and/or clones, a blob may be backed by clusters it
321 owns, clusters owned by another blob, or by a zeroes device. The behavior of reads and writes depend
322 on whether the operation targets blocks that are backed by a cluster owned by the blob or not.
326 * **read from other blocks**: The read is passed on to the blob's *back device* and the back
327 device services the read. The back device may be another blob or it may be a zeroes device.
331 is allocated to the blob the process described in @ref blob_pg_thin_provisioning is followed.
340 As mentioned in @ref blob_pg_cluster_layout, a blob may be thin provisioned. A thin provisioned blob
342 blob's back device is a *zeroes device*. A read from a zeroes device fills the read buffer with
349 2. Update blob metadata.
354 A snapshot is a read-only blob that may have clones. A snapshot may itself be a clone of one other
355 blob. While the interface gives the illusion of being able to create many snapshots of a blob, under
358 When blob1 is snapshotted, a new read-only blob is created and blob1 becomes a clone of this new
359 blob. That is:
406 the clone becomes a regular blob. The clusters owned by the snapshot are transferred to the clone or
417 allocated clusters. The blob becomes a thick provisioned blob.
429 snapshots (esnaps). An external snapshot is not useful on its own: it needs to be cloned by a blob.
435 * **On disk**: the blob metadata has the `SPDK_BLOB_EXTERNAL_SNAPSHOT` (0x8) bit is set in
437 * **In memory**: The `spdk_blob` structure contains the metadata read from disk, `blob->parent_id`
438 is set to `SPDK_BLOBID_EXTERNAL_SNAPSHOT`, and `blob->back_bs_dev` references a blobstore device
439 which is not a blob in the same blobstore nor a zeroes device.
443 A read only blob can be copied over a blob store device in a way that only clusters
444 allocated to the blob will be written on the device. This device must have a size equal or greater
445 than blob's size and blob store's block size must be an integer multiple of device's block size.
446 This functionality can be used to recreate the entire snapshot stack of a blob into a different blob
449 #### Change the parent of a blob {#blob_reparent}
451 We can change the parent of a thin provisioned blob, making the blob a clone of a snapshot of the
452 same blobstore or a clone of an external snapshot. The previous parent of the blob can be a snapsho…
455 If the new parent of the blob is a snapshot of the same blobstore, blob and snapshot must have the …
457 If the new parent of the blob is an external snapshot, the size of the esnap must be an integer mul…
458 blob's cluster size.
469 5. Update the blob's on-disk metadata to record ownership of the newly allocated cluster. This
494 blob's back device, `blob->back_bs_dev`. For blobs that are not esnap clones, `channel` and
496 that are esnap clones, `channel` is the same as with any other blob and `back_channel` is an IO
503 the public API is `blob.h`.
508 This is an in-memory data structure that contains key elements like the blob identifier, its curren…
509 copies of the mutable metadata for the blob; one copy is the current metadata and the other is the …
515 This is a per blob structure, included the `struct spdk_blob` struct that actually defines the blob
516 specific information on size and makeup of the blob (ie how many clusters are allocated for this bl…
537 < relevant functions to accomplish the deletion of a blob >