about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tvix/store/protos/rpc_blobstore.pb.go2
-rw-r--r--tvix/store/protos/rpc_blobstore.proto22
-rw-r--r--tvix/store/protos/rpc_blobstore_grpc.pb.go40
3 files changed, 56 insertions, 8 deletions
diff --git a/tvix/store/protos/rpc_blobstore.pb.go b/tvix/store/protos/rpc_blobstore.pb.go
index 426a2836dfae..853a040130a4 100644
--- a/tvix/store/protos/rpc_blobstore.pb.go
+++ b/tvix/store/protos/rpc_blobstore.pb.go
@@ -161,7 +161,7 @@ type ReadBlobRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	// The blake3 digest of the blob requested
+	// The blake3 digest of the blob or chunk requested
 	Digest []byte `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"`
 }
 
diff --git a/tvix/store/protos/rpc_blobstore.proto b/tvix/store/protos/rpc_blobstore.proto
index e0b700f2d0da..c0665e821ae5 100644
--- a/tvix/store/protos/rpc_blobstore.proto
+++ b/tvix/store/protos/rpc_blobstore.proto
@@ -15,11 +15,27 @@ service BlobService {
     // contain a single chunk.
     rpc Stat(StatBlobRequest) returns (BlobMeta);
 
-    // Read returns a stream of BlobChunk, which is just a stream of bytes - not necessarily
-    // using the chunking that's returned in the reply of a Stat() call.
+    // Read returns a stream of BlobChunk, which is just a stream of bytes with
+    // the digest specified in ReadBlobRequest.
+    //
+    // The server may decide on whatever chunking it may seem fit as a size for
+    // the individual BlobChunk sent in the response stream.
+    //
+    // It specifically is NOT necessarily using chunk sizes communicated in a
+    // previous Stat request.
+    //
+    // It's up to the specific store to decide on whether it allows Read on a
+    // Blob at all, or only on smaller chunks communicated in a Stat() call
+    // first.
+    //
+    // Clients are enouraged to Stat() first, and then only read the individual
+    // chunks they don't have yet.
     rpc Read(ReadBlobRequest) returns (stream BlobChunk);
 
     // Put uploads a Blob, by reading a stream of bytes.
+    //
+    // The way the data is chunked up in individual BlobChunk messages sent in
+    // the stream has no effect on how the server ends up chunking blobs up.
     rpc Put(stream BlobChunk) returns (PutBlobResponse);
 }
 
@@ -57,7 +73,7 @@ message BlobMeta {
 }
 
 message ReadBlobRequest {
-    // The blake3 digest of the blob requested
+    // The blake3 digest of the blob or chunk requested
     bytes digest = 1;
 }
 
diff --git a/tvix/store/protos/rpc_blobstore_grpc.pb.go b/tvix/store/protos/rpc_blobstore_grpc.pb.go
index f952e78d5a6e..25b3c0006a51 100644
--- a/tvix/store/protos/rpc_blobstore_grpc.pb.go
+++ b/tvix/store/protos/rpc_blobstore_grpc.pb.go
@@ -29,10 +29,26 @@ type BlobServiceClient interface {
 	// If there's no more granular chunking available, the response will simply
 	// contain a single chunk.
 	Stat(ctx context.Context, in *StatBlobRequest, opts ...grpc.CallOption) (*BlobMeta, error)
-	// Read returns a stream of BlobChunk, which is just a stream of bytes - not necessarily
-	// using the chunking that's returned in the reply of a Stat() call.
+	// Read returns a stream of BlobChunk, which is just a stream of bytes with
+	// the digest specified in ReadBlobRequest.
+	//
+	// The server may decide on whatever chunking it may seem fit as a size for
+	// the individual BlobChunk sent in the response stream.
+	//
+	// It specifically is NOT necessarily using chunk sizes communicated in a
+	// previous Stat request.
+	//
+	// It's up to the specific store to decide on whether it allows Read on a
+	// Blob at all, or only on smaller chunks communicated in a Stat() call
+	// first.
+	//
+	// Clients are enouraged to Stat() first, and then only read the individual
+	// chunks they don't have yet.
 	Read(ctx context.Context, in *ReadBlobRequest, opts ...grpc.CallOption) (BlobService_ReadClient, error)
 	// Put uploads a Blob, by reading a stream of bytes.
+	//
+	// The way the data is chunked up in individual BlobChunk messages sent in
+	// the stream has no effect on how the server ends up chunking blobs up.
 	Put(ctx context.Context, opts ...grpc.CallOption) (BlobService_PutClient, error)
 }
 
@@ -130,10 +146,26 @@ type BlobServiceServer interface {
 	// If there's no more granular chunking available, the response will simply
 	// contain a single chunk.
 	Stat(context.Context, *StatBlobRequest) (*BlobMeta, error)
-	// Read returns a stream of BlobChunk, which is just a stream of bytes - not necessarily
-	// using the chunking that's returned in the reply of a Stat() call.
+	// Read returns a stream of BlobChunk, which is just a stream of bytes with
+	// the digest specified in ReadBlobRequest.
+	//
+	// The server may decide on whatever chunking it may seem fit as a size for
+	// the individual BlobChunk sent in the response stream.
+	//
+	// It specifically is NOT necessarily using chunk sizes communicated in a
+	// previous Stat request.
+	//
+	// It's up to the specific store to decide on whether it allows Read on a
+	// Blob at all, or only on smaller chunks communicated in a Stat() call
+	// first.
+	//
+	// Clients are enouraged to Stat() first, and then only read the individual
+	// chunks they don't have yet.
 	Read(*ReadBlobRequest, BlobService_ReadServer) error
 	// Put uploads a Blob, by reading a stream of bytes.
+	//
+	// The way the data is chunked up in individual BlobChunk messages sent in
+	// the stream has no effect on how the server ends up chunking blobs up.
 	Put(BlobService_PutServer) error
 	mustEmbedUnimplementedBlobServiceServer()
 }