@@ -3,7 +3,6 @@ package stackitprovider
3
3
import (
4
4
"context"
5
5
"fmt"
6
- "sync"
7
6
8
7
stackitdnsclient "github.com/stackitcloud/stackit-dns-api-client-go"
9
8
"go.uber.org/zap"
@@ -49,9 +48,7 @@ func (d *StackitDNSProvider) createRRSets(
49
48
return err
50
49
}
51
50
52
- d .handleRRSetWithWorkers (ctx , endpoints , zones , CREATE )
53
-
54
- return nil
51
+ return d .handleRRSetWithWorkers (ctx , endpoints , zones , CREATE )
55
52
}
56
53
57
54
// createRRSet creates a new record set in the stackitprovider for the given endpoint.
@@ -112,9 +109,7 @@ func (d *StackitDNSProvider) updateRRSets(
112
109
return err
113
110
}
114
111
115
- d .handleRRSetWithWorkers (ctx , endpoints , zones , UPDATE )
116
-
117
- return nil
112
+ return d .handleRRSetWithWorkers (ctx , endpoints , zones , UPDATE )
118
113
}
119
114
120
115
// updateRRSet patches (overrides) contents in the record set in the stackitprovider.
@@ -127,7 +122,7 @@ func (d *StackitDNSProvider) updateRRSet(
127
122
128
123
resultZone , resultRRSet , err := d .rrSetFetcherClient .getRRSetForUpdateDeletion (ctx , change , zones )
129
124
if err != nil {
130
- return fmt . Errorf ( "no matching zone found for %s" , change . DNSName )
125
+ return err
131
126
}
132
127
133
128
logFields := getLogFields (change , UPDATE , resultRRSet .Id )
@@ -179,9 +174,7 @@ func (d *StackitDNSProvider) deleteRRSets(
179
174
return err
180
175
}
181
176
182
- d .handleRRSetWithWorkers (ctx , endpoints , zones , DELETE )
183
-
184
- return nil
177
+ return d .handleRRSetWithWorkers (ctx , endpoints , zones , DELETE )
185
178
}
186
179
187
180
// deleteRRSet deletes a record set in the stackitprovider for the given endpoint.
@@ -194,7 +187,7 @@ func (d *StackitDNSProvider) deleteRRSet(
194
187
195
188
resultZone , resultRRSet , err := d .rrSetFetcherClient .getRRSetForUpdateDeletion (ctx , change , zones )
196
189
if err != nil {
197
- return fmt . Errorf ( "no matching zone found for %s" , change . DNSName )
190
+ return err
198
191
}
199
192
200
193
logFields := getLogFields (change , DELETE , resultRRSet .Id )
@@ -230,14 +223,12 @@ func (d *StackitDNSProvider) handleRRSetWithWorkers(
230
223
endpoints []* endpoint.Endpoint ,
231
224
zones []stackitdnsclient.DomainZone ,
232
225
action string ,
233
- ) {
226
+ ) error {
234
227
workerChannel := make (chan changeTask , len (endpoints ))
235
- wg := new (sync. WaitGroup )
228
+ errorChannel := make ( chan error , len ( endpoints ) )
236
229
237
- // create workers
238
230
for i := 0 ; i < d .workers ; i ++ {
239
- wg .Add (1 )
240
- go d .changeWorker (ctx , wg , workerChannel , zones )
231
+ go d .changeWorker (ctx , workerChannel , errorChannel , zones )
241
232
}
242
233
243
234
for _ , change := range endpoints {
@@ -247,27 +238,38 @@ func (d *StackitDNSProvider) handleRRSetWithWorkers(
247
238
}
248
239
}
249
240
241
+ for i := 0 ; i < len (endpoints ); i ++ {
242
+ err := <- errorChannel
243
+ if err != nil {
244
+ close (workerChannel )
245
+
246
+ return err
247
+ }
248
+ }
249
+
250
250
close (workerChannel )
251
- wg .Wait ()
251
+
252
+ return nil
252
253
}
253
254
254
255
// changeWorker is a worker that handles changes passed by a channel.
255
256
func (d * StackitDNSProvider ) changeWorker (
256
257
ctx context.Context ,
257
- wg * sync.WaitGroup ,
258
258
changes chan changeTask ,
259
+ errorChannel chan error ,
259
260
zones []stackitdnsclient.DomainZone ,
260
261
) {
261
- defer wg .Done ()
262
-
263
262
for change := range changes {
264
263
switch change .action {
265
264
case CREATE :
266
- _ = d .createRRSet (ctx , change .change , zones )
265
+ err := d .createRRSet (ctx , change .change , zones )
266
+ errorChannel <- err
267
267
case UPDATE :
268
- _ = d .updateRRSet (ctx , change .change , zones )
268
+ err := d .updateRRSet (ctx , change .change , zones )
269
+ errorChannel <- err
269
270
case DELETE :
270
- _ = d .deleteRRSet (ctx , change .change , zones )
271
+ err := d .deleteRRSet (ctx , change .change , zones )
272
+ errorChannel <- err
271
273
}
272
274
}
273
275
0 commit comments