forked from TrueCloudLab/frostfs-node
Dmitrii Stepanov
7e0c5a55de
Now UpdateStorageID doesn't return error in case of logical error. If object is in graveyard or GC market, it is still required to update storage ID. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
92 lines
2.7 KiB
Go
92 lines
2.7 KiB
Go
package meta_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
|
meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDB_StorageID(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
db := newDB(t)
|
|
|
|
raw1 := testutil.GenerateObject()
|
|
raw2 := testutil.GenerateObject()
|
|
deleted := testutil.GenerateObject()
|
|
|
|
storageID := []byte{1, 2, 3, 4}
|
|
|
|
// check StorageID from empty database
|
|
fetchedStorageID, err := metaStorageID(db, object.AddressOf(raw1))
|
|
require.NoError(t, err)
|
|
require.Nil(t, fetchedStorageID)
|
|
|
|
// put one object with storageID
|
|
err = metaPut(db, raw1, storageID)
|
|
require.NoError(t, err)
|
|
|
|
// put one object without storageID
|
|
err = putBig(db, raw2)
|
|
require.NoError(t, err)
|
|
|
|
// put object with storageID and delete it
|
|
err = metaPut(db, deleted, storageID)
|
|
require.NoError(t, err)
|
|
|
|
cnrID, ok := deleted.ContainerID()
|
|
require.True(t, ok)
|
|
ts := testutil.GenerateObjectWithCID(cnrID)
|
|
require.NoError(t, metaInhume(db, object.AddressOf(deleted), object.AddressOf(ts)))
|
|
|
|
// check StorageID for object without storageID
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(raw2))
|
|
require.NoError(t, err)
|
|
require.Nil(t, fetchedStorageID)
|
|
|
|
// check StorageID for object with storageID
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(raw1))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
|
|
// check StorageID for deleted object with storageID
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(deleted))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
|
|
t.Run("update", func(t *testing.T) {
|
|
storageID := []byte{1, 2, 3, 4, 5}
|
|
require.NoError(t, metaUpdateStorageID(db, object.AddressOf(raw2), storageID))
|
|
require.NoError(t, metaUpdateStorageID(db, object.AddressOf(deleted), storageID))
|
|
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(raw2))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(deleted))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
})
|
|
}
|
|
|
|
func metaUpdateStorageID(db *meta.DB, addr oid.Address, id []byte) error {
|
|
var sidPrm meta.UpdateStorageIDPrm
|
|
sidPrm.SetAddress(addr)
|
|
sidPrm.SetStorageID(id)
|
|
|
|
_, err := db.UpdateStorageID(sidPrm)
|
|
return err
|
|
}
|
|
|
|
func metaStorageID(db *meta.DB, addr oid.Address) ([]byte, error) {
|
|
var sidPrm meta.StorageIDPrm
|
|
sidPrm.SetAddress(addr)
|
|
|
|
r, err := db.StorageID(context.Background(), sidPrm)
|
|
return r.StorageID(), err
|
|
}
|