Skip to content

Commit 7d71ae0

Browse files
committed
meta: index parent object the same way metabase does
It is the only way to get root object's header. Signed-off-by: Pavel Karpy <[email protected]>
1 parent 897c8bf commit 7d71ae0

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

pkg/services/meta/containers.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func (s *containerStorage) putRawIndexes(ctx context.Context, l *zap.Logger, ee
184184

185185
res <- evWithMpt
186186

187-
fillObjectIndex(batch, h)
187+
fillObjectIndex(batch, h, false)
188188
}
189189

190190
return finalErr
@@ -238,7 +238,7 @@ func isOpAllowed(db storage.Store, e objEvent) error {
238238

239239
const binPropertyMarker = "1" // ROOT, PHY, etc.
240240

241-
func fillObjectIndex(batch map[string][]byte, h objectsdk.Object) {
241+
func fillObjectIndex(batch map[string][]byte, h objectsdk.Object, isParent bool) {
242242
id := h.GetID()
243243
typ := h.Type()
244244
owner := h.Owner()
@@ -247,7 +247,7 @@ func fillObjectIndex(batch map[string][]byte, h objectsdk.Object) {
247247
fPart := h.GetFirstID()
248248
parID := h.GetParentID()
249249
hasParent := h.Parent() != nil
250-
phy := hasParent || (fPart.IsZero() && parID.IsZero())
250+
phy := !isParent
251251
pldHash, _ := h.PayloadChecksum()
252252
var ver version.Version
253253
if v := h.Version(); v != nil {
@@ -275,7 +275,7 @@ func fillObjectIndex(batch map[string][]byte, h objectsdk.Object) {
275275
if !parID.IsZero() {
276276
putPlainAttribute(batch, id, objectsdk.FilterParentID, string(parID[:]))
277277
}
278-
if !hasParent && typ == objectsdk.TypeRegular {
278+
if !hasParent && fPart.IsZero() && typ == objectsdk.TypeRegular {
279279
putPlainAttribute(batch, id, objectsdk.FilterRoot, binPropertyMarker)
280280
}
281281
if phy {
@@ -289,6 +289,10 @@ func fillObjectIndex(batch map[string][]byte, h objectsdk.Object) {
289289
putPlainAttribute(batch, id, ak, av)
290290
}
291291
}
292+
293+
if hasParent {
294+
fillObjectIndex(batch, *h.Parent(), true)
295+
}
292296
}
293297

294298
func deleteObjectsOps(dbKV map[string][]byte, s storage.Store, objects []byte, canDeleteLockObjects bool) (map[string][]byte, error) {

pkg/services/meta/notifications_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ func TestObjectPut(t *testing.T) {
415415
size := uint64(testObjectSize)
416416

417417
o := objecttest.Object()
418+
o.ResetRelations()
418419
o.SetContainerID(cID)
419420
o.SetID(objToDeleteOID)
420421
o.SetPayloadSize(size)
@@ -480,7 +481,7 @@ func TestObjectPut(t *testing.T) {
480481
}
481482

482483
tempM := make(map[string][]byte)
483-
fillObjectIndex(tempM, o)
484+
fillObjectIndex(tempM, o, false)
484485
// dbKeys := maps.Keys(tempM) // go 1.23+
485486
dbKeys := make([][]byte, 0, len(tempM))
486487
for k := range tempM {
@@ -619,6 +620,7 @@ func TestValidation(t *testing.T) {
619620
func TestCompatibility(t *testing.T) {
620621
o := objecttest.Object()
621622
o.SetSplitID(nil) // no split info is expected for split V2 era
623+
o.ResetRelations()
622624

623625
// database from engine's metabases
624626

@@ -649,7 +651,7 @@ func TestCompatibility(t *testing.T) {
649651
// batch for meta-data service
650652

651653
serviceMap := make(map[string][]byte)
652-
fillObjectIndex(serviceMap, o)
654+
fillObjectIndex(serviceMap, o, false)
653655

654656
require.Equal(t, len(metabaseMap), len(serviceMap))
655657
for k := range metabaseMap {

0 commit comments

Comments
 (0)