Skip to content

Commit 1aa67be

Browse files
author
Kubernetes Submit Queue
authored
Merge pull request kubernetes#62829 from MrHohn/e2e-inrgess-scale-race
Automatic merge from submit-queue (batch tested with PRs 62495, 63003, 62829, 62151, 62002). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. [e2e ingress-gce] Fix race condition for appending services and ingresses **What this PR does / why we need it**: From kubernetes/ingress-gce#219, how the test appends services and ingresses is not thread-safe. This PR fixes it by using channel. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #kubernetes/ingress-gce#219 **Special notes for your reviewer**: /assign @nicksardo I picked this up as it is fun :) Hoping you haven't worked on it yet. **Release note**: ```release-note NONE ```
2 parents b0fb272 + 9a5ce37 commit 1aa67be

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

test/e2e/network/scale/ingress.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -179,25 +179,27 @@ func (f *IngressScaleFramework) RunScaleTest() []error {
179179
}
180180
}
181181

182-
// currentNum keeps track of how many ingresses have been created.
183-
currentNum := new(int)
182+
// numIngsCreated keeps track of how many ingresses have been created.
183+
numIngsCreated := 0
184184

185-
prepareIngsFunc := func(goalNum int) {
185+
prepareIngsFunc := func(numIngsNeeded int) {
186186
var ingWg sync.WaitGroup
187-
numToCreate := goalNum - *currentNum
188-
ingWg.Add(numToCreate)
189-
errQueue := make(chan error, numToCreate)
190-
latencyQueue := make(chan time.Duration, numToCreate)
187+
numIngsToCreate := numIngsNeeded - numIngsCreated
188+
ingWg.Add(numIngsToCreate)
189+
svcQueue := make(chan *v1.Service, numIngsToCreate)
190+
ingQueue := make(chan *extensions.Ingress, numIngsToCreate)
191+
errQueue := make(chan error, numIngsToCreate)
192+
latencyQueue := make(chan time.Duration, numIngsToCreate)
191193
start := time.Now()
192-
for ; *currentNum < goalNum; *currentNum++ {
193-
suffix := fmt.Sprintf("%d", *currentNum)
194+
for ; numIngsCreated < numIngsNeeded; numIngsCreated++ {
195+
suffix := fmt.Sprintf("%d", numIngsCreated)
194196
go func() {
195197
defer ingWg.Done()
196198

197199
start := time.Now()
198200
svcCreated, ingCreated, err := f.createScaleTestServiceIngress(suffix, f.EnableTLS)
199-
f.ScaleTestSvcs = append(f.ScaleTestSvcs, svcCreated)
200-
f.ScaleTestIngs = append(f.ScaleTestIngs, ingCreated)
201+
svcQueue <- svcCreated
202+
ingQueue <- ingCreated
201203
if err != nil {
202204
errQueue <- err
203205
return
@@ -214,11 +216,19 @@ func (f *IngressScaleFramework) RunScaleTest() []error {
214216
}
215217

216218
// Wait until all ingress creations are complete.
217-
f.Logger.Infof("Waiting for %d ingresses to come up...", numToCreate)
219+
f.Logger.Infof("Waiting for %d ingresses to come up...", numIngsToCreate)
218220
ingWg.Wait()
221+
close(svcQueue)
222+
close(ingQueue)
219223
close(errQueue)
220224
close(latencyQueue)
221225
elapsed := time.Since(start)
226+
for svc := range svcQueue {
227+
f.ScaleTestSvcs = append(f.ScaleTestSvcs, svc)
228+
}
229+
for ing := range ingQueue {
230+
f.ScaleTestIngs = append(f.ScaleTestIngs, ing)
231+
}
222232
var createLatencies []time.Duration
223233
for latency := range latencyQueue {
224234
createLatencies = append(createLatencies, latency)
@@ -231,15 +241,15 @@ func (f *IngressScaleFramework) RunScaleTest() []error {
231241
}
232242
return
233243
}
234-
f.Logger.Infof("Spent %s for %d ingresses to come up", elapsed, numToCreate)
244+
f.Logger.Infof("Spent %s for %d ingresses to come up", elapsed, numIngsToCreate)
235245
f.BatchDurations = append(f.BatchDurations, elapsed)
236246
}
237247

238248
measureCreateUpdateFunc := func() {
239249
f.Logger.Infof("Create one more ingress and wait for it to come up")
240250
start := time.Now()
241-
svcCreated, ingCreated, err := f.createScaleTestServiceIngress(fmt.Sprintf("%d", *currentNum), f.EnableTLS)
242-
*currentNum = *currentNum + 1
251+
svcCreated, ingCreated, err := f.createScaleTestServiceIngress(fmt.Sprintf("%d", numIngsCreated), f.EnableTLS)
252+
numIngsCreated = numIngsCreated + 1
243253
f.ScaleTestSvcs = append(f.ScaleTestSvcs, svcCreated)
244254
f.ScaleTestIngs = append(f.ScaleTestIngs, ingCreated)
245255
if err != nil {

0 commit comments

Comments
 (0)