Skip to content

BlobService

BlobStore service: content-addressed chunk storage for large values. Values >= 4KB are split into 256KB chunks identified by SHA-256 hash. Content-addressing provides automatic deduplication.

Proto source

graph/blob.proto

Transport

All methods are available via:

  • gRPC on port 7080 — native high-performance API
  • REST/JSON on port 7081 — HTTP/JSON transcoding via embedded structured-proxy

Methods

UploadBlob

Upload a blob as a stream of chunks. Returns the BlobRef (ordered chunk IDs + total size) for later retrieval.

HTTP: POST /v1/blobs

Request: stream BlobChunk

FieldTypeDescription
databytesChunk data (up to 256KB per message).
sequenceuint32Chunk sequence number (0-based, for ordering verification).

Response: UploadBlobResponse

FieldTypeDescription
blob_idstringUnique blob identifier (hex-encoded composite of chunk hashes).
chunk_idsstring[]Ordered list of SHA-256 chunk hashes (hex, 64 chars each).
total_sizeuint64Total size of the uploaded blob in bytes.
dedup_chunksuint32Number of chunks that were deduplicated (already existed).

DownloadBlob

Download a blob by its chunk IDs, returned as a stream of chunks.

HTTP: GET /v1/blobs/{blob_id}

Request: DownloadBlobRequest

FieldTypeDescription
blob_idstringBlob identifier returned from UploadBlob.

Response: stream BlobChunk

FieldTypeDescription
databytesChunk data (up to 256KB per message).
sequenceuint32Chunk sequence number (0-based, for ordering verification).

DeleteBlob

Delete a blob and its unreferenced chunks.

HTTP: DELETE /v1/blobs/{blob_id}

Request: DeleteBlobRequest

FieldTypeDescription
blob_idstringBlob identifier.

Response: DeleteBlobResponse

FieldTypeDescription
chunks_deleteduint32Number of chunks actually deleted (excludes shared chunks still referenced).

GetBlobMeta

Get blob metadata (chunk count, total size) without downloading.

HTTP: GET /v1/blobs/{blob_id}/meta

Request: GetBlobMetaRequest

FieldTypeDescription
blob_idstringBlob identifier.

Response: BlobMeta

FieldTypeDescription
blob_idstringBlob identifier.
total_sizeuint64Total size in bytes.
chunk_countuint32Number of chunks.
chunk_idsstring[]Ordered list of SHA-256 chunk hashes.

Types

BlobChunk

A single blob chunk in a streaming upload/download.

FieldTypeDescription
databytesChunk data (up to 256KB per message).
sequenceuint32Chunk sequence number (0-based, for ordering verification).

BlobMeta

Blob metadata.

FieldTypeDescription
blob_idstringBlob identifier.
total_sizeuint64Total size in bytes.
chunk_countuint32Number of chunks.
chunk_idsstring[]Ordered list of SHA-256 chunk hashes.

DeleteBlobRequest

Request to delete a blob.

FieldTypeDescription
blob_idstringBlob identifier.

DeleteBlobResponse

Response after blob deletion.

FieldTypeDescription
chunks_deleteduint32Number of chunks actually deleted (excludes shared chunks still referenced).

DownloadBlobRequest

Request to download a blob.

FieldTypeDescription
blob_idstringBlob identifier returned from UploadBlob.

GetBlobMetaRequest

Request for blob metadata.

FieldTypeDescription
blob_idstringBlob identifier.

UploadBlobResponse

Response after a complete blob upload.

FieldTypeDescription
blob_idstringUnique blob identifier (hex-encoded composite of chunk hashes).
chunk_idsstring[]Ordered list of SHA-256 chunk hashes (hex, 64 chars each).
total_sizeuint64Total size of the uploaded blob in bytes.
dedup_chunksuint32Number of chunks that were deduplicated (already existed).