Skip to content

Commit 08a4bae

Browse files
wait until all change workers have finished
1 parent 83f72a3 commit 08a4bae

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

internal/stackitprovider/apply_changes.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package stackitprovider
33
import (
44
"context"
55
"fmt"
6+
"sync"
67

78
stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns"
89
"go.uber.org/zap"
@@ -53,25 +54,32 @@ func (d *StackitDNSProvider) handleRRSetWithWorkers(
5354
zones []stackitdnsclient.Zone,
5455
) error {
5556
workerChannel := make(chan changeTask, len(tasks))
56-
defer close(workerChannel)
5757
errorChannel := make(chan error, len(tasks))
5858

59+
var wg sync.WaitGroup
5960
for i := 0; i < d.workers; i++ {
60-
go d.changeWorker(ctx, workerChannel, errorChannel, zones)
61+
wg.Add(1)
62+
go d.changeWorker(ctx, workerChannel, errorChannel, zones, &wg)
6163
}
6264

6365
for _, task := range tasks {
6466
workerChannel <- task
6567
}
68+
close(workerChannel)
6669

70+
// capture first error
71+
var err error
6772
for i := 0; i < len(tasks); i++ {
68-
err := <-errorChannel
73+
err = <-errorChannel
6974
if err != nil {
70-
return err
75+
break
7176
}
7277
}
7378

74-
return nil
79+
// wait until all workers have finished
80+
wg.Wait()
81+
82+
return err
7583
}
7684

7785
// changeWorker is a worker that handles changes passed by a channel.
@@ -80,7 +88,10 @@ func (d *StackitDNSProvider) changeWorker(
8088
changes chan changeTask,
8189
errorChannel chan error,
8290
zones []stackitdnsclient.Zone,
91+
wg *sync.WaitGroup,
8392
) {
93+
defer wg.Done()
94+
8495
for change := range changes {
8596
var err error
8697
switch change.action {

0 commit comments

Comments
 (0)