forked from TrueCloudLab/frostfs-node
[#149] metabase: Do not write virtual objects to the primary index
In the previous implementation of the metabase, it was necessary to write virtual objects to the primary index to be able to select them. In this approach, virtual objects can be obtained directly using Head operation. This has a side effect in handling object operations that do not expect to receive a virtual object header in a single operation. With recent changes, it is no longer necessary to have records of virtual objects in the primary index, so this no longer happens for system integrity. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
5ad013c10b
commit
200fdbd361
3 changed files with 159 additions and 109 deletions
|
@ -13,6 +13,7 @@ import (
|
|||
v2object "github.com/nspcc-dev/neofs-api-go/v2/object"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/util/test"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.etcd.io/bbolt"
|
||||
)
|
||||
|
@ -260,3 +261,45 @@ func TestSelectNonExistentAttributes(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
require.Empty(t, res)
|
||||
}
|
||||
|
||||
func TestVirtualObject(t *testing.T) {
|
||||
db := newDB(t)
|
||||
defer releaseDB(db)
|
||||
|
||||
// create object with parent
|
||||
obj := generateObject(t, testPrm{
|
||||
withParent: true,
|
||||
})
|
||||
|
||||
require.NoError(t, db.Put(obj))
|
||||
|
||||
childAddr := obj.Address()
|
||||
parAddr := obj.GetParent().Address()
|
||||
|
||||
// child object must be readable
|
||||
_, err := db.Get(childAddr)
|
||||
require.NoError(t, err)
|
||||
|
||||
// parent object must not be readable
|
||||
_, err = db.Get(parAddr)
|
||||
require.True(t, errors.Is(err, errNotFound))
|
||||
|
||||
fs := objectSDK.SearchFilters{}
|
||||
|
||||
// both objects should appear in selection
|
||||
testSelect(t, db, fs, childAddr, parAddr)
|
||||
|
||||
// filter leaves
|
||||
fs.AddLeafFilter()
|
||||
|
||||
// only child object should appear
|
||||
testSelect(t, db, fs, childAddr)
|
||||
|
||||
fs = fs[:0]
|
||||
|
||||
// filter non-leaf objects
|
||||
fs.AddNonLeafFilter()
|
||||
|
||||
// only parent object should appear
|
||||
testSelect(t, db, fs, parAddr)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue