Skip to content

Commit 8f8170d

Browse files
committed
rabbit_db_user: Use read-only transactions to query user/topic permissions
The parent commit favors low-latency queries for read-only transactions, so marking these read-only transactions as explicitly read-only will cause them to be run against the local node. This ensures that functions like `rabbit_auth_backend_internal:list_permissions/0` do not return `{error, timeout}` when the cluster is in minority, fixing 'bad generator' errors during definitions export (via `rabbit_definitions:all_definitions/0`).
1 parent a3abe3e commit 8f8170d

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

deps/rabbit/src/rabbit_db_user.erl

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -374,14 +374,16 @@ match_user_permissions_in_khepri('_' = _Username, VHostName) ->
374374
VHostName,
375375
fun() ->
376376
match_user_permissions_in_khepri_tx(?KHEPRI_WILDCARD_STAR, VHostName)
377-
end));
377+
end),
378+
ro);
378379
match_user_permissions_in_khepri(Username, '_' = _VHostName) ->
379380
rabbit_khepri:transaction(
380381
with_fun_in_khepri_tx(
381382
Username,
382383
fun() ->
383384
match_user_permissions_in_khepri_tx(Username, ?KHEPRI_WILDCARD_STAR)
384-
end));
385+
end),
386+
ro);
385387
match_user_permissions_in_khepri(Username, VHostName) ->
386388
rabbit_khepri:transaction(
387389
with_fun_in_khepri_tx(
@@ -390,7 +392,8 @@ match_user_permissions_in_khepri(Username, VHostName) ->
390392
VHostName,
391393
fun() ->
392394
match_user_permissions_in_khepri_tx(Username, VHostName)
393-
end))).
395+
end)),
396+
ro).
394397

395398
match_user_permissions_in_khepri_tx(Username, VHostName) ->
396399
Path = khepri_user_permission_path(Username, VHostName),
@@ -739,15 +742,16 @@ match_topic_permissions_in_khepri('_' = _Username, '_' = _VHostName, ExchangeNam
739742
fun() ->
740743
match_topic_permissions_in_khepri_tx(
741744
?KHEPRI_WILDCARD_STAR, ?KHEPRI_WILDCARD_STAR, any(ExchangeName))
742-
end);
745+
end, ro);
743746
match_topic_permissions_in_khepri('_' = _Username, VHostName, ExchangeName) ->
744747
rabbit_khepri:transaction(
745748
rabbit_db_vhost:with_fun_in_khepri_tx(
746749
VHostName,
747750
fun() ->
748751
match_topic_permissions_in_khepri_tx(
749752
?KHEPRI_WILDCARD_STAR, VHostName, any(ExchangeName))
750-
end));
753+
end),
754+
ro);
751755
match_topic_permissions_in_khepri(
752756
Username, '_' = _VHostName, ExchangeName) ->
753757
rabbit_khepri:transaction(
@@ -756,7 +760,8 @@ match_topic_permissions_in_khepri(
756760
fun() ->
757761
match_topic_permissions_in_khepri_tx(
758762
Username, ?KHEPRI_WILDCARD_STAR, any(ExchangeName))
759-
end));
763+
end),
764+
ro);
760765
match_topic_permissions_in_khepri(
761766
Username, VHostName, ExchangeName) ->
762767
rabbit_khepri:transaction(
@@ -767,7 +772,8 @@ match_topic_permissions_in_khepri(
767772
fun() ->
768773
match_topic_permissions_in_khepri_tx(
769774
Username, VHostName, any(ExchangeName))
770-
end))).
775+
end)),
776+
ro).
771777

772778
match_topic_permissions_in_khepri_tx(Username, VHostName, ExchangeName) ->
773779
Path = khepri_topic_permission_path(Username, VHostName, ExchangeName),

0 commit comments

Comments
 (0)