aboutsummaryrefslogtreecommitdiff
path: root/objectstore/chain
diff options
context:
space:
mode:
Diffstat (limited to 'objectstore/chain')
-rw-r--r--objectstore/chain/chain.go18
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 {