From 853577190b7b41b9716f996bebb9a18b6afe541e Mon Sep 17 00:00:00 2001 From: Vladislav Klimenko Date: Wed, 29 Nov 2023 21:25:04 +0300 Subject: [PATCH] dev: introduce Aborted CHI status --- pkg/apis/clickhouse.altinity.com/v1/const.go | 1 + pkg/apis/clickhouse.altinity.com/v1/type_status.go | 12 ++++++++++++ pkg/controller/chi/worker-chi-reconciler.go | 2 +- pkg/controller/chi/worker.go | 10 ++++++++-- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pkg/apis/clickhouse.altinity.com/v1/const.go b/pkg/apis/clickhouse.altinity.com/v1/const.go index 47d944c8e..2fceff892 100644 --- a/pkg/apis/clickhouse.altinity.com/v1/const.go +++ b/pkg/apis/clickhouse.altinity.com/v1/const.go @@ -22,6 +22,7 @@ package v1 const ( StatusInProgress = "InProgress" StatusCompleted = "Completed" + StatusAborted = "Aborted" StatusTerminating = "Terminating" ) diff --git a/pkg/apis/clickhouse.altinity.com/v1/type_status.go b/pkg/apis/clickhouse.altinity.com/v1/type_status.go index 6d135d87d..44534f7a8 100644 --- a/pkg/apis/clickhouse.altinity.com/v1/type_status.go +++ b/pkg/apis/clickhouse.altinity.com/v1/type_status.go @@ -286,6 +286,18 @@ func (s *ChiStatus) ReconcileComplete() { }) } +// ReconcileAbort marks reconcile abortion +func (s *ChiStatus) ReconcileAbort() { + doWithWriteLock(s, func(s *ChiStatus) { + if s == nil { + return + } + s.Status = StatusAborted + s.Action = "" + pushTaskIDCompletedNoSync(s) + }) +} + // DeleteStart marks deletion start func (s *ChiStatus) DeleteStart() { doWithWriteLock(s, func(s *ChiStatus) { diff --git a/pkg/controller/chi/worker-chi-reconciler.go b/pkg/controller/chi/worker-chi-reconciler.go index 609f41462..8109b19e9 100644 --- a/pkg/controller/chi/worker-chi-reconciler.go +++ b/pkg/controller/chi/worker-chi-reconciler.go @@ -103,7 +103,7 @@ func (w *worker) reconcileCHI(ctx context.Context, old, new *chiV1.ClickHouseIns WithStatusError(new). M(new).F(). Error("FAILED to reconcile CHI err: %v", err) - w.markReconcileCompletedUnsuccessfully(ctx, new) + w.markReconcileCompletedUnsuccessfully(ctx, new, err) } else { // Post-process added items if util.IsContextDone(ctx) { diff --git a/pkg/controller/chi/worker.go b/pkg/controller/chi/worker.go index 3a5a8bece..2ac5edf94 100644 --- a/pkg/controller/chi/worker.go +++ b/pkg/controller/chi/worker.go @@ -16,6 +16,7 @@ package chi import ( "context" + "errors" "fmt" "time" @@ -692,13 +693,18 @@ func (w *worker) finalizeReconcileAndMarkCompleted(ctx context.Context, _chi *ch Info("reconcile completed successfully, task id: %s", _chi.Spec.GetTaskID()) } -func (w *worker) markReconcileCompletedUnsuccessfully(ctx context.Context, chi *chiV1.ClickHouseInstallation) { +func (w *worker) markReconcileCompletedUnsuccessfully(ctx context.Context, chi *chiV1.ClickHouseInstallation, err error) { if util.IsContextDone(ctx) { log.V(2).Info("task is done") return } - chi.EnsureStatus().ReconcileComplete() + switch { + case err == nil: + chi.EnsureStatus().ReconcileComplete() + case errors.Is(err, errCRUDAbort): + chi.EnsureStatus().ReconcileAbort() + } w.c.updateCHIObjectStatus(ctx, chi, UpdateCHIStatusOptions{ CopyCHIStatusOptions: chiV1.CopyCHIStatusOptions{ MainFields: true,