Skip to content

Commit a6d511b

Browse files
authored
Merge pull request #275 from arangodb/bug-fix/scale-up-error
Bug fix/scale up error
2 parents 179cf75 + f46b375 commit a6d511b

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

pkg/apis/deployment/v1alpha/member_status_list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func (l MemberStatusList) SelectMemberToRemove() (MemberStatus, error) {
122122
if len(l) > 0 {
123123
// Try to find a not ready member
124124
for _, m := range l {
125-
if m.Phase == MemberPhaseNone {
125+
if m.Phase == MemberPhaseNone || !m.Conditions.IsTrue(ConditionTypeReady) {
126126
return m, nil
127127
}
128128
}

pkg/deployment/cluster_scaling_integration.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,19 @@ func (ci *clusterScalingIntegration) updateClusterServerCount(ctx context.Contex
192192
}
193193
coordinatorCount := spec.Coordinators.GetCount()
194194
dbserverCount := spec.DBServers.GetCount()
195-
if err := arangod.SetNumberOfServers(ctx, c.Connection(), coordinatorCount, dbserverCount); err != nil {
196-
if expectSuccess {
197-
log.Debug().Err(err).Msg("Failed to set number of servers")
195+
196+
ci.lastNumberOfServers.mutex.Lock()
197+
lastNumberOfServers := ci.lastNumberOfServers.NumberOfServers
198+
ci.lastNumberOfServers.mutex.Unlock()
199+
200+
// This is to prevent unneseccary updates that may override some values written by the WebUI (in the case of a update loop)
201+
if coordinatorCount != lastNumberOfServers.GetCoordinators() && dbserverCount != lastNumberOfServers.GetDBServers() {
202+
if err := arangod.SetNumberOfServers(ctx, c.Connection(), coordinatorCount, dbserverCount); err != nil {
203+
if expectSuccess {
204+
log.Debug().Err(err).Msg("Failed to set number of servers")
205+
}
206+
return false, maskAny(err)
198207
}
199-
return false, maskAny(err)
200208
}
201209

202210
// Success, now update internal state

pkg/deployment/reconcile/plan_builder.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,22 @@ func createScalePlan(log zerolog.Logger, members api.MemberStatusList, group api
366366
if m, err := members.SelectMemberToRemove(); err != nil {
367367
log.Warn().Err(err).Str("role", group.AsRole()).Msg("Failed to select member to remove")
368368
} else {
369-
if group == api.ServerGroupDBServers {
369+
370+
log.Debug().
371+
Str("member-id", m.ID).
372+
Str("phase", string(m.Phase)).
373+
Msg("Found member to remove")
374+
if m.Conditions.IsTrue(api.ConditionTypeReady) {
375+
if group == api.ServerGroupDBServers {
376+
plan = append(plan,
377+
api.NewAction(api.ActionTypeCleanOutMember, group, m.ID),
378+
)
379+
}
370380
plan = append(plan,
371-
api.NewAction(api.ActionTypeCleanOutMember, group, m.ID),
381+
api.NewAction(api.ActionTypeShutdownMember, group, m.ID),
372382
)
373383
}
374384
plan = append(plan,
375-
api.NewAction(api.ActionTypeShutdownMember, group, m.ID),
376385
api.NewAction(api.ActionTypeRemoveMember, group, m.ID),
377386
)
378387
log.Debug().

pkg/deployment/resources/secret_hashes.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import (
3838
// ValidateSecretHashes checks the hash of used secrets
3939
// against the stored ones.
4040
// If a hash is different, the deployment is marked
41-
// with a SecretChangedCondition and the operator will no
41+
// with a SecretChangedCondition and the operator will not
4242
// touch it until this is resolved.
4343
func (r *Resources) ValidateSecretHashes() error {
4444
// validate performs a secret hash comparison for a single secret.

0 commit comments

Comments
 (0)