forked from TrueCloudLab/frostfs-node
[#2200] shard: Do not fetch big objects from blobovniczas
Signed-off-by: Pavel Karpy <p.karpy@yadro.com> Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
91757329ae
commit
64a5294b27
2 changed files with 14 additions and 1 deletions
|
@ -11,6 +11,7 @@ Changelog for FrostFS Node
|
||||||
- Big object removal with non-local parts (#1978)
|
- Big object removal with non-local parts (#1978)
|
||||||
- Disable pilorama when moving to degraded mode (#2197)
|
- Disable pilorama when moving to degraded mode (#2197)
|
||||||
- Fetching blobovnicza objects that not found in write-cache (#2206)
|
- 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)
|
- Correct status error for expired session token (#2207)
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
|
@ -91,6 +91,10 @@ func (s *Shard) Get(prm GetPrm) (GetRes, error) {
|
||||||
}, err
|
}, 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.
|
// 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) {
|
func (s *Shard) fetchObjectData(addr oid.Address, skipMeta bool, cb storFetcher, wc func(w writecache.Cache) (*objectSDK.Object, error)) (*objectSDK.Object, bool, error) {
|
||||||
var (
|
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)
|
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
|
return res, true, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue