diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c4108975..b42eedc2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Changelog for FrostFS Node - Big object removal with non-local parts (#1978) - Disable pilorama when moving to degraded mode (#2197) - Fetching blobovnicza objects that not found in write-cache (#2206) +- Do not search for the small objects in FSTree (#2206) - Correct status error for expired session token (#2207) ### Removed diff --git a/pkg/local_object_storage/shard/get.go b/pkg/local_object_storage/shard/get.go index a5da288f9..4f00995c3 100644 --- a/pkg/local_object_storage/shard/get.go +++ b/pkg/local_object_storage/shard/get.go @@ -91,6 +91,10 @@ func (s *Shard) Get(prm GetPrm) (GetRes, error) { }, err } +// emptyStorageID is an empty storageID that indicates that +// an object is big (and is stored in an FSTree, not in a blobovnicza). +var emptyStorageID = make([]byte, 0) + // fetchObjectData looks through writeCache and blobStor to find object. func (s *Shard) fetchObjectData(addr oid.Address, skipMeta bool, cb storFetcher, wc func(w writecache.Cache) (*objectSDK.Object, error)) (*objectSDK.Object, bool, error) { var ( @@ -140,7 +144,15 @@ func (s *Shard) fetchObjectData(addr oid.Address, skipMeta bool, cb storFetcher, return nil, true, fmt.Errorf("can't fetch blobovnicza id from metabase: %w", err) } - res, err := cb(s.blobStor, mExRes.StorageID()) + storageID := mExRes.StorageID() + if storageID == nil { + // `nil` storageID returned without any error + // means that object is big, `cb` expects an + // empty (but non-nil) storageID in such cases + storageID = emptyStorageID + } + + res, err := cb(s.blobStor, storageID) return res, true, err }