From 9e3c0f87845a98a207c06b582c16992db5dd6f19 Mon Sep 17 00:00:00 2001 From: Shivam Saraf Date: Thu, 27 Feb 2025 10:20:11 -0500 Subject: [PATCH 1/3] sorting version summaries --- service/worker/workerdeployment/client.go | 6 ++ tests/worker_deployment_test.go | 68 ++++++++++++++++++++--- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/service/worker/workerdeployment/client.go b/service/worker/workerdeployment/client.go index b953ec832aa..85c66a1f1f4 100644 --- a/service/worker/workerdeployment/client.go +++ b/service/worker/workerdeployment/client.go @@ -28,6 +28,7 @@ import ( "context" "errors" "fmt" + "sort" "time" "github.com/pborman/uuid" @@ -1272,6 +1273,11 @@ func (d *ClientImpl) deploymentStateToDeploymentInfo(deploymentName string, stat }) } + // Sort by create time, with the latest version first. + sort.Slice(workerDeploymentInfo.VersionSummaries, func(i, j int) bool { + return workerDeploymentInfo.VersionSummaries[i].CreateTime.AsTime().After(workerDeploymentInfo.VersionSummaries[j].CreateTime.AsTime()) + }) + return &workerDeploymentInfo, nil } diff --git a/tests/worker_deployment_test.go b/tests/worker_deployment_test.go index 47968660ca5..3f15d06c7f8 100644 --- a/tests/worker_deployment_test.go +++ b/tests/worker_deployment_test.go @@ -254,7 +254,7 @@ func (s *WorkerDeploymentSuite) TestNamespaceDeploymentsLimit() { s.pollFromDeploymentExpectFail(ctx, tv.WithDeploymentSeriesNumber(2)) } -func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions() { +func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions_Sorted() { ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) defer cancel() tv := testvars.New(s) @@ -264,6 +264,15 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions() { secondVersion := tv.WithBuildIDNumber(2) go s.pollFromDeployment(ctx, firstVersion) + + // waiting for 3 seconds to start the second version later. + startTime := time.Now() + waitTime := 3 * time.Second + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + a.Greater(time.Since(startTime), waitTime) + }, 10*time.Second, 1000*time.Millisecond) + go s.pollFromDeployment(ctx, secondVersion) s.EventuallyWithT(func(t *assert.CollectT) { @@ -283,15 +292,13 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions() { if len(resp.GetWorkerDeploymentInfo().GetVersionSummaries()) < 2 { return } - a.NotNil(resp.GetWorkerDeploymentInfo().GetVersionSummaries()[0].GetVersion()) - a.NotNil(resp.GetWorkerDeploymentInfo().GetVersionSummaries()[1].GetVersion()) + // Verify that the version summaries are non-nil and sorted. + versionSummaries := resp.GetWorkerDeploymentInfo().GetVersionSummaries() - versions := []string{ - resp.GetWorkerDeploymentInfo().GetVersionSummaries()[0].GetVersion(), - resp.GetWorkerDeploymentInfo().GetVersionSummaries()[1].GetVersion(), - } - a.Contains(versions, firstVersion.DeploymentVersionString()) - a.Contains(versions, secondVersion.DeploymentVersionString()) + a.NotNil(versionSummaries[0].GetVersion()) + a.NotNil(versionSummaries[1].GetVersion()) + a.Equal(versionSummaries[0].GetVersion(), secondVersion.DeploymentVersionString()) + a.Equal(versionSummaries[1].GetVersion(), firstVersion.DeploymentVersionString()) a.NotNil(resp.GetWorkerDeploymentInfo().GetVersionSummaries()[0].GetCreateTime()) a.NotNil(resp.GetWorkerDeploymentInfo().GetVersionSummaries()[1].GetCreateTime()) @@ -300,6 +307,49 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions() { }, time.Second*10, time.Millisecond*1000) } +func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_MultipleVersions_Sorted() { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + defer cancel() + tv := testvars.New(s) + + numVersions := 10 + + for i := 0; i < numVersions; i++ { + go s.pollFromDeployment(ctx, tv.WithBuildIDNumber(i)) + + // waiting for 1 second to start the next version later. + startTime := time.Now() + waitTime := 1 * time.Second + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + a.Greater(time.Since(startTime), waitTime) + }, 10*time.Second, 1000*time.Millisecond) + } + + s.EventuallyWithT(func(t *assert.CollectT) { + a := assert.New(t) + + resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv.DeploymentSeries(), + }) + a.NoError(err) + + a.NotNil(resp.GetWorkerDeploymentInfo().GetVersionSummaries()) + a.Equal(numVersions, len(resp.GetWorkerDeploymentInfo().GetVersionSummaries())) + + if len(resp.GetWorkerDeploymentInfo().GetVersionSummaries()) < numVersions { + return + } + + // Verify that the version summaries are sorted. + versionSummaries := resp.GetWorkerDeploymentInfo().GetVersionSummaries() + for i := 0; i < numVersions-1; i++ { + a.Less(versionSummaries[i+1].GetCreateTime().AsTime(), versionSummaries[i].GetCreateTime().AsTime()) + } + }, time.Second*10, time.Millisecond*1000) +} + func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_SetCurrentVersion() { ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) defer cancel() From de7d75072457d1c0457546548558746e9c2e01ba Mon Sep 17 00:00:00 2001 From: Shivam Saraf Date: Fri, 28 Feb 2025 16:11:26 -0500 Subject: [PATCH 2/3] comments --- tests/worker_deployment_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/worker_deployment_test.go b/tests/worker_deployment_test.go index 3f15d06c7f8..56477294612 100644 --- a/tests/worker_deployment_test.go +++ b/tests/worker_deployment_test.go @@ -267,7 +267,7 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions_Sorted( // waiting for 3 seconds to start the second version later. startTime := time.Now() - waitTime := 3 * time.Second + waitTime := 1 * time.Millisecond s.EventuallyWithT(func(t *assert.CollectT) { a := assert.New(t) a.Greater(time.Since(startTime), waitTime) @@ -319,7 +319,7 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_MultipleVersions_So // waiting for 1 second to start the next version later. startTime := time.Now() - waitTime := 1 * time.Second + waitTime := 1 * time.Millisecond s.EventuallyWithT(func(t *assert.CollectT) { a := assert.New(t) a.Greater(time.Since(startTime), waitTime) From a19fd5474adff753ebaf9e77ab3a8d8c0672dfea Mon Sep 17 00:00:00 2001 From: Shivam Saraf Date: Fri, 28 Feb 2025 16:22:11 -0500 Subject: [PATCH 3/3] update comment --- tests/worker_deployment_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/worker_deployment_test.go b/tests/worker_deployment_test.go index 56477294612..42c84b3d9e5 100644 --- a/tests/worker_deployment_test.go +++ b/tests/worker_deployment_test.go @@ -265,7 +265,7 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_TwoVersions_Sorted( go s.pollFromDeployment(ctx, firstVersion) - // waiting for 3 seconds to start the second version later. + // waiting for 1ms to start the second version later. startTime := time.Now() waitTime := 1 * time.Millisecond s.EventuallyWithT(func(t *assert.CollectT) { @@ -317,7 +317,7 @@ func (s *WorkerDeploymentSuite) TestDescribeWorkerDeployment_MultipleVersions_So for i := 0; i < numVersions; i++ { go s.pollFromDeployment(ctx, tv.WithBuildIDNumber(i)) - // waiting for 1 second to start the next version later. + // waiting for 1ms to start the next version later. startTime := time.Now() waitTime := 1 * time.Millisecond s.EventuallyWithT(func(t *assert.CollectT) {