From 014f1a4dac74bb9660ce26d209afda2c44a5e293 Mon Sep 17 00:00:00 2001 From: Vladislav Sukhin Date: Wed, 7 Aug 2024 10:34:42 +0400 Subject: [PATCH] fix: support old agent with new cloud migration to new sequence methods (#5734) * fix: support old agent migration to new sequence methods Signed-off-by: Vladislav Sukhin * fix: unit tests Signed-off-by: Vladislav Sukhin * fix: add unit tests Signed-off-by: Vladislav Sukhin * fix: integration test Signed-off-by: Vladislav Sukhin * fix: unit test Signed-off-by: Vladislav Sukhin * fix: add ccomments Signed-off-by: Vladislav Sukhin * fix: comment typo Signed-off-by: Vladislav Sukhin --------- Signed-off-by: Vladislav Sukhin --- pkg/repository/sequence/mongo.go | 24 +++++++--- .../sequence/mongo_integration_test.go | 44 +++++++++++++++++-- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/pkg/repository/sequence/mongo.go b/pkg/repository/sequence/mongo.go index 5ec90bb5417..d298bd60378 100644 --- a/pkg/repository/sequence/mongo.go +++ b/pkg/repository/sequence/mongo.go @@ -62,7 +62,7 @@ type executionNumber struct { // GetNextExecutionNumber gets next execution number by name and type func (r *MongoRepository) GetNextExecutionNumber(ctx context.Context, name string, executionType ExecutionType) (number int32, err error) { oldName := getOldName(name, executionType) - number, err = r.getOldNumber(ctx, oldName) + number, err = r.getOldNumber(ctx, oldName, executionType) if err != nil { return 0, err } @@ -151,15 +151,29 @@ func (r *MongoRepository) DeleteAllExecutionNumbers(ctx context.Context, executi return err } -func (r *MongoRepository) getOldNumber(ctx context.Context, name string) (int32, error) { - var executionNumber oldExecutionNumber +func (r *MongoRepository) getOldNumber(ctx context.Context, name string, executionType ExecutionType) (int32, error) { + var oldExecutionNumber oldExecutionNumber - err := r.Coll.FindOne(ctx, bson.M{"name": name}).Decode(&executionNumber) + // get old number from OSS or old agent - old cloud configuration + err := r.Coll.FindOne(ctx, bson.M{"name": name}).Decode(&oldExecutionNumber) if err != nil && err != mongo.ErrNoDocuments { return 0, err } - return int32(executionNumber.Number), nil + number := int32(oldExecutionNumber.Number) + // get old number from old agennt - new cloud configuration + if number == 0 && (executionType == ExecutionTypeTestSuite || executionType == ExecutionTypeTestWorkflow) { + var executionNumber executionNumber + + err = r.Coll.FindOne(ctx, bson.M{"_id": getMongoId(name, ExecutionTypeTest)}).Decode(&executionNumber) + if err != nil && err != mongo.ErrNoDocuments { + return 0, err + } + + number = int32(executionNumber.Number) + } + + return number, nil } func getMongoId(name string, executionType ExecutionType) string { diff --git a/pkg/repository/sequence/mongo_integration_test.go b/pkg/repository/sequence/mongo_integration_test.go index 03196cb657d..734027b2291 100644 --- a/pkg/repository/sequence/mongo_integration_test.go +++ b/pkg/repository/sequence/mongo_integration_test.go @@ -36,36 +36,65 @@ func TestNewMongoRepository_GetNextExecutionNumber_Sequential_Integration(t *tes var tests = []struct { expectedValue int32 + name string executionType ExecutionType }{ + // check for new resources { 1, + "test", ExecutionTypeTest, }, { 2, + "test", ExecutionTypeTest, }, { 1, + "testsuite", ExecutionTypeTestSuite, }, { 2, + "testsuite", ExecutionTypeTestSuite, }, { 1, + "testworkflow", ExecutionTypeTestWorkflow, }, { 2, + "testworkflow", + ExecutionTypeTestWorkflow, + }, + // check for existing resources + { + 1, + "ts-old-testsuite", + ExecutionTypeTest, + }, + { + 1, + "old-testworkflow", + ExecutionTypeTest, + }, + { + 2, + "old-testsuite", + ExecutionTypeTestSuite, + }, + { + 2, + "old-testworkflow", ExecutionTypeTestWorkflow, }, } for _, tt := range tests { - num, err := repo.GetNextExecutionNumber(ctx, "name", tt.executionType) + num, err := repo.GetNextExecutionNumber(ctx, tt.name, tt.executionType) assert.NoError(t, err) assert.Equal(t, tt.expectedValue, num) } @@ -89,30 +118,37 @@ func TestNewMongoRepository_GetNextExecutionNumber_Parallel_Integration(t *testi var tests = []struct { expectedValue int32 + name string executionType ExecutionType }{ { 1, + "test", ExecutionTypeTest, }, { 2, + "test", ExecutionTypeTest, }, { 1, + "testsuite", ExecutionTypeTestSuite, }, { 2, + "testsuite", ExecutionTypeTestSuite, }, { 1, + "testworkflow", ExecutionTypeTestWorkflow, }, { 2, + "testworkflow", ExecutionTypeTestWorkflow, }, } @@ -122,14 +158,14 @@ func TestNewMongoRepository_GetNextExecutionNumber_Parallel_Integration(t *testi for i := range tests { wg.Add(1) - go func(executionType ExecutionType) { + go func(name string, executionType ExecutionType) { defer wg.Done() - num, err := repo.GetNextExecutionNumber(ctx, "name", executionType) + num, err := repo.GetNextExecutionNumber(ctx, name, executionType) assert.NoError(t, err) results.Store(fmt.Sprintf("%s_%d", executionType, num), num) - }(tests[i].executionType) + }(tests[i].name, tests[i].executionType) } wg.Wait()