Skip to content

Commit 2ce6245

Browse files
authored
[Feature] Respect ToBeCleanedServers in Agency (#1146)
1 parent 95112f0 commit 2ce6245

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- (Feature) ID ServerGroup
99
- (Bugfix) Propagate Lifecycle Mount
1010
- (Feature) PVC Member Status info
11+
- (Feature) Respect ToBeCleanedServers in Agency
1112

1213
## [1.2.19](https://github.com/arangodb/kube-arangodb/tree/1.2.19) (2022-10-05)
1314
- (Bugfix) Prevent changes when UID is wrong

pkg/deployment/agency/target.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ type StateTarget struct {
3030

3131
// Servers Section
3232

33-
CleanedServers Servers `json:"CleanedServers,omitempty"`
33+
CleanedServers Servers `json:"CleanedServers,omitempty"`
34+
ToBeCleanedServers Servers `json:"ToBeCleanedServers,omitempty"`
3435

3536
// HotBackup section
3637

pkg/deployment/reconcile/plan_builder_scale.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (r *Reconciler) createScalePlan(status api.DeploymentStatus, members api.Me
9292
Debug("Creating scale-up plan")
9393
} else if len(members) > count {
9494
// Note, we scale down 1 member at a time
95-
if m, err := members.SelectMemberToRemove(getCleanedServer(context), topologyMissingMemberToRemoveSelector(status.Topology), topologyAwarenessMemberToRemoveSelector(group, status.Topology)); err != nil {
95+
if m, err := members.SelectMemberToRemove(getCleanedServer(context), getToBeCleanedServer(context), topologyMissingMemberToRemoveSelector(status.Topology), topologyAwarenessMemberToRemoveSelector(group, status.Topology)); err != nil {
9696
r.planLogger.Err(err).Str("role", group.AsRole()).Warn("Failed to select member to remove")
9797
} else {
9898
ready, message := groupReadyForRestart(context, status, m, group)
@@ -180,6 +180,19 @@ func getCleanedServer(ctx reconciler.ArangoAgencyGet) api.MemberToRemoveSelector
180180
}
181181
}
182182

183+
func getToBeCleanedServer(ctx reconciler.ArangoAgencyGet) api.MemberToRemoveSelector {
184+
return func(m api.MemberStatusList) (string, error) {
185+
if a, ok := ctx.GetAgencyCache(); ok {
186+
for _, member := range m {
187+
if a.Target.ToBeCleanedServers.Contains(agency.Server(member.ID)) {
188+
return member.ID, nil
189+
}
190+
}
191+
}
192+
return "", nil
193+
}
194+
}
195+
183196
func (r *Reconciler) scaleDownCandidate(ctx context.Context, apiObject k8sutil.APIObject,
184197
spec api.DeploymentSpec, status api.DeploymentStatus,
185198
context PlanBuilderContext) api.Plan {

0 commit comments

Comments
 (0)