diff --git a/CHANGELOG.md b/CHANGELOG.md index 055b68a77..71e8d30de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ - (Feature) Unify agency access - (Feature) Change DBServer Cleanup Logic - (Feature) Set Logger format +- (Bugfix) Ensure Wait actions to be present after AddMember ## [1.2.13](https://github.com/arangodb/kube-arangodb/tree/1.2.13) (2022-06-07) - (Bugfix) Fix arangosync members state inspection diff --git a/pkg/deployment/reconcile/action_add_member.go b/pkg/deployment/reconcile/action_add_member.go index 3c0e0b1d9..affab90e0 100644 --- a/pkg/deployment/reconcile/action_add_member.go +++ b/pkg/deployment/reconcile/action_add_member.go @@ -74,21 +74,9 @@ func (a *actionAddMember) Start(ctx context.Context) (bool, error) { // ActionPlanAppender appends wait methods to the plan func (a *actionAddMember) ActionPlanAppender(current api.Plan) (api.Plan, bool) { - var app api.Plan - - if _, ok := a.action.Params[api.ActionTypeWaitForMemberUp.String()]; ok { - app = append(app, actions.NewAction(api.ActionTypeWaitForMemberUp, a.action.Group, withPredefinedMember(a.newMemberID), "Wait for member in sync after creation")) - } - - if _, ok := a.action.Params[api.ActionTypeWaitForMemberInSync.String()]; ok { - app = append(app, actions.NewAction(api.ActionTypeWaitForMemberInSync, a.action.Group, withPredefinedMember(a.newMemberID), "Wait for member in sync after creation")) + np := api.Plan{ + actions.NewAction(api.ActionTypeWaitForMemberUp, a.action.Group, withPredefinedMember(a.newMemberID), "Wait for member in sync after creation"), + actions.NewAction(api.ActionTypeWaitForMemberInSync, a.action.Group, withPredefinedMember(a.newMemberID), "Wait for member in sync after creation"), } - - if len(app) > 0 { - return app.AfterFirst(func(a api.Action) bool { - return a.Type == api.ActionTypeAddMember - }, app...), true - } - - return current, false + return append(current, np...), true } diff --git a/pkg/deployment/reconcile/plan_builder_normal.go b/pkg/deployment/reconcile/plan_builder_normal.go index 9b2d83bcc..a6a8cdf7d 100644 --- a/pkg/deployment/reconcile/plan_builder_normal.go +++ b/pkg/deployment/reconcile/plan_builder_normal.go @@ -149,7 +149,6 @@ func (r *Reconciler) createMemberFailedRestorePlan(ctx context.Context, apiObjec plan = append(plan, actions.NewAction(api.ActionTypeRemoveMember, group, m), actions.NewAction(api.ActionTypeAddMember, group, withPredefinedMember("")), - actions.NewAction(api.ActionTypeWaitForMemberUp, group, withPredefinedMember(api.MemberIDPreviousAction)), ) } else { memberLog.Info("Restoring old member. Recreation is disabled for group") diff --git a/pkg/deployment/reconcile/plan_builder_scale.go b/pkg/deployment/reconcile/plan_builder_scale.go index 291c02b10..6ecba2691 100644 --- a/pkg/deployment/reconcile/plan_builder_scale.go +++ b/pkg/deployment/reconcile/plan_builder_scale.go @@ -119,9 +119,7 @@ func (r *Reconciler) createReplaceMemberPlan(ctx context.Context, apiObject k8su if member.Conditions.IsTrue(api.ConditionTypeMarkedToRemove) { switch group { case api.ServerGroupDBServers: - plan = append(plan, actions.NewAction(api.ActionTypeAddMember, group, withPredefinedMember("")). - AddParam(api.ActionTypeWaitForMemberInSync.String(), ""). - AddParam(api.ActionTypeWaitForMemberUp.String(), "")) + plan = append(plan, actions.NewAction(api.ActionTypeAddMember, group, withPredefinedMember(""))) r.planLogger. Str("role", group.AsRole()). Debug("Creating replacement plan") @@ -134,9 +132,7 @@ func (r *Reconciler) createReplaceMemberPlan(ctx context.Context, apiObject k8su return nil case api.ServerGroupAgents: plan = append(plan, actions.NewAction(api.ActionTypeRemoveMember, group, member), - actions.NewAction(api.ActionTypeAddMember, group, withPredefinedMember("")). - AddParam(api.ActionTypeWaitForMemberInSync.String(), ""). - AddParam(api.ActionTypeWaitForMemberUp.String(), "")) + actions.NewAction(api.ActionTypeAddMember, group, withPredefinedMember(""))) r.planLogger. Str("role", group.AsRole()). Debug("Creating replacement plan") diff --git a/pkg/deployment/reconcile/plan_builder_storage.go b/pkg/deployment/reconcile/plan_builder_storage.go index 944885af9..a1fc99dc9 100644 --- a/pkg/deployment/reconcile/plan_builder_storage.go +++ b/pkg/deployment/reconcile/plan_builder_storage.go @@ -133,6 +133,7 @@ func (r *Reconciler) pvcResizePlan(group api.ServerGroup, groupSpec api.ServerGr actions.NewAction(api.ActionTypePVCResized, group, member), actions.NewAction(api.ActionTypeRotateStopMember, group, member), actions.NewAction(api.ActionTypeWaitForMemberUp, group, member), + actions.NewAction(api.ActionTypeWaitForMemberInSync, group, member), } default: r.planLogger.Str("server-group", group.AsRole()).Str("mode", mode.String()). diff --git a/pkg/deployment/reconcile/plan_builder_test.go b/pkg/deployment/reconcile/plan_builder_test.go index 7bb94d3cb..3f7c1742a 100644 --- a/pkg/deployment/reconcile/plan_builder_test.go +++ b/pkg/deployment/reconcile/plan_builder_test.go @@ -1057,7 +1057,6 @@ func TestCreatePlan(t *testing.T) { ExpectedPlan: []api.Action{ actions.NewAction(api.ActionTypeRemoveMember, api.ServerGroupCoordinators, withPredefinedMember("id")), actions.NewAction(api.ActionTypeAddMember, api.ServerGroupCoordinators, withPredefinedMember("")), - actions.NewAction(api.ActionTypeWaitForMemberUp, api.ServerGroupCoordinators, withPredefinedMember(api.MemberIDPreviousAction)), }, ExpectedLog: "Creating member replacement plan because member has failed", }, @@ -1076,7 +1075,6 @@ func TestCreatePlan(t *testing.T) { ExpectedPlan: []api.Action{ actions.NewAction(api.ActionTypeRemoveMember, api.ServerGroupDBServers, withPredefinedMember("id")), actions.NewAction(api.ActionTypeAddMember, api.ServerGroupDBServers, withPredefinedMember("")), - actions.NewAction(api.ActionTypeWaitForMemberUp, api.ServerGroupDBServers, withPredefinedMember(api.MemberIDPreviousAction)), }, ExpectedLog: "Creating member replacement plan because member has failed", },