2024-03-19 08:49:19 +00:00
|
|
|
package meta
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"go.etcd.io/bbolt"
|
|
|
|
)
|
|
|
|
|
|
|
|
type epochState struct{ e uint64 }
|
|
|
|
|
|
|
|
func (s epochState) CurrentEpoch() uint64 {
|
|
|
|
return s.e
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestResetDropsContainerBuckets(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
db := New(
|
|
|
|
[]Option{
|
|
|
|
WithPath(filepath.Join(t.TempDir(), "metabase")),
|
|
|
|
WithPermissions(0o600),
|
|
|
|
WithEpochState(epochState{}),
|
|
|
|
}...,
|
|
|
|
)
|
|
|
|
|
|
|
|
require.NoError(t, db.Open(context.Background(), mode.ReadWrite))
|
|
|
|
require.NoError(t, db.Init())
|
|
|
|
|
|
|
|
defer func() { require.NoError(t, db.Close()) }()
|
|
|
|
|
2024-08-30 16:20:55 +00:00
|
|
|
for idx := range 100 {
|
2024-03-19 08:49:19 +00:00
|
|
|
var putPrm PutPrm
|
|
|
|
putPrm.SetObject(testutil.GenerateObject())
|
|
|
|
putPrm.SetStorageID([]byte(fmt.Sprintf("0/%d", idx)))
|
|
|
|
_, err := db.Put(context.Background(), putPrm)
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
require.NoError(t, db.Reset())
|
|
|
|
|
|
|
|
var bucketCount int
|
|
|
|
require.NoError(t, db.boltDB.Update(func(tx *bbolt.Tx) error {
|
|
|
|
return tx.ForEach(func(name []byte, b *bbolt.Bucket) error {
|
|
|
|
_, exists := mStaticBuckets[string(name)]
|
|
|
|
require.True(t, exists, "unexpected bucket:"+string(name))
|
|
|
|
bucketCount++
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
}))
|
|
|
|
require.Equal(t, len(mStaticBuckets), bucketCount)
|
|
|
|
}
|