Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #3549 +/- ##
==========================================
+ Coverage 26.51% 26.67% +0.15%
==========================================
Files 653 654 +1
Lines 49290 49373 +83
==========================================
+ Hits 13071 13169 +98
+ Misses 35181 35158 -23
- Partials 1038 1046 +8 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
21d46d9 to
c82ecb9
Compare
| childAddr := objAddr | ||
| childAddr.SetObject(child.GetID()) | ||
|
|
||
| // TODO: check why Get returns different header |
There was a problem hiding this comment.
i'll leave an issue for this
There was a problem hiding this comment.
Because there are limits to what Get can restore from the metabase, it's OK.
870dd1b to
89b58f0
Compare
There was a problem hiding this comment.
This makes a different choice compared to regular big objects, we don't mark children as deleted immediately there, but we handle relations during GC cycle (related to #3551). We need some unified approach.
| childAddr := objAddr | ||
| childAddr.SetObject(child.GetID()) | ||
|
|
||
| // TODO: check why Get returns different header |
There was a problem hiding this comment.
Because there are limits to what Get can restore from the metabase, it's OK.
generally speaking, i expected that i wouldnt need any additional actions and DELETE would work out of the box. All EC parts refer to the parent. And split DELETE works as expected, also building logic around the parent ref. Surprise to me. I'll review again what's missing in the general approach |
|
ok, all parent-child magic when happens in and collecting of child objects is hardly tied to the split scheme. I see two ways:
finally, i'd like to have 1. Maybe @roman-khimov meant this by
but it'd be a quite shaking change, risky. I suggest to start from 2, and generalize to 1 separately. For example, postpone to #3500 where it almost definitely will be needed |
|
Think of expired objects, neofs-node/pkg/local_object_storage/engine/inhume.go Lines 266 to 271 in 64c8ca9 Maybe if we're to fix |
b6fcd84 to
9a513cf
Compare
|
reworked closer to split case |
9b6b39b to
687f621
Compare
Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
One less function. One less usage of `getSplitInfo()`. Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
One less error to worry about. Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
Previous text was outdated. Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
428e719 to
9135b7f
Compare
|
|
||
| var tombPartAddrs []oid.Address | ||
| for i := range partNum { | ||
| tombPart, err := iec.FormObjectForECPart(signer, tomb, testutil.RandByteSlice(32), iec.PartInfo{ |
There was a problem hiding this comment.
Why are we splitting tombstones?
There was a problem hiding this comment.
i havent made any exceptions yet. But given the lack of benefit in ECing them, better to exclude. Their payload is empty anyway
There was a problem hiding this comment.
Exactly. It's header only and splitting it doesn't make much sense to me. Same goes for locks.
There was a problem hiding this comment.
fixed this in test. How about excluding tombstones in a separate PR?
| oid.NewAddress(addr.Container(), si.GetLink())} | ||
| case errors.As(err, &errECParts): | ||
| if len(errECParts) == 0 { | ||
| panic(errors.New("empty EC part set")) |
There was a problem hiding this comment.
yeah, to prevent code mistakes. Subsequent logic assumes that it is non-empty
In general, the mechanism is inherited from split scheme. Key changes: - all GET methods return newly added error if EC parent is requested. At the moment, only physically stored EC parts are requested. This will protect against collision with split case and will reveal unadapted places if any. - If some EC parts are stored in the metabase along with the object being removed, they are also marked. This automates their closure and subsequent GC. Closes #3502. Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
It is the parent objects that are expiring and deleting in practice. Reading is also performed at their address. Previously, the method checked child status instead. In particular, this led to 404 child status return when parent object was removed. This collided with the part absence on SN: triggered requests from backup SN and resulted in 404 final status. Refs #3502. Signed-off-by: Leonard Lyubich <leonard@morphbits.io>
9135b7f to
a7c2a54
Compare
No description provided.