@@ -93,7 +93,13 @@ func (r *Reconciler) createScalePlan(status api.DeploymentStatus, members api.Me
9393 Debug ("Creating scale-up plan" )
9494 } else if len (members ) > count {
9595 // Note, we scale down 1 member at a time
96- if m , err := members .SelectMemberToRemove (getCleanedServer (context ), getToBeCleanedServer (context ), topologyMissingMemberToRemoveSelector (status .Topology ), topologyAwarenessMemberToRemoveSelector (group , status .Topology )); err != nil {
96+
97+ if m , err := members .SelectMemberToRemove (
98+ getCleanedServer (context ),
99+ getToBeCleanedServer (context ),
100+ topologyMissingMemberToRemoveSelector (status .Topology ),
101+ topologyAwarenessMemberToRemoveSelector (group , status .Topology ),
102+ getDbServerWithLowestShards (context , group )); err != nil {
97103 r .planLogger .Err (err ).Str ("role" , group .AsRole ()).Warn ("Failed to select member to remove" )
98104 } else {
99105 ready , message := groupReadyForRestart (context , status , m , group )
@@ -194,6 +200,18 @@ func getToBeCleanedServer(ctx reconciler.ArangoAgencyGet) api.MemberToRemoveSele
194200 }
195201}
196202
203+ func getDbServerWithLowestShards (ctx reconciler.ArangoAgencyGet , g api.ServerGroup ) api.MemberToRemoveSelector {
204+ return func (m api.MemberStatusList ) (string , error ) {
205+ if g != api .ServerGroupDBServers {
206+ return "" , nil
207+ }
208+ if a , ok := ctx .GetAgencyCache (); ok {
209+ return string (a .GetDBServerWithLowestShards ()), nil
210+ }
211+ return "" , nil
212+ }
213+ }
214+
197215func (r * Reconciler ) scaleDownCandidate (ctx context.Context , apiObject k8sutil.APIObject ,
198216 spec api.DeploymentSpec , status api.DeploymentStatus ,
199217 context PlanBuilderContext ) api.Plan {
0 commit comments