feat(tvix/store/blobservice): implement seek
For memory and sled, it's trivial, as we already have a Cursor<Vec<u8>>. For gRPC, we simply reject going backwards, and skip n bytes for now. Once the gRPC protocol gets support for offsets and verified streaming, this can be improved. Change-Id: I734066a514aed287ea3db64bfb1680911ac1eeb0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8885 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
42dc18353d
commit
7613e2e769
6 changed files with 240 additions and 11 deletions
|
|
@ -5,7 +5,7 @@ use std::{
|
|||
};
|
||||
use tracing::{instrument, warn};
|
||||
|
||||
use super::{BlobService, BlobWriter};
|
||||
use super::{BlobReader, BlobService, BlobWriter};
|
||||
use crate::{B3Digest, Error};
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
|
|
@ -36,7 +36,7 @@ impl BlobService for MemoryBlobService {
|
|||
Ok(db.contains_key(digest))
|
||||
}
|
||||
|
||||
fn open_read(&self, digest: &B3Digest) -> Result<Option<Box<dyn io::Read + Send>>, Error> {
|
||||
fn open_read(&self, digest: &B3Digest) -> Result<Option<Box<dyn BlobReader>>, Error> {
|
||||
let db = self.db.read().unwrap();
|
||||
|
||||
match db.get(digest).map(|x| Cursor::new(x.clone())) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue