1
0
Fork 0
mirror of https://github.com/arangodb/kube-arangodb.git synced 2024-12-14 11:57:37 +00:00

[Feature] Respect ToBeCleanedServers in Agency (#1146)

This commit is contained in:
Adam Janikowski 2022-10-18 13:10:07 +02:00 committed by GitHub
parent 95112f0b9d
commit 2ce6245e95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View file

@ -8,6 +8,7 @@
- (Feature) ID ServerGroup
- (Bugfix) Propagate Lifecycle Mount
- (Feature) PVC Member Status info
- (Feature) Respect ToBeCleanedServers in Agency
## [1.2.19](https://github.com/arangodb/kube-arangodb/tree/1.2.19) (2022-10-05)
- (Bugfix) Prevent changes when UID is wrong

View file

@ -31,6 +31,7 @@ type StateTarget struct {
// Servers Section
CleanedServers Servers `json:"CleanedServers,omitempty"`
ToBeCleanedServers Servers `json:"ToBeCleanedServers,omitempty"`
// HotBackup section

View file

@ -92,7 +92,7 @@ func (r *Reconciler) createScalePlan(status api.DeploymentStatus, members api.Me
Debug("Creating scale-up plan")
} else if len(members) > count {
// Note, we scale down 1 member at a time
if m, err := members.SelectMemberToRemove(getCleanedServer(context), topologyMissingMemberToRemoveSelector(status.Topology), topologyAwarenessMemberToRemoveSelector(group, status.Topology)); err != nil {
if m, err := members.SelectMemberToRemove(getCleanedServer(context), getToBeCleanedServer(context), topologyMissingMemberToRemoveSelector(status.Topology), topologyAwarenessMemberToRemoveSelector(group, status.Topology)); err != nil {
r.planLogger.Err(err).Str("role", group.AsRole()).Warn("Failed to select member to remove")
} else {
ready, message := groupReadyForRestart(context, status, m, group)
@ -180,6 +180,19 @@ func getCleanedServer(ctx reconciler.ArangoAgencyGet) api.MemberToRemoveSelector
}
}
func getToBeCleanedServer(ctx reconciler.ArangoAgencyGet) api.MemberToRemoveSelector {
return func(m api.MemberStatusList) (string, error) {
if a, ok := ctx.GetAgencyCache(); ok {
for _, member := range m {
if a.Target.ToBeCleanedServers.Contains(agency.Server(member.ID)) {
return member.ID, nil
}
}
}
return "", nil
}
}
func (r *Reconciler) scaleDownCandidate(ctx context.Context, apiObject k8sutil.APIObject,
spec api.DeploymentSpec, status api.DeploymentStatus,
context PlanBuilderContext) api.Plan {