@@ -36,8 +36,8 @@ module Outbox
36
36
end
37
37
38
38
specify "push the jobs to sidekiq" do
39
- record = create_record ( "default" , "default" )
40
39
clock = TickingClock . new
40
+ record = create_record ( "default" , "default" , clock : clock )
41
41
consumer =
42
42
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : null_metrics )
43
43
result = consumer . process
@@ -53,10 +53,10 @@ module Outbox
53
53
end
54
54
55
55
specify "push multiple jobs to different queues" do
56
- create_record ( "default" , "default" )
57
- create_record ( "default" , "default" )
58
- create_record ( "default2" , "default2" )
59
56
clock = TickingClock . new
57
+ create_record ( "default" , "default" , clock : clock )
58
+ create_record ( "default" , "default" , clock : clock )
59
+ create_record ( "default2" , "default2" , clock : clock )
60
60
consumer =
61
61
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : null_metrics )
62
62
@@ -87,9 +87,9 @@ module Outbox
87
87
end
88
88
89
89
specify "returns false if didnt aquire lock" do
90
- create_record ( "default" , "default" )
91
- consumer = Consumer . new ( SecureRandom . uuid , default_configuration , logger : logger , metrics : null_metrics )
92
90
clock = TickingClock . new
91
+ create_record ( "default" , "default" , clock : clock )
92
+ consumer = Consumer . new ( SecureRandom . uuid , default_configuration , logger : logger , metrics : null_metrics )
93
93
Repositories ::Mysql57 ::Lock . obtain (
94
94
FetchSpecification . new ( SIDEKIQ5_FORMAT , "default" ) ,
95
95
"some-other-process-uuid" ,
@@ -168,10 +168,10 @@ module Outbox
168
168
end
169
169
170
170
specify "incorrect payload wont cause later messages to schedule" do
171
- record1 = create_record ( "default" , "default" )
172
- record1 . update! ( payload : "unparsable garbage" )
173
- record2 = create_record ( "default" , "default" )
174
171
clock = TickingClock . new
172
+ record1 = create_record ( "default" , "default" , clock : clock )
173
+ record1 . update! ( payload : "unparsable garbage" )
174
+ record2 = create_record ( "default" , "default" , clock : clock )
175
175
consumer =
176
176
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : null_metrics )
177
177
@@ -245,15 +245,15 @@ module Outbox
245
245
end
246
246
247
247
specify "deadlock when releasing lock doesnt do anything" do
248
- create_record ( "default" , "default" )
248
+ clock = TickingClock . new
249
+ create_record ( "default" , "default" , clock : clock )
249
250
allow ( Repositories ::Mysql57 ::Lock ) . to receive ( :lock ) . and_wrap_original do |m , *args |
250
251
if caller . any? { |l | l . include? "`release'" }
251
252
raise ::ActiveRecord ::Deadlocked
252
253
else
253
254
m . call ( *args )
254
255
end
255
256
end
256
- clock = TickingClock . new
257
257
consumer =
258
258
Consumer . new (
259
259
SecureRandom . uuid ,
@@ -272,7 +272,6 @@ module Outbox
272
272
end
273
273
274
274
specify "lock timeout when releasing lock doesnt do anything" do
275
- create_record ( "default" , "default" )
276
275
allow ( Repositories ::Mysql57 ::Lock ) . to receive ( :lock ) . and_wrap_original do |m , *args |
277
276
if caller . any? { |l | l . include? "`release'" }
278
277
raise ::ActiveRecord ::LockWaitTimeout
@@ -281,6 +280,7 @@ module Outbox
281
280
end
282
281
end
283
282
clock = TickingClock . new
283
+ create_record ( "default" , "default" , clock : clock )
284
284
consumer =
285
285
Consumer . new (
286
286
SecureRandom . uuid ,
@@ -299,8 +299,8 @@ module Outbox
299
299
end
300
300
301
301
specify "after successful loop, lock is released" do
302
- create_record ( "default" , "default" )
303
302
clock = TickingClock . new
303
+ create_record ( "default" , "default" , clock : clock )
304
304
consumer =
305
305
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : null_metrics )
306
306
@@ -312,8 +312,8 @@ module Outbox
312
312
end
313
313
314
314
specify "lock disappearing in the meantime, doesnt do anything" do
315
- create_record ( "default" , "default" )
316
315
clock = TickingClock . new
316
+ create_record ( "default" , "default" , clock : clock )
317
317
consumer =
318
318
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : test_metrics )
319
319
allow ( consumer ) . to receive ( :release_lock_for_process ) . and_wrap_original do |m , *args |
@@ -332,8 +332,8 @@ module Outbox
332
332
end
333
333
334
334
specify "lock stolen in the meantime, doesnt do anything" do
335
- create_record ( "default" , "default" )
336
335
clock = TickingClock . new
336
+ create_record ( "default" , "default" , clock : clock )
337
337
consumer =
338
338
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : null_metrics )
339
339
allow ( consumer ) . to receive ( :release_lock_for_process ) . and_wrap_original do |m , *args |
@@ -349,12 +349,13 @@ module Outbox
349
349
end
350
350
351
351
specify "old lock can be reobtained" do
352
+ clock = TickingClock . new ( start : 10 . minutes . ago )
352
353
Repositories ::Mysql57 ::Lock . obtain (
353
354
FetchSpecification . new ( SIDEKIQ5_FORMAT , "default" ) ,
354
355
"some-old-uuid" ,
355
- clock : TickingClock . new ( start : 10 . minutes . ago )
356
+ clock : clock
356
357
)
357
- record = create_record ( "default" , "default" )
358
+ record = create_record ( "default" , "default" , clock : clock )
358
359
consumer = Consumer . new ( SecureRandom . uuid , default_configuration , logger : logger , metrics : null_metrics )
359
360
360
361
result = consumer . process
@@ -365,10 +366,11 @@ module Outbox
365
366
end
366
367
367
368
specify "relatively fresh locks are not reobtained" do
369
+ clock = TickingClock . new ( start : 9 . minutes . ago )
368
370
Repositories ::Mysql57 ::Lock . obtain (
369
371
FetchSpecification . new ( SIDEKIQ5_FORMAT , "default" ) ,
370
372
"some-old-uuid" ,
371
- clock : TickingClock . new ( start : 9 . minutes . ago )
373
+ clock : clock
372
374
)
373
375
create_record ( "default" , "default" )
374
376
consumer = Consumer . new ( SecureRandom . uuid , default_configuration , logger : logger , metrics : null_metrics )
@@ -379,8 +381,8 @@ module Outbox
379
381
end
380
382
381
383
specify "when inserting lock, other process may do same concurrently" do
382
- record = create_record ( "default" , "default" )
383
384
clock = TickingClock . new
385
+ record = create_record ( "default" , "default" , clock : clock )
384
386
consumer =
385
387
Consumer . new ( SecureRandom . uuid , default_configuration , clock : clock , logger : logger , metrics : null_metrics )
386
388
allow ( Repositories ::Mysql57 ::Lock ) . to receive ( :create! ) . and_wrap_original do |m , *args |
@@ -464,8 +466,8 @@ module Outbox
464
466
end
465
467
466
468
specify "clean old jobs" do
467
- create_record ( "default" , "default" )
468
469
clock = TickingClock . new
470
+ create_record ( "default" , "default" , clock : clock )
469
471
consumer =
470
472
Consumer . new (
471
473
SecureRandom . uuid ,
@@ -485,8 +487,8 @@ module Outbox
485
487
end
486
488
487
489
specify "clean old jobs with limit" do
488
- 3 . times . map { create_record ( "default" , "default" ) }
489
490
clock = TickingClock . new
491
+ 3 . times . map { create_record ( "default" , "default" , clock : clock ) }
490
492
consumer =
491
493
Consumer . new (
492
494
SecureRandom . uuid ,
@@ -506,8 +508,8 @@ module Outbox
506
508
end
507
509
508
510
specify "clean old jobs - lock timeout" do
509
- create_record ( "default" , "default" )
510
511
clock = TickingClock . new
512
+ create_record ( "default" , "default" , clock : clock )
511
513
consumer =
512
514
Consumer . new (
513
515
SecureRandom . uuid ,
@@ -530,8 +532,8 @@ module Outbox
530
532
end
531
533
532
534
specify "clean old jobs - deadlock" do
533
- create_record ( "default" , "default" )
534
535
clock = TickingClock . new
536
+ create_record ( "default" , "default" , clock : clock )
535
537
consumer =
536
538
Consumer . new (
537
539
SecureRandom . uuid ,
@@ -553,7 +555,7 @@ module Outbox
553
555
expect ( test_metrics . operation_results ) . to include ( { operation : "cleanup" , result : "deadlocked" } )
554
556
end
555
557
556
- def create_record ( queue , split_key , format : "sidekiq5" )
558
+ def create_record ( queue , split_key , format : "sidekiq5" , clock : Time )
557
559
payload = {
558
560
class : "SomeAsyncHandler" ,
559
561
queue : queue ,
@@ -569,7 +571,7 @@ def create_record(queue, split_key, format: "sidekiq5")
569
571
}
570
572
]
571
573
}
572
- Repositories ::Mysql57 . new . insert_record ( format , split_key , payload . to_json )
574
+ Repositories ::Mysql57 . build_for_producer ( clock : clock ) . insert_record ( format , split_key , payload . to_json )
573
575
end
574
576
end
575
577
end
0 commit comments