@@ -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+
183196func (r * Reconciler ) scaleDownCandidate (ctx context.Context , apiObject k8sutil.APIObject ,
184197 spec api.DeploymentSpec , status api.DeploymentStatus ,
185198 context PlanBuilderContext ) api.Plan {
0 commit comments