@@ -501,59 +501,67 @@ modified_quorum_queue(Config) ->
501
501
ok = amqp10_client :send_msg (Sender , Msg2 ),
502
502
ok = amqp10_client :detach_link (Sender ),
503
503
504
- {ok , Receiver } = amqp10_client :attach_receiver_link (Session , <<" receiver" >>, Address , unsettled ),
504
+ Receiver1Name = <<" receiver 1" >>,
505
+ Receiver2Name = <<" receiver 2" >>,
506
+ {ok , Receiver1 } = amqp10_client :attach_receiver_link (Session , Receiver1Name , Address , unsettled ),
507
+ {ok , Receiver2 } = amqp10_client :attach_receiver_link (Session , Receiver2Name , Address , unsettled ),
505
508
506
- {ok , M1 } = amqp10_client :get_msg (Receiver ),
509
+ {ok , M1 } = amqp10_client :get_msg (Receiver1 ),
507
510
? assertEqual ([<<" m1" >>], amqp10_msg :body (M1 )),
508
511
? assertMatch (#{delivery_count := 0 ,
509
512
first_acquirer := true },
510
513
amqp10_msg :headers (M1 )),
511
- ok = amqp10_client :settle_msg (Receiver , M1 , {modified , false , true , #{}}),
514
+ ok = amqp10_client :settle_msg (Receiver1 , M1 , {modified , false , true , #{}}),
512
515
513
- {ok , M2a } = amqp10_client :get_msg (Receiver ),
516
+ {ok , M2a } = amqp10_client :get_msg (Receiver1 ),
514
517
? assertEqual ([<<" m2" >>], amqp10_msg :body (M2a )),
515
518
? assertMatch (#{delivery_count := 0 ,
516
519
first_acquirer := true },
517
520
amqp10_msg :headers (M2a )),
518
- ok = amqp10_client :settle_msg (Receiver , M2a , {modified , false , false , #{}}),
521
+ ok = amqp10_client :settle_msg (Receiver1 , M2a , {modified , false , false , #{}}),
519
522
520
- {ok , M2b } = amqp10_client :get_msg (Receiver ),
523
+ {ok , M2b } = amqp10_client :get_msg (Receiver1 ),
521
524
? assertEqual ([<<" m2" >>], amqp10_msg :body (M2b )),
522
525
? assertMatch (#{delivery_count := 0 ,
523
526
first_acquirer := false },
524
527
amqp10_msg :headers (M2b )),
525
- ok = amqp10_client :settle_msg (Receiver , M2b , {modified , true , false , #{}}),
528
+ ok = amqp10_client :settle_msg (Receiver1 , M2b , {modified , true , false , #{}}),
526
529
527
- {ok , M2c } = amqp10_client :get_msg (Receiver ),
530
+ {ok , M2c } = amqp10_client :get_msg (Receiver1 ),
528
531
? assertEqual ([<<" m2" >>], amqp10_msg :body (M2c )),
529
532
? assertMatch (#{delivery_count := 1 ,
530
533
first_acquirer := false },
531
534
amqp10_msg :headers (M2c )),
532
- ok = amqp10_client :settle_msg (Receiver , M2c ,
533
- {modified , true , false ,
534
- #{<<" x-opt-key" >> => <<" val 1" >>}}),
535
-
536
- {ok , M2d } = amqp10_client :get_msg (Receiver ),
535
+ ok = amqp10_client :settle_msg (
536
+ Receiver1 , M2c ,
537
+ {modified , true , false ,
538
+ % % Test that a history of requeue events can be tracked as described in
539
+ % % https://rabbitmq.com/blog/2024/10/11/modified-outcome
540
+ #{<<" x-opt-requeued-by" >> => {array , utf8 , [{utf8 , Receiver1Name }]}}
541
+ }),
542
+
543
+ {ok , M2d } = amqp10_client :get_msg (Receiver2 ),
537
544
? assertEqual ([<<" m2" >>], amqp10_msg :body (M2d )),
538
545
? assertMatch (#{delivery_count := 2 ,
539
546
first_acquirer := false },
540
547
amqp10_msg :headers (M2d )),
541
- ? assertMatch (#{<<" x-opt-key" >> := <<" val 1" >>}, amqp10_msg :message_annotations (M2d )),
542
- ok = amqp10_client :settle_msg (Receiver , M2d ,
543
- {modified , false , false ,
544
- #{<<" x-opt-key" >> => <<" val 2" >>,
545
- <<" x-other" >> => 99 }}),
546
-
547
- {ok , M2e } = amqp10_client :get_msg (Receiver ),
548
+ #{<<" x-opt-requeued-by" >> := {array , utf8 , L }} = amqp10_msg :message_annotations (M2d ),
549
+ ok = amqp10_client :settle_msg (
550
+ Receiver1 , M2d ,
551
+ {modified , false , false ,
552
+ #{<<" x-opt-requeued-by" >> => {array , utf8 , [{utf8 , Receiver2Name } | L ]},
553
+ <<" x-other" >> => 99 }}),
554
+
555
+ {ok , M2e } = amqp10_client :get_msg (Receiver1 ),
548
556
? assertEqual ([<<" m2" >>], amqp10_msg :body (M2e )),
549
557
? assertMatch (#{delivery_count := 2 ,
550
558
first_acquirer := false },
551
559
amqp10_msg :headers (M2e )),
552
- ? assertMatch (#{<<" x-opt-key " >> := << " val 2 " >> ,
560
+ ? assertMatch (#{<<" x-opt-requeued-by " >> := { array , utf8 , [{ utf8 , Receiver2Name }, { utf8 , Receiver1Name }]} ,
553
561
<<" x-other" >> := 99 }, amqp10_msg :message_annotations (M2e )),
554
- ok = amqp10_client :settle_msg (Receiver , M2e , modified ),
562
+ ok = amqp10_client :settle_msg (Receiver1 , M2e , modified ),
555
563
556
- ok = amqp10_client :detach_link (Receiver ),
564
+ ok = amqp10_client :detach_link (Receiver1 ),
557
565
? assertMatch ({ok , #{message_count := 1 }},
558
566
rabbitmq_amqp_client :delete_queue (LinkPair , QName )),
559
567
ok = rabbitmq_amqp_client :detach_management_link_pair_sync (LinkPair ),
0 commit comments