@@ -413,11 +413,11 @@ get_all_in_mnesia() ->
413
413
end ).
414
414
415
415
get_all_in_khepri () ->
416
- case ets : whereis ( ? KHEPRI_BINDINGS_PROJECTION ) of
417
- undefined ->
418
- [];
419
- Table ->
420
- [B || # route { binding = B } <- ets : tab2list ( Table ) ]
416
+ try
417
+ [ B || # route { binding = B } <- ets : tab2list ( ? KHEPRI_BINDINGS_PROJECTION )]
418
+ catch
419
+ error : badarg ->
420
+ []
421
421
end .
422
422
423
423
-spec get_all (VHostName ) -> [Binding ] when
@@ -444,15 +444,16 @@ get_all_in_mnesia(VHost) ->
444
444
[B || # route {binding = B } <- rabbit_db :list_in_mnesia (? MNESIA_TABLE , Match )].
445
445
446
446
get_all_in_khepri (VHost ) ->
447
- case ets :whereis (? KHEPRI_BINDINGS_PROJECTION ) of
448
- undefined ->
449
- [];
450
- Table ->
451
- VHostResource = rabbit_misc :r (VHost , '_' ),
452
- Match = # route {binding = # binding {source = VHostResource ,
453
- destination = VHostResource ,
454
- _ = '_' }},
455
- [B || # route {binding = B } <- ets :match_object (Table , Match )]
447
+ try
448
+ VHostResource = rabbit_misc :r (VHost , '_' ),
449
+ Match = # route {binding = # binding {source = VHostResource ,
450
+ destination = VHostResource ,
451
+ _ = '_' }},
452
+ [B || # route {binding = B } <- ets :match_object (
453
+ ? KHEPRI_BINDINGS_PROJECTION , Match )]
454
+ catch
455
+ error :badarg ->
456
+ []
456
457
end .
457
458
458
459
-spec get_all (Src , Dst , Reverse ) -> [Binding ] when
@@ -481,14 +482,15 @@ get_all_in_mnesia(SrcName, DstName, Reverse) ->
481
482
mnesia :async_dirty (Fun ).
482
483
483
484
get_all_in_khepri (SrcName , DstName ) ->
484
- case ets :whereis (? KHEPRI_BINDINGS_PROJECTION ) of
485
- undefined ->
486
- [];
487
- Table ->
488
- MatchHead = # route {binding = # binding {source = SrcName ,
489
- destination = DstName ,
490
- _ = '_' }},
491
- [B || # route {binding = B } <- ets :match_object (Table , MatchHead )]
485
+ try
486
+ MatchHead = # route {binding = # binding {source = SrcName ,
487
+ destination = DstName ,
488
+ _ = '_' }},
489
+ [B || # route {binding = B } <- ets :match_object (
490
+ ? KHEPRI_BINDINGS_PROJECTION , MatchHead )]
491
+ catch
492
+ error :badarg ->
493
+ []
492
494
end .
493
495
494
496
% % -------------------------------------------------------------------
@@ -528,12 +530,13 @@ list_for_route(Route, true) ->
528
530
end .
529
531
530
532
get_all_for_source_in_khepri (Resource ) ->
531
- case ets :whereis (? KHEPRI_BINDINGS_PROJECTION ) of
532
- undefined ->
533
- [];
534
- Table ->
535
- Route = # route {binding = # binding {source = Resource , _ = '_' }},
536
- [B || # route {binding = B } <- ets :match_object (Table , Route )]
533
+ try
534
+ Route = # route {binding = # binding {source = Resource , _ = '_' }},
535
+ [B || # route {binding = B } <- ets :match_object (
536
+ ? KHEPRI_BINDINGS_PROJECTION , Route )]
537
+ catch
538
+ error :badarg ->
539
+ []
537
540
end .
538
541
539
542
% % -------------------------------------------------------------------
@@ -563,13 +566,14 @@ get_all_for_destination_in_mnesia(Dst) ->
563
566
mnesia :async_dirty (Fun ).
564
567
565
568
get_all_for_destination_in_khepri (Destination ) ->
566
- case ets :whereis (? KHEPRI_BINDINGS_PROJECTION ) of
567
- undefined ->
568
- [];
569
- Table ->
570
- Match = # route {binding = # binding {destination = Destination ,
571
- _ = '_' }},
572
- [B || # route {binding = B } <- ets :match_object (Table , Match )]
569
+ try
570
+ Match = # route {binding = # binding {destination = Destination ,
571
+ _ = '_' }},
572
+ [B || # route {binding = B } <- ets :match_object (
573
+ ? KHEPRI_BINDINGS_PROJECTION , Match )]
574
+ catch
575
+ error :badarg ->
576
+ []
573
577
end .
574
578
575
579
% % -------------------------------------------------------------------
@@ -644,15 +648,16 @@ match_in_mnesia(SrcName, Match) ->
644
648
Routes , Match (Binding )].
645
649
646
650
match_in_khepri (SrcName , Match ) ->
647
- case ets :whereis (? KHEPRI_BINDINGS_PROJECTION ) of
648
- undefined ->
649
- [];
650
- Table ->
651
- MatchHead = # route {binding = # binding {source = SrcName ,
652
- _ = '_' }},
653
- Routes = ets :select (Table , [{MatchHead , [], [['$_' ]]}]),
654
- [Dest || [# route {binding = Binding = # binding {destination = Dest }}] <-
655
- Routes , Match (Binding )]
651
+ try
652
+ MatchHead = # route {binding = # binding {source = SrcName ,
653
+ _ = '_' }},
654
+ Routes = ets :select (
655
+ ? KHEPRI_BINDINGS_PROJECTION , [{MatchHead , [], [['$_' ]]}]),
656
+ [Dest || [# route {binding = Binding = # binding {destination = Dest }}] <-
657
+ Routes , Match (Binding )]
658
+ catch
659
+ error :badarg ->
660
+ []
656
661
end .
657
662
658
663
% % Routing - HOT CODE PATH
@@ -686,26 +691,22 @@ match_routing_key_in_mnesia(SrcName, RoutingKeys, UseIndex) ->
686
691
route_in_mnesia_v1 (SrcName , RoutingKeys )
687
692
end .
688
693
694
+ match_routing_key_in_khepri (Src , ['_' ]) ->
695
+ try
696
+ MatchHead = # index_route {source_key = {Src , '_' },
697
+ destination = '$1' ,
698
+ _ = '_' },
699
+ ets :select (? KHEPRI_INDEX_ROUTE_PROJECTION , [{MatchHead , [], ['$1' ]}])
700
+ catch
701
+ error :badarg ->
702
+ []
703
+ end ;
689
704
match_routing_key_in_khepri (Src , RoutingKeys ) ->
690
- case ets :whereis (? KHEPRI_INDEX_ROUTE_PROJECTION ) of
691
- undefined ->
692
- [];
693
- Table ->
694
- do_match_routing_key_in_khepri (Table , Src , RoutingKeys )
695
- end .
696
-
697
- do_match_routing_key_in_khepri (Table , Src , ['_' ]) ->
698
- MatchHead = # index_route {source_key = {Src , '_' },
699
- destination = '$1' ,
700
- _ = '_' },
701
- ets :select (Table , [{MatchHead , [], ['$1' ]}]);
702
-
703
- do_match_routing_key_in_khepri (Table , Src , RoutingKeys ) ->
704
705
lists :foldl (
705
706
fun (RK , Acc ) ->
706
707
try
707
708
Dst = ets :lookup_element (
708
- Table ,
709
+ ? KHEPRI_INDEX_ROUTE_PROJECTION ,
709
710
{Src , RK },
710
711
# index_route .destination ),
711
712
Dst ++ Acc
0 commit comments