forked from TrueCloudLab/frostfs-node
[#918] engine: Move shard to degraded mode if metabase open failed
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
f2f3294fc3
commit
931a5e9aaf
4 changed files with 53 additions and 47 deletions
|
@ -118,7 +118,7 @@ func TestInitializationFailure(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func testEngineFailInitAndReload(t *testing.T, errOnAdd bool, opts []shard.Option, beforeReload func()) {
|
||||
func testEngineFailInitAndReload(t *testing.T, degradedMode bool, opts []shard.Option, beforeReload func()) {
|
||||
var configID string
|
||||
|
||||
e := New()
|
||||
|
@ -126,33 +126,30 @@ func testEngineFailInitAndReload(t *testing.T, errOnAdd bool, opts []shard.Optio
|
|||
require.NoError(t, e.Close(context.Background()))
|
||||
}()
|
||||
_, err := e.AddShard(context.Background(), opts...)
|
||||
if errOnAdd {
|
||||
require.Error(t, err)
|
||||
// This branch is only taken when we cannot update shard ID in the metabase.
|
||||
// The id cannot be encountered during normal operation, but it is ok for tests:
|
||||
// it is only compared for equality with other ids and we have 0 shards here.
|
||||
configID = "id"
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
|
||||
e.mtx.RLock()
|
||||
var id string
|
||||
for id = range e.shards {
|
||||
break
|
||||
}
|
||||
configID = calculateShardID(e.shards[id].Shard.DumpInfo())
|
||||
e.mtx.RUnlock()
|
||||
|
||||
err = e.Open(context.Background())
|
||||
if err == nil {
|
||||
require.Error(t, e.Init(context.Background()))
|
||||
}
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
e.mtx.RLock()
|
||||
shardCount := len(e.shards)
|
||||
var id string
|
||||
for id = range e.shards {
|
||||
break
|
||||
}
|
||||
configID = calculateShardID(e.shards[id].Shard.DumpInfo())
|
||||
e.mtx.RUnlock()
|
||||
require.Equal(t, 0, shardCount)
|
||||
|
||||
err = e.Open(context.Background())
|
||||
require.NoError(t, err)
|
||||
if degradedMode {
|
||||
require.NoError(t, e.Init(context.Background()))
|
||||
require.Equal(t, mode.DegradedReadOnly, e.DumpInfo().Shards[0].Mode)
|
||||
return
|
||||
} else {
|
||||
require.Error(t, e.Init(context.Background()))
|
||||
|
||||
e.mtx.RLock()
|
||||
shardCount := len(e.shards)
|
||||
e.mtx.RUnlock()
|
||||
require.Equal(t, 0, shardCount)
|
||||
}
|
||||
|
||||
beforeReload()
|
||||
|
||||
|
@ -161,7 +158,7 @@ func testEngineFailInitAndReload(t *testing.T, errOnAdd bool, opts []shard.Optio
|
|||
}))
|
||||
|
||||
e.mtx.RLock()
|
||||
shardCount = len(e.shards)
|
||||
shardCount := len(e.shards)
|
||||
e.mtx.RUnlock()
|
||||
require.Equal(t, 1, shardCount)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue