ChunkedReader provides a chunk-aware BlobReader, so allows reading and
seeking into a blob.
It internally holds a ChunkedBlob, which is storing chunk information
able to emit a reader seeked to a specific position whenever we need to seek.
Combinator for a BlobService, using a βnearβ and βfarβ blobservice.
Requests are tried in (and returned from) the near store first, only if
things are not present there, the far BlobService is queried.
In case the near blobservice doesnβt have the blob, we ask the remote
blobservice for chunks, and try to read each of these chunks from the near
blobservice again, before falling back to the far one.
The far BlobService is never written to.
The base trait all BlobService services need to implement.
It provides functions to check whether a given blob exists,
a way to read (and seek) a blob, and a method to create a blobwriter handle,
which will implement a writer interface, and also provides a close funtion,
to finalize a blob and get its digest.