forked from TrueCloudLab/frostfs-node
[#947] controlSvc: Return tree evacuation stat
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
b3f3505ada
commit
15d853ea22
9 changed files with 569 additions and 452 deletions
|
@ -107,14 +107,14 @@ func TestEvacuateShard(t *testing.T) {
|
|||
t.Run("must be read-only", func(t *testing.T) {
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.ErrorIs(t, err, ErrMustBeReadOnly)
|
||||
require.Equal(t, uint64(0), res.Evacuated())
|
||||
require.Equal(t, uint64(0), res.ObjectsEvacuated())
|
||||
})
|
||||
|
||||
require.NoError(t, e.shards[evacuateShardID].SetMode(mode.ReadOnly))
|
||||
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(objPerShard), res.Evacuated())
|
||||
require.Equal(t, uint64(objPerShard), res.ObjectsEvacuated())
|
||||
|
||||
// We check that all objects are available both before and after shard removal.
|
||||
// First case is a real-world use-case. It ensures that an object can be put in presense
|
||||
|
@ -125,7 +125,7 @@ func TestEvacuateShard(t *testing.T) {
|
|||
// Calling it again is OK, but all objects are already moved, so no new PUTs should be done.
|
||||
res, err = e.Evacuate(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(0), res.Evacuated())
|
||||
require.Equal(t, uint64(0), res.ObjectsEvacuated())
|
||||
|
||||
checkHasObjects(t)
|
||||
|
||||
|
@ -177,13 +177,13 @@ func TestEvacuateNetwork(t *testing.T) {
|
|||
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.ErrorIs(t, err, errMustHaveTwoShards)
|
||||
require.Equal(t, uint64(0), res.Evacuated())
|
||||
require.Equal(t, uint64(0), res.ObjectsEvacuated())
|
||||
|
||||
prm.Handler = acceptOneOf(objects, 2)
|
||||
prm.ObjectsHandler = acceptOneOf(objects, 2)
|
||||
|
||||
res, err = e.Evacuate(context.Background(), prm)
|
||||
require.ErrorIs(t, err, errReplication)
|
||||
require.Equal(t, uint64(2), res.Evacuated())
|
||||
require.Equal(t, uint64(2), res.ObjectsEvacuated())
|
||||
})
|
||||
t.Run("multiple shards, evacuate one", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
@ -197,18 +197,18 @@ func TestEvacuateNetwork(t *testing.T) {
|
|||
|
||||
var prm EvacuateShardPrm
|
||||
prm.ShardID = ids[1:2]
|
||||
prm.Handler = acceptOneOf(objects, 2)
|
||||
prm.ObjectsHandler = acceptOneOf(objects, 2)
|
||||
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.ErrorIs(t, err, errReplication)
|
||||
require.Equal(t, uint64(2), res.Evacuated())
|
||||
require.Equal(t, uint64(2), res.ObjectsEvacuated())
|
||||
|
||||
t.Run("no errors", func(t *testing.T) {
|
||||
prm.Handler = acceptOneOf(objects, 3)
|
||||
prm.ObjectsHandler = acceptOneOf(objects, 3)
|
||||
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(3), res.Evacuated())
|
||||
require.Equal(t, uint64(3), res.ObjectsEvacuated())
|
||||
})
|
||||
})
|
||||
t.Run("multiple shards, evacuate many", func(t *testing.T) {
|
||||
|
@ -234,18 +234,18 @@ func TestEvacuateNetwork(t *testing.T) {
|
|||
|
||||
var prm EvacuateShardPrm
|
||||
prm.ShardID = evacuateIDs
|
||||
prm.Handler = acceptOneOf(objects, totalCount-1)
|
||||
prm.ObjectsHandler = acceptOneOf(objects, totalCount-1)
|
||||
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.ErrorIs(t, err, errReplication)
|
||||
require.Equal(t, totalCount-1, res.Evacuated())
|
||||
require.Equal(t, totalCount-1, res.ObjectsEvacuated())
|
||||
|
||||
t.Run("no errors", func(t *testing.T) {
|
||||
prm.Handler = acceptOneOf(objects, totalCount)
|
||||
prm.ObjectsHandler = acceptOneOf(objects, totalCount)
|
||||
|
||||
res, err := e.Evacuate(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, totalCount, res.Evacuated())
|
||||
require.Equal(t, totalCount, res.ObjectsEvacuated())
|
||||
})
|
||||
})
|
||||
}
|
||||
|
@ -262,7 +262,7 @@ func TestEvacuateCancellation(t *testing.T) {
|
|||
|
||||
var prm EvacuateShardPrm
|
||||
prm.ShardID = ids[1:2]
|
||||
prm.Handler = func(ctx context.Context, a oid.Address, o *objectSDK.Object) error {
|
||||
prm.ObjectsHandler = func(ctx context.Context, a oid.Address, o *objectSDK.Object) error {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
|
@ -276,7 +276,7 @@ func TestEvacuateCancellation(t *testing.T) {
|
|||
|
||||
res, err := e.Evacuate(ctx, prm)
|
||||
require.ErrorContains(t, err, "context canceled")
|
||||
require.Equal(t, uint64(0), res.Evacuated())
|
||||
require.Equal(t, uint64(0), res.ObjectsEvacuated())
|
||||
}
|
||||
|
||||
func TestEvacuateSingleProcess(t *testing.T) {
|
||||
|
@ -293,7 +293,7 @@ func TestEvacuateSingleProcess(t *testing.T) {
|
|||
|
||||
var prm EvacuateShardPrm
|
||||
prm.ShardID = ids[1:2]
|
||||
prm.Handler = func(ctx context.Context, a oid.Address, o *objectSDK.Object) error {
|
||||
prm.ObjectsHandler = func(ctx context.Context, a oid.Address, o *objectSDK.Object) error {
|
||||
select {
|
||||
case <-running:
|
||||
default:
|
||||
|
@ -307,14 +307,14 @@ func TestEvacuateSingleProcess(t *testing.T) {
|
|||
eg.Go(func() error {
|
||||
res, err := e.Evacuate(egCtx, prm)
|
||||
require.NoError(t, err, "first evacuation failed")
|
||||
require.Equal(t, uint64(3), res.Evacuated())
|
||||
require.Equal(t, uint64(3), res.ObjectsEvacuated())
|
||||
return nil
|
||||
})
|
||||
eg.Go(func() error {
|
||||
<-running
|
||||
res, err := e.Evacuate(egCtx, prm)
|
||||
require.ErrorContains(t, err, "evacuate is already running for shard ids", "second evacuation not failed")
|
||||
require.Equal(t, uint64(0), res.Evacuated())
|
||||
require.Equal(t, uint64(0), res.ObjectsEvacuated())
|
||||
close(blocker)
|
||||
return nil
|
||||
})
|
||||
|
@ -335,7 +335,7 @@ func TestEvacuateAsync(t *testing.T) {
|
|||
|
||||
var prm EvacuateShardPrm
|
||||
prm.ShardID = ids[1:2]
|
||||
prm.Handler = func(ctx context.Context, a oid.Address, o *objectSDK.Object) error {
|
||||
prm.ObjectsHandler = func(ctx context.Context, a oid.Address, o *objectSDK.Object) error {
|
||||
select {
|
||||
case <-running:
|
||||
default:
|
||||
|
@ -348,7 +348,7 @@ func TestEvacuateAsync(t *testing.T) {
|
|||
st, err := e.GetEvacuationState(context.Background())
|
||||
require.NoError(t, err, "get init state failed")
|
||||
require.Equal(t, EvacuateProcessStateUndefined, st.ProcessingStatus(), "invalid init state")
|
||||
require.Equal(t, uint64(0), st.Evacuated(), "invalid init count")
|
||||
require.Equal(t, uint64(0), st.ObjectsEvacuated(), "invalid init count")
|
||||
require.Nil(t, st.StartedAt(), "invalid init started at")
|
||||
require.Nil(t, st.FinishedAt(), "invalid init finished at")
|
||||
require.ElementsMatch(t, []string{}, st.ShardIDs(), "invalid init shard ids")
|
||||
|
@ -358,7 +358,7 @@ func TestEvacuateAsync(t *testing.T) {
|
|||
eg.Go(func() error {
|
||||
res, err := e.Evacuate(egCtx, prm)
|
||||
require.NoError(t, err, "first evacuation failed")
|
||||
require.Equal(t, uint64(3), res.Evacuated())
|
||||
require.Equal(t, uint64(3), res.ObjectsEvacuated())
|
||||
return nil
|
||||
})
|
||||
|
||||
|
@ -367,7 +367,7 @@ func TestEvacuateAsync(t *testing.T) {
|
|||
st, err = e.GetEvacuationState(context.Background())
|
||||
require.NoError(t, err, "get running state failed")
|
||||
require.Equal(t, EvacuateProcessStateRunning, st.ProcessingStatus(), "invalid running state")
|
||||
require.Equal(t, uint64(0), st.Evacuated(), "invalid running count")
|
||||
require.Equal(t, uint64(0), st.ObjectsEvacuated(), "invalid running count")
|
||||
require.NotNil(t, st.StartedAt(), "invalid running started at")
|
||||
require.Nil(t, st.FinishedAt(), "invalid init finished at")
|
||||
expectedShardIDs := make([]string, 0, 2)
|
||||
|
@ -385,7 +385,7 @@ func TestEvacuateAsync(t *testing.T) {
|
|||
}, 3*time.Second, 10*time.Millisecond, "invalid final state")
|
||||
|
||||
require.NoError(t, err, "get final state failed")
|
||||
require.Equal(t, uint64(3), st.Evacuated(), "invalid final count")
|
||||
require.Equal(t, uint64(3), st.ObjectsEvacuated(), "invalid final count")
|
||||
require.NotNil(t, st.StartedAt(), "invalid final started at")
|
||||
require.NotNil(t, st.FinishedAt(), "invalid final finished at")
|
||||
require.ElementsMatch(t, expectedShardIDs, st.ShardIDs(), "invalid final shard ids")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue