diff options
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 { |
