aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-21 03:46:33 +0800
committerGravatar Runxi Yu2026-02-21 03:46:33 +0800
commit1b47ebd347533d017235cacd9fe7ae7e215c6ee6 (patch)
tree7a3976b96d0787fa16601a3579dd06595ed5885f
parentobjectstore: Rename ObjectStore to Store (diff)
signatureNo signature
objectstore: ReadReaderContent should have an advisory declared length
-rw-r--r--objectstore/chain/chain.go12
-rw-r--r--objectstore/objectstore.go5
2 files changed, 9 insertions, 8 deletions
diff --git a/objectstore/chain/chain.go b/objectstore/chain/chain.go
index 337e2a2e..2f90d822 100644
--- a/objectstore/chain/chain.go
+++ b/objectstore/chain/chain.go
@@ -77,22 +77,22 @@ func (chain *Chain) ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error)
return nil, objectstore.ErrObjectNotFound
}
-// ReadReaderContent reads an object's type and content stream from the first backend that has it.
-func (chain *Chain) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, io.ReadCloser, error) {
+// ReadReaderContent reads an object's type, declared content length, and content stream from the first backend that has it.
+func (chain *Chain) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error) {
for i, backend := range chain.backends {
if backend == nil {
continue
}
- ty, reader, err := backend.ReadReaderContent(id)
+ ty, size, reader, err := backend.ReadReaderContent(id)
if err == nil {
- return ty, reader, nil
+ return ty, size, reader, nil
}
if errors.Is(err, objectstore.ErrObjectNotFound) {
continue
}
- return objecttype.TypeInvalid, nil, fmt.Errorf("objectstore: backend %d read reader content: %w", i, err)
+ return objecttype.TypeInvalid, 0, nil, fmt.Errorf("objectstore: backend %d read reader content: %w", i, err)
}
- return objecttype.TypeInvalid, nil, objectstore.ErrObjectNotFound
+ return objecttype.TypeInvalid, 0, nil, objectstore.ErrObjectNotFound
}
// ReadHeader reads object header data from the first backend that has it.
diff --git a/objectstore/objectstore.go b/objectstore/objectstore.go
index 3d58adf5..22ddffab 100644
--- a/objectstore/objectstore.go
+++ b/objectstore/objectstore.go
@@ -23,9 +23,10 @@ type Store interface {
// ReadReaderFull reads a full serialized object stream as "type size\\x00content".
// Caller must close the returned reader.
ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error)
- // ReadReaderContent reads an object's type and content stream.
+ // ReadReaderContent reads an object's type, declared content length,
+ // and content stream.
// Caller must close the returned reader.
- ReadReaderContent(id objectid.ObjectID) (objecttype.Type, io.ReadCloser, error)
+ ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error)
// ReadHeader reads an object's type and declared content length.
ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error)
// Close releases resources associated with the backend.