forked from TrueCloudLab/frostfs-node
[#922] storage engine: Prevent any operations after first Close call
Make `BlockExecution` / `ResumeExecution` to not release per-shard worker pools. Make `StorageEngine.Close` to block these methods and any data-related operations. It is still releases the pools. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
d6457ee485
commit
6c0b29e3e3
4 changed files with 73 additions and 9 deletions
46
pkg/local_object_storage/engine/control_test.go
Normal file
46
pkg/local_object_storage/engine/control_test.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
package engine
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
cidtest "github.com/nspcc-dev/neofs-api-go/pkg/container/id/test"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestExecBlocks(t *testing.T) {
|
||||
e := testNewEngineWithShardNum(t, 2) // number doesn't matter in this test, 2 is several but not many
|
||||
defer e.Close()
|
||||
|
||||
// put some object
|
||||
obj := generateRawObjectWithCID(t, cidtest.Generate()).Object()
|
||||
|
||||
addr := obj.Address()
|
||||
|
||||
require.NoError(t, Put(e, obj))
|
||||
|
||||
// block executions
|
||||
errBlock := errors.New("block exec err")
|
||||
|
||||
require.NoError(t, e.BlockExecution(errBlock))
|
||||
|
||||
// try to exec some op
|
||||
_, err := Head(e, addr)
|
||||
require.ErrorIs(t, err, errBlock)
|
||||
|
||||
// resume executions
|
||||
require.NoError(t, e.ResumeExecution())
|
||||
|
||||
_, err = Head(e, addr) // can be any data-related op
|
||||
require.NoError(t, err)
|
||||
|
||||
// close
|
||||
require.NoError(t, e.Close())
|
||||
|
||||
// try exec after close
|
||||
_, err = Head(e, addr)
|
||||
require.Error(t, err)
|
||||
|
||||
// try to resume
|
||||
require.Error(t, e.ResumeExecution())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue