@@ -19,8 +19,7 @@ import (
19
19
"github.com/dapr/go-sdk/client"
20
20
)
21
21
22
- const appPort = ":3006"
23
- const daprGRPCPort = "3501"
22
+ const appPort = ":8383"
24
23
25
24
var oneshot atomic.Int64
26
25
var indefinite atomic.Int64
@@ -121,8 +120,15 @@ func (s *appServer) OnJobEventAlpha1(ctx context.Context, in *rtv1.JobEventReque
121
120
return nil , nil
122
121
}
123
122
124
- func scheduleOneshotJobs (daprClient client.Client ) {
123
+ func scheduleOneshotJobs (ctx context. Context , daprClient client.Client ) {
125
124
for i := 0 ; i < 100 ; i ++ {
125
+ select {
126
+ case <- ctx .Done ():
127
+ log .Println ("context canceled, stopping scheduleOneshotJobs." )
128
+ return
129
+ default :
130
+ }
131
+ jobCtx , cancel := context .WithTimeout (ctx , 5 * time .Second )
126
132
name := "oneshot-job-" + strconv .Itoa (i )
127
133
req := & client.Job {
128
134
Name : name ,
@@ -132,15 +138,23 @@ func scheduleOneshotJobs(daprClient client.Client) {
132
138
TTL : "40s" ,
133
139
Data : nil ,
134
140
}
135
- err := daprClient .ScheduleJobAlpha1 (context .Background (), req )
141
+ err := daprClient .ScheduleJobAlpha1 (jobCtx , req )
142
+ cancel ()
136
143
if err != nil {
137
144
log .Printf ("Error scheduling oneshot job '%s': %s\n " , name , err )
138
145
}
139
146
}
140
147
}
141
148
142
- func scheduleIndefiniteJobs (daprClient client.Client ) {
149
+ func scheduleIndefiniteJobs (ctx context. Context , daprClient client.Client ) {
143
150
for i := 0 ; i < 100 ; i ++ {
151
+ select {
152
+ case <- ctx .Done ():
153
+ log .Println ("context canceled, stopping scheduleOneshotJobs." )
154
+ return
155
+ default :
156
+ }
157
+ jobCtx , cancel := context .WithTimeout (ctx , 5 * time .Second )
144
158
name := "indefinite-job-" + strconv .Itoa (i )
145
159
req := & client.Job {
146
160
Name : name ,
@@ -149,14 +163,15 @@ func scheduleIndefiniteJobs(daprClient client.Client) {
149
163
TTL : "40s" ,
150
164
Data : nil ,
151
165
}
152
- err := daprClient .ScheduleJobAlpha1 (context .Background (), req )
166
+ err := daprClient .ScheduleJobAlpha1 (jobCtx , req )
167
+ cancel ()
153
168
if err != nil {
154
169
log .Printf ("Error scheduling indefinite job '%s': %s\n " , name , err )
155
170
}
156
171
}
157
172
}
158
173
159
- func scheduleRepeatedJob (daprClient client.Client ) {
174
+ func scheduleRepeatedJob (ctx context. Context , daprClient client.Client ) {
160
175
name := "repeat-job"
161
176
req := & client.Job {
162
177
Name : name ,
@@ -166,13 +181,15 @@ func scheduleRepeatedJob(daprClient client.Client) {
166
181
TTL : "10s" ,
167
182
Data : nil ,
168
183
}
169
- err := daprClient .ScheduleJobAlpha1 (context .Background (), req )
184
+ jobCtx , cancel := context .WithTimeout (ctx , 5 * time .Second )
185
+ defer cancel ()
186
+ err := daprClient .ScheduleJobAlpha1 (jobCtx , req )
170
187
if err != nil {
171
188
log .Printf ("Error scheduling repeat job '%s': %s\n " , name , err )
172
189
}
173
190
}
174
191
175
- func scheduleSingleJob (daprClient client.Client ) {
192
+ func scheduleSingleJob (ctx context. Context , daprClient client.Client ) {
176
193
name := "create-delete-job"
177
194
req := & client.Job {
178
195
Name : name ,
@@ -182,15 +199,19 @@ func scheduleSingleJob(daprClient client.Client) {
182
199
TTL : "3s" ,
183
200
Data : nil ,
184
201
}
185
- err := daprClient .ScheduleJobAlpha1 (context .Background (), req )
202
+ jobCtx , cancel := context .WithTimeout (ctx , 5 * time .Second )
203
+ defer cancel ()
204
+ err := daprClient .ScheduleJobAlpha1 (jobCtx , req )
186
205
if err != nil {
187
206
log .Printf ("Error scheduling single job '%s': %s\n " , name , err )
188
207
}
189
208
}
190
209
191
- func deleteSingleJob (daprClient client.Client ) {
210
+ func deleteSingleJob (ctx context. Context , daprClient client.Client ) {
192
211
name := "create-delete-job"
193
- err := daprClient .DeleteJobAlpha1 (context .Background (), name )
212
+ jobCtx , cancel := context .WithTimeout (ctx , 5 * time .Second )
213
+ defer cancel ()
214
+ err := daprClient .DeleteJobAlpha1 (jobCtx , name )
194
215
if err != nil {
195
216
log .Printf ("Error deleting single job '%s': %s\n " , name , err )
196
217
}
@@ -209,8 +230,7 @@ func main() {
209
230
}
210
231
}(ctx )
211
232
212
- // --dapr-grpc-port=3501
213
- daprClient , err := client .NewClientWithPort (daprGRPCPort )
233
+ daprClient , err := client .NewClient ()
214
234
if err != nil {
215
235
log .Fatalf ("Error getting dapr client: %v" , err )
216
236
}
@@ -222,46 +242,54 @@ func main() {
222
242
time .Sleep (5 * time .Second )
223
243
224
244
// Schedule initial batch of jobs
225
- go scheduleOneshotJobs (daprClient )
226
- go scheduleIndefiniteJobs (daprClient )
227
- go scheduleRepeatedJob (daprClient )
245
+ go scheduleOneshotJobs (ctx , daprClient )
246
+ go scheduleIndefiniteJobs (ctx , daprClient )
247
+ go scheduleRepeatedJob (ctx , daprClient )
228
248
229
249
// Schedule additional oneshot jobs once 100 are triggered
230
250
go func (ctx context.Context ) {
231
- select {
232
- case <- ctx .Done ():
233
- return
234
- case <- oneshotDoneCh :
235
- log .Println ("Received input that maxOneshotTriggerCount was reached. Sleeping..." )
236
- time .Sleep (10 * time .Second )
237
- log .Println ("Scheduling next batch of oneshot jobs..." )
238
- go scheduleOneshotJobs (daprClient )
251
+ for {
252
+ select {
253
+ case <- ctx .Done ():
254
+ log .Println ("context canceled, stopping oneshot scheduling goroutine." )
255
+ return
256
+ case <- oneshotDoneCh :
257
+ log .Println ("Received input that maxOneshotTriggerCount was reached. Sleeping..." )
258
+ time .Sleep (10 * time .Second )
259
+ log .Println ("Scheduling next batch of oneshot jobs..." )
260
+ go scheduleOneshotJobs (ctx , daprClient )
261
+ }
239
262
}
240
263
}(ctx )
241
264
242
265
// Schedule additional indefinite jobs once 100 are triggered
243
266
go func (ctx context.Context ) {
244
- select {
245
- case <- ctx .Done ():
246
- return
247
- case <- indefiniteDoneCh :
248
- log .Println ("Received input that maxIndefiniteTriggerCount was reached. Sleeping..." )
249
- time .Sleep (10 * time .Second )
250
- log .Println ("Scheduling next batch of indefinite jobs..." )
251
- go scheduleIndefiniteJobs (daprClient )
267
+ for {
268
+ select {
269
+ case <- ctx .Done ():
270
+ log .Println ("context canceled, stopping indefinite scheduling goroutine." )
271
+ return
272
+ case <- indefiniteDoneCh :
273
+ log .Println ("Received input that maxIndefiniteTriggerCount was reached. Sleeping..." )
274
+ time .Sleep (10 * time .Second )
275
+ log .Println ("Scheduling next batch of indefinite jobs..." )
276
+ go scheduleIndefiniteJobs (ctx , daprClient )
277
+ }
252
278
}
253
279
}(ctx )
254
280
255
- // Schedule job to trigger immediately every second for 1s
281
+ // Schedule job to trigger immediately every second for 1s for 5 times max (repeats)
256
282
go func (ctx context.Context ) {
257
- select {
258
- case <- ctx .Done ():
259
- return
260
- case <- repeatDoneCh :
261
- log .Println ("Received input that maxRepeatTriggerCount was reached. Sleeping..." )
262
- time .Sleep (60 * time .Second )
263
- log .Println ("Scheduling next repeated job..." )
264
- go scheduleRepeatedJob (daprClient )
283
+ for {
284
+ select {
285
+ case <- ctx .Done ():
286
+ return
287
+ case <- repeatDoneCh :
288
+ log .Println ("Received input that maxRepeatTriggerCount was reached. Sleeping..." )
289
+ time .Sleep (60 * time .Second )
290
+ log .Println ("Scheduling next repeated job..." )
291
+ go scheduleRepeatedJob (ctx , daprClient )
292
+ }
265
293
}
266
294
}(ctx )
267
295
@@ -274,13 +302,13 @@ func main() {
274
302
case <- receivedSingleJobDoneCh :
275
303
log .Println ("Received input that the create-delete-job triggered, now deleting the job..." )
276
304
// received triggered job, now delete it & set atomic int to 0
277
- deleteSingleJob (daprClient )
305
+ deleteSingleJob (ctx , daprClient )
278
306
log .Println ("Successfully deleted create-delete-job." )
279
307
}
280
308
}
281
309
}(ctx )
282
310
283
- go scheduleSingleJob (daprClient )
311
+ go scheduleSingleJob (ctx , daprClient )
284
312
285
313
// Reschedule the create-delete job after deletion, ensure triggers once
286
314
go func (ctx context.Context ) {
@@ -292,7 +320,7 @@ func main() {
292
320
log .Println ("Received input that the create-delete-job was deleted. Sleeping for 5 seconds..." )
293
321
time .Sleep (5 * time .Second )
294
322
log .Println ("Scheduling create-delete-job..." )
295
- scheduleSingleJob (daprClient )
323
+ scheduleSingleJob (ctx , daprClient )
296
324
log .Println ("Successfully scheduled create-delete-job." )
297
325
}
298
326
}
0 commit comments