diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ea4e78114..57bc06aa6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Changelog for NeoFS Node ### Fixed - Zero range denial by `neofs-cli object range|hash` commands (#3182) - Not all the components needed for write-cache migration were initialized (#3186) +- Homomorphic hash indexes with empty values in meta bucket (#3187) ### Changed diff --git a/pkg/local_object_storage/metabase/metadata.go b/pkg/local_object_storage/metabase/metadata.go index 857248302e..9309eb0d4c 100644 --- a/pkg/local_object_storage/metabase/metadata.go +++ b/pkg/local_object_storage/metabase/metadata.go @@ -111,8 +111,10 @@ func putMetadata(tx *bbolt.Tx, cnr cid.ID, id oid.ID, ver version.Version, owner if err = putPlainAttribute(metaBkt, &keyBuf, id, object.FilterPayloadChecksum, string(pldHash)); err != nil { return err } - if err = putPlainAttribute(metaBkt, &keyBuf, id, object.FilterPayloadHomomorphicHash, string(pldHmmHash)); err != nil { - return err + if len(pldHmmHash) > 0 { + if err = putPlainAttribute(metaBkt, &keyBuf, id, object.FilterPayloadHomomorphicHash, string(pldHmmHash)); err != nil { + return err + } } if len(splitID) > 0 { if err = putPlainAttribute(metaBkt, &keyBuf, id, object.FilterSplitID, string(splitID)); err != nil { diff --git a/pkg/local_object_storage/metabase/metadata_test.go b/pkg/local_object_storage/metabase/metadata_test.go index 73058dde44..44679265fd 100644 --- a/pkg/local_object_storage/metabase/metadata_test.go +++ b/pkg/local_object_storage/metabase/metadata_test.go @@ -193,6 +193,23 @@ func TestPutMetadata(t *testing.T) { return nil }) require.NoError(t, err) + + t.Run("no homomorphic checksum", func(t *testing.T) { + cnr := cidtest.OtherID(cnr) + var obj object.Object + obj.SetContainerID(cnr) + obj.SetID(id) + obj.SetPayloadChecksum(pldHash) // Put requires + + require.NoError(t, db.Put(&obj, nil, nil)) + + require.NoError(t, db.boltDB.View(func(tx *bbolt.Tx) error { + mb := tx.Bucket(append([]byte{0xFF}, cnr[:]...)) + require.NotNil(t, mb, "missing container's meta bucket") + assertAttrPresence(t, mb, id, "$Object:homomorphicHash", "", false) + return nil + })) + }) } func TestApplyFilter(t *testing.T) {