From 76c6eeb1a62766ac2a50bf1293af8a8be9acdec8 Mon Sep 17 00:00:00 2001 From: kaibocai Date: Fri, 15 Dec 2023 15:32:54 -0600 Subject: [PATCH] update apis simplify status check update tests --- api/orchestration.go | 22 +++++++++++----------- backend/sqlite/sqlite.go | 13 ++++++------- tests/orchestrations_test.go | 8 ++++---- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/api/orchestration.go b/api/orchestration.go index 6e61fff..1ef2c7c 100644 --- a/api/orchestration.go +++ b/api/orchestration.go @@ -26,22 +26,22 @@ var ( type CreateOrchestrationAction = protos.CreateOrchestrationAction const ( - ERROR CreateOrchestrationAction = protos.CreateOrchestrationAction_ERROR - IGNORE CreateOrchestrationAction = protos.CreateOrchestrationAction_IGNORE - TERMINATE CreateOrchestrationAction = protos.CreateOrchestrationAction_TERMINATE + REUSE_ID_ACTION_ERROR CreateOrchestrationAction = protos.CreateOrchestrationAction_ERROR + REUSE_ID_ACTION_IGNORE CreateOrchestrationAction = protos.CreateOrchestrationAction_IGNORE + REUSE_ID_ACTION_TERMINATE CreateOrchestrationAction = protos.CreateOrchestrationAction_TERMINATE ) type OrchestrationStatus = protos.OrchestrationStatus const ( - RUNNING OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_RUNNING - COMPLETED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_COMPLETED - CONTINUED_AS_NEW OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_CONTINUED_AS_NEW - FAILED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_FAILED - CANCELED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_CANCELED - TERMINATED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_TERMINATED - PENDING OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_PENDING - SUSPENDED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_SUSPENDED + RUNTIME_STATUS_RUNNING OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_RUNNING + RUNTIME_STATUS_COMPLETED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_COMPLETED + RUNTIME_STATUS_CONTINUED_AS_NEW OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_CONTINUED_AS_NEW + RUNTIME_STATUS_FAILED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_FAILED + RUNTIME_STATUS_CANCELED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_CANCELED + RUNTIME_STATUS_TERMINATED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_TERMINATED + RUNTIME_STATUS_PENDING OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_PENDING + RUNTIME_STATUS_SUSPENDED OrchestrationStatus = protos.OrchestrationStatus_ORCHESTRATION_STATUS_SUSPENDED ) type OrchestrationIdReusePolicy = protos.OrchestrationIdReusePolicy diff --git a/backend/sqlite/sqlite.go b/backend/sqlite/sqlite.go index 4ae3f34..124509e 100644 --- a/backend/sqlite/sqlite.go +++ b/backend/sqlite/sqlite.go @@ -511,10 +511,8 @@ func (be *sqliteBackend) handleInstanceExists(ctx context.Context, tx *sql.Tx, s return fmt.Errorf("failed to scan the Instances table result: %w", err) } - // instance already exists - targetStatusValues := buildStatusSet(policy.OperationStatus) // status not match, return instance duplicate error - if _, ok := targetStatusValues[helpers.FromRuntimeStatusString(*runtimeStatus)]; !ok { + if !isStatusMatch(policy.OperationStatus, helpers.FromRuntimeStatusString(*runtimeStatus)) { return api.ErrDuplicateInstance } @@ -545,12 +543,13 @@ func (be *sqliteBackend) handleInstanceExists(ctx context.Context, tx *sql.Tx, s return api.ErrDuplicateInstance } -func buildStatusSet(statuses []api.OrchestrationStatus) map[api.OrchestrationStatus]struct{} { - statusSet := make(map[api.OrchestrationStatus]struct{}, len(statuses)) +func isStatusMatch(statuses []protos.OrchestrationStatus, runtimeStatus protos.OrchestrationStatus) bool { for _, status := range statuses { - statusSet[status] = struct{}{} + if status == runtimeStatus { + return true + } } - return statusSet + return false } func (be *sqliteBackend) cleanupOrchestrationStateInternal(ctx context.Context, tx *sql.Tx, id api.InstanceID, requireCompleted bool) error { diff --git a/tests/orchestrations_test.go b/tests/orchestrations_test.go index 2ed8420..173d33e 100644 --- a/tests/orchestrations_test.go +++ b/tests/orchestrations_test.go @@ -853,8 +853,8 @@ func Test_SingleActivity_ReuseInstanceIDIgnore(t *testing.T) { instanceID := api.InstanceID("IGNORE_IF_RUNNING_OR_COMPLETED") reuseIdPolicy := &api.OrchestrationIdReusePolicy{ - Action: api.IGNORE, - OperationStatus: []api.OrchestrationStatus{api.RUNNING, api.COMPLETED, api.PENDING}, + Action: api.REUSE_ID_ACTION_IGNORE, + OperationStatus: []api.OrchestrationStatus{api.RUNTIME_STATUS_RUNNING, api.RUNTIME_STATUS_COMPLETED, api.RUNTIME_STATUS_PENDING}, } // Run the orchestration @@ -904,8 +904,8 @@ func Test_SingleActivity_ReuseInstanceIDTerminate(t *testing.T) { instanceID := api.InstanceID("TERMINATE_IF_RUNNING_OR_COMPLETED") reuseIdPolicy := &api.OrchestrationIdReusePolicy{ - Action: api.TERMINATE, - OperationStatus: []api.OrchestrationStatus{api.RUNNING, api.COMPLETED, api.PENDING}, + Action: api.REUSE_ID_ACTION_TERMINATE, + OperationStatus: []api.OrchestrationStatus{api.RUNTIME_STATUS_RUNNING, api.RUNTIME_STATUS_COMPLETED, api.RUNTIME_STATUS_PENDING}, } // Run the orchestration