forked from TrueCloudLab/frostfs-node
[#959] node: Set mode to shard's components when open it
Avoid opening database for `metabase` and `cache` in `Degraded` mode. Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
parent
60527abb65
commit
d19ade23c8
25 changed files with 219 additions and 74 deletions
|
@ -8,6 +8,7 @@ import (
|
|||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/teststore"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
||||
meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
@ -75,7 +76,7 @@ func benchmarkPutPar(b *testing.B, cache writecache.Cache, size uint64) {
|
|||
}
|
||||
|
||||
func benchmarkPutPrepare(b *testing.B, cache writecache.Cache) {
|
||||
require.NoError(b, cache.Open(context.Background(), false), "opening")
|
||||
require.NoError(b, cache.Open(context.Background(), mode.ReadWrite), "opening")
|
||||
require.NoError(b, cache.Init(), "initializing")
|
||||
}
|
||||
|
||||
|
|
|
@ -95,8 +95,14 @@ func (c *cache) DumpInfo() Info {
|
|||
}
|
||||
|
||||
// Open opens and initializes database. Reads object counters from the ObjectCounters instance.
|
||||
func (c *cache) Open(_ context.Context, readOnly bool) error {
|
||||
err := c.openStore(readOnly)
|
||||
func (c *cache) Open(_ context.Context, mode mode.Mode) error {
|
||||
c.modeMtx.Lock()
|
||||
defer c.modeMtx.Unlock()
|
||||
c.mode = mode
|
||||
if mode.NoMetabase() {
|
||||
return nil
|
||||
}
|
||||
err := c.openStore(mode.ReadOnly())
|
||||
if err != nil {
|
||||
return metaerr.Wrap(err)
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ func newCache[Option any](
|
|||
mb := meta.New(
|
||||
meta.WithPath(filepath.Join(dir, "meta")),
|
||||
meta.WithEpochState(dummyEpoch{}))
|
||||
require.NoError(t, mb.Open(context.Background(), false))
|
||||
require.NoError(t, mb.Open(context.Background(), mode.ReadWrite))
|
||||
require.NoError(t, mb.Init())
|
||||
|
||||
bs := blobstor.New(blobstor.WithStorages([]blobstor.SubStorage{
|
||||
|
@ -213,11 +213,11 @@ func newCache[Option any](
|
|||
fstree.WithDirNameLen(1)),
|
||||
},
|
||||
}))
|
||||
require.NoError(t, bs.Open(context.Background(), false))
|
||||
require.NoError(t, bs.Open(context.Background(), mode.ReadWrite))
|
||||
require.NoError(t, bs.Init())
|
||||
|
||||
wc := createCacheFn(t, smallSize, mb, bs, opts...)
|
||||
require.NoError(t, wc.Open(context.Background(), false))
|
||||
require.NoError(t, wc.Open(context.Background(), mode.ReadWrite))
|
||||
require.NoError(t, wc.Init())
|
||||
|
||||
// First set mode for metabase and blobstor to prevent background flushes.
|
||||
|
|
30
pkg/local_object_storage/writecache/mode_test.go
Normal file
30
pkg/local_object_storage/writecache/mode_test.go
Normal file
|
@ -0,0 +1,30 @@
|
|||
package writecache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger/test"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestMode(t *testing.T) {
|
||||
t.Parallel()
|
||||
wc := New(
|
||||
WithLogger(test.NewLogger(t)),
|
||||
WithFlushWorkersCount(2),
|
||||
WithPath(t.TempDir()))
|
||||
|
||||
require.NoError(t, wc.Open(context.Background(), mode.DegradedReadOnly))
|
||||
require.Nil(t, wc.(*cache).db)
|
||||
require.NoError(t, wc.Init())
|
||||
require.Nil(t, wc.(*cache).db)
|
||||
require.NoError(t, wc.Close())
|
||||
|
||||
require.NoError(t, wc.Open(context.Background(), mode.Degraded))
|
||||
require.Nil(t, wc.(*cache).db)
|
||||
require.NoError(t, wc.Init())
|
||||
require.Nil(t, wc.(*cache).db)
|
||||
require.NoError(t, wc.Close())
|
||||
}
|
|
@ -39,7 +39,7 @@ type Cache interface {
|
|||
Seal(context.Context, bool) error
|
||||
|
||||
Init() error
|
||||
Open(ctx context.Context, readOnly bool) error
|
||||
Open(ctx context.Context, mode mode.Mode) error
|
||||
Close() error
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue