diff options
| author | 2026-02-21 22:55:15 +0800 | |
|---|---|---|
| committer | 2026-02-21 22:55:15 +0800 | |
| commit | 777db8470909b16411cb54a6c0bbf927be778952 (patch) | |
| tree | 8b8fa0d845d8bc5f1966ce736923ad181a45f642 /objectstore/chain | |
| parent | repository: traverseTreeIter should use ReadHeader for blob size (diff) | |
| signature | No signature | |
objectstore/*, repository: Add ReadSize v0.1.28
For cases where knowing the type is unnecessary and incurs extra
overhead.
Diffstat (limited to 'objectstore/chain')
| -rw-r--r-- | objectstore/chain/chain.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/objectstore/chain/chain.go b/objectstore/chain/chain.go index 3d683c0d..53b9ac89 100644 --- a/objectstore/chain/chain.go +++ b/objectstore/chain/chain.go @@ -96,6 +96,24 @@ func (chain *Chain) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, in return objecttype.TypeInvalid, 0, nil, objectstore.ErrObjectNotFound } +// ReadSize reads object content length from the first backend that has it. +func (chain *Chain) ReadSize(id objectid.ObjectID) (int64, error) { + for i, backend := range chain.backends { + if backend == nil { + continue + } + size, err := backend.ReadSize(id) + if err == nil { + return size, nil + } + if errors.Is(err, objectstore.ErrObjectNotFound) { + continue + } + return 0, fmt.Errorf("objectstore: backend %d read size: %w", i, err) + } + return 0, objectstore.ErrObjectNotFound +} + // ReadHeader reads object header data from the first backend that has it. func (chain *Chain) ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error) { for i, backend := range chain.backends { |
