Skip to content
This repository was archived by the owner on Jan 21, 2020. It is now read-only.

Commit 1f3e4dc

Browse files
dgageotDavid Chung
authored and
David Chung
committed
Label bootstrap instances on an update (#405)
Fix #404 Signed-off-by: David Gageot <[email protected]>
1 parent 3f2e6fb commit 1f3e4dc

File tree

4 files changed

+23
-20
lines changed

4 files changed

+23
-20
lines changed

pkg/plugin/group/quorum.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (q *quorum) Size() uint {
7070
}
7171

7272
func (q *quorum) converge() {
73-
descriptions, err := q.scaled.List()
73+
descriptions, err := labelAndList(q.scaled)
7474
if err != nil {
7575
log.Errorf("Failed to check group: %s", err)
7676
return

pkg/plugin/group/rollingupdate.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (r *rollingupdate) waitUntilQuiesced(pollInterval time.Duration, expectedNe
6161
// - instances with the desired config are healthy
6262

6363
// TODO(wfarner): Get this information from the scaler to reduce redundant network calls.
64-
instances, err := r.scaled.List()
64+
instances, err := labelAndList(r.scaled)
6565
if err != nil {
6666
return err
6767
}
@@ -116,7 +116,7 @@ func (r *rollingupdate) waitUntilQuiesced(pollInterval time.Duration, expectedNe
116116
// TODO(wfarner): Make this routine more resilient to transient errors.
117117
func (r *rollingupdate) Run(pollInterval time.Duration) error {
118118

119-
instances, err := r.scaled.List()
119+
instances, err := labelAndList(r.scaled)
120120
if err != nil {
121121
return err
122122
}
@@ -133,7 +133,7 @@ func (r *rollingupdate) Run(pollInterval time.Duration) error {
133133
}
134134
log.Info("Scaler has quiesced")
135135

136-
instances, err := r.scaled.List()
136+
instances, err := labelAndList(r.scaled)
137137
if err != nil {
138138
return err
139139
}

pkg/plugin/group/scaled.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,23 @@ func (s *scaledGroup) Label() error {
153153
return nil
154154
}
155155

156+
func labelAndList(scaled Scaled) ([]instance.Description, error) {
157+
descriptions, err := scaled.List()
158+
if err != nil {
159+
return nil, err
160+
}
161+
162+
if !needsLabel(descriptions) {
163+
return descriptions, nil
164+
}
165+
166+
if err := scaled.Label(); err != nil {
167+
return nil, err
168+
}
169+
170+
return scaled.List()
171+
}
172+
156173
func needsLabel(instances []instance.Description) bool {
157174
for _, inst := range instances {
158175
if instanceNeedsLabel(inst) {

pkg/plugin/group/scaler.go

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func (s *scaler) PlanUpdate(scaled Scaled, settings groupSettings, newSettings g
3535

3636
sizeChange := int(newSettings.config.Allocation.Size) - int(settings.config.Allocation.Size)
3737

38-
instances, err := scaled.List()
38+
instances, err := labelAndList(s.scaled)
3939
if err != nil {
4040
return nil, err
4141
}
@@ -220,26 +220,12 @@ func (s *scaler) waitIfReachParallelLimit(current int, batch *sync.WaitGroup) {
220220
}
221221

222222
func (s *scaler) converge() {
223-
descriptions, err := s.scaled.List()
223+
descriptions, err := labelAndList(s.scaled)
224224
if err != nil {
225225
log.Errorf("Failed to list group instances: %s", err)
226226
return
227227
}
228228

229-
if needsLabel(descriptions) {
230-
err := s.scaled.Label()
231-
if err != nil {
232-
log.Errorf("Failed to label the group instances: %s", err)
233-
return
234-
}
235-
236-
descriptions, err = s.scaled.List()
237-
if err != nil {
238-
log.Errorf("Failed to list group instances: %s", err)
239-
return
240-
}
241-
}
242-
243229
log.Debugf("Found existing instances: %v", descriptions)
244230

245231
grp := sync.WaitGroup{}

0 commit comments

Comments
 (0)