diff --git a/nodespace/spacedeleter/spacedeleter.go b/nodespace/spacedeleter/spacedeleter.go index 0507ff5e..f042387e 100644 --- a/nodespace/spacedeleter/spacedeleter.go +++ b/nodespace/spacedeleter/spacedeleter.go @@ -110,7 +110,7 @@ func (s *spaceDeleter) delete(ctx context.Context) (err error) { } func (s *spaceDeleter) processDeletionRecord(ctx context.Context, rec *coordinatorproto.DeletionLogRecord) (err error) { - log := log.With(zap.String("spaceId", rec.SpaceId)) + log := log.With(zap.String("spaceId", rec.SpaceId), zap.String("deletionLogId", rec.Id), zap.String("status", rec.Status.String())) deleteSpace := func() error { // deleting space storage err = s.storageProvider.DeleteSpaceStorage(ctx, rec.SpaceId) @@ -119,6 +119,20 @@ func (s *spaceDeleter) processDeletionRecord(ctx context.Context, rec *coordinat } return s.deletionStorage.SetSpaceStatus(ctx, rec.SpaceId, nodestorage.SpaceStatusRemove, rec.Id) } + + prevStatus, err := s.deletionStorage.SpaceStatus(ctx, rec.SpaceId) + if err != nil { + return err + } + if prevStatus == nodestorage.SpaceStatusRemove { + log.Debug("space is already removed") + err := s.deletionStorage.SetDeletionLogId(ctx, rec.Id) + if err != nil { + return err + } + return nil + } + switch rec.Status { case coordinatorproto.DeletionLogRecordStatus_Ok: log.Debug("received deletion cancel record") diff --git a/nodespace/spacedeleter/spacedeleter_test.go b/nodespace/spacedeleter/spacedeleter_test.go index 86e19231..7566fd18 100644 --- a/nodespace/spacedeleter/spacedeleter_test.go +++ b/nodespace/spacedeleter/spacedeleter_test.go @@ -61,7 +61,7 @@ func TestSpaceDeleter_Run_Ok(t *testing.T) { assert.Equal(t, []string{"space1"}, allIds) } -func TestSpaceDeleter_Run_Ok_NewPush(t *testing.T) { +func TestSpaceDeleter_Run_Remove_Ok(t *testing.T) { fx := newSpaceDeleterFixture(t) defer fx.stop(t) fx.nodeConf.EXPECT().IsResponsible(gomock.Any()).Return(true).AnyTimes() @@ -81,7 +81,7 @@ func TestSpaceDeleter_Run_Ok_NewPush(t *testing.T) { require.Equal(t, lg[3].Id, id) status, err := fx.storage.IndexStorage().SpaceStatus(ctx, payload.SpaceHeaderWithId.Id) require.NoError(t, err) - require.Equal(t, nodestorage.SpaceStatusOk, status) + require.Equal(t, nodestorage.SpaceStatusRemove, status) } func TestSpaceDeleter_Run_Ok_NotResponsible(t *testing.T) {