diff options
| author | 2026-02-21 03:46:33 +0800 | |
|---|---|---|
| committer | 2026-02-21 03:46:33 +0800 | |
| commit | 1b47ebd347533d017235cacd9fe7ae7e215c6ee6 (patch) | |
| tree | 7a3976b96d0787fa16601a3579dd06595ed5885f | |
| parent | objectstore: Rename ObjectStore to Store (diff) | |
| signature | No signature | |
objectstore: ReadReaderContent should have an advisory declared length
| -rw-r--r-- | objectstore/chain/chain.go | 12 | ||||
| -rw-r--r-- | objectstore/objectstore.go | 5 |
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. |
