|
61 | 61 | is_exclusive/1,
|
62 | 62 | is_classic/1,
|
63 | 63 | is_quorum/1,
|
| 64 | + is_internal/1, |
| 65 | + internal_owner/1, |
| 66 | + make_internal/1, |
| 67 | + make_internal/2, |
64 | 68 | pattern_match_all/0,
|
65 | 69 | pattern_match_on_name/1,
|
66 | 70 | pattern_match_on_type/1,
|
|
78 | 82 | -define(is_backwards_compat_classic(T),
|
79 | 83 | (T =:= classic orelse T =:= ?amqqueue_v1_type)).
|
80 | 84 |
|
| 85 | +-type amqqueue_options() :: map() | ets:match_pattern(). |
| 86 | + |
81 | 87 | -record(amqqueue, {
|
82 | 88 | %% immutable
|
83 | 89 | name :: rabbit_amqqueue:name() | ets:match_pattern(),
|
|
108 | 114 | slave_pids_pending_shutdown = [], %% reserved
|
109 | 115 | %% secondary index
|
110 | 116 | vhost :: rabbit_types:vhost() | undefined | ets:match_pattern(),
|
111 |
| - options = #{} :: map() | ets:match_pattern(), |
| 117 | + options = #{} :: amqqueue_options(), |
112 | 118 | type = ?amqqueue_v1_type :: module() | ets:match_pattern(),
|
113 | 119 | type_state = #{} :: map() | ets:match_pattern()
|
114 | 120 | }).
|
@@ -351,6 +357,19 @@ get_arguments(#amqqueue{arguments = Args}) ->
|
351 | 357 | set_arguments(#amqqueue{} = Queue, Args) ->
|
352 | 358 | Queue#amqqueue{arguments = Args}.
|
353 | 359 |
|
| 360 | +% options |
| 361 | + |
| 362 | +-spec get_options(amqqueue()) -> amqqueue_options(). |
| 363 | + |
| 364 | +get_options(#amqqueue{options = Options}) -> |
| 365 | + Options. |
| 366 | + |
| 367 | +-spec set_options(amqqueue(), amqqueue_options()) -> amqqueue(). |
| 368 | + |
| 369 | +set_options(#amqqueue{} = Queue, Options) -> |
| 370 | + Queue#amqqueue{options = Options}. |
| 371 | + |
| 372 | + |
354 | 373 | % decorators
|
355 | 374 |
|
356 | 375 | -spec get_decorators(amqqueue()) -> [atom()] | none | undefined.
|
@@ -395,15 +414,6 @@ get_name(#amqqueue{name = Name}) -> Name.
|
395 | 414 | set_name(#amqqueue{} = Queue, Name) ->
|
396 | 415 | Queue#amqqueue{name = Name}.
|
397 | 416 |
|
398 |
| --spec get_options(amqqueue()) -> map(). |
399 |
| - |
400 |
| -get_options(#amqqueue{options = Options}) -> Options. |
401 |
| - |
402 |
| --spec set_options(amqqueue(), map()) -> amqqueue(). |
403 |
| - |
404 |
| -set_options(#amqqueue{} = Queue, Options) -> |
405 |
| - Queue#amqqueue{options = Options}. |
406 |
| - |
407 | 417 | % pid
|
408 | 418 |
|
409 | 419 | -spec get_pid(amqqueue_v2()) -> pid() | ra_server_id() | none.
|
@@ -497,6 +507,27 @@ is_classic(Queue) ->
|
497 | 507 | is_quorum(Queue) ->
|
498 | 508 | get_type(Queue) =:= rabbit_quorum_queue.
|
499 | 509 |
|
| 510 | +-spec is_internal(amqqueue()) -> boolean(). |
| 511 | + |
| 512 | +is_internal(#amqqueue{options = #{internal := true}}) -> true; |
| 513 | +is_internal(#amqqueue{}) -> false. |
| 514 | + |
| 515 | +-spec internal_owner(amqqueue()) -> #resource{}. |
| 516 | + |
| 517 | +internal_owner(#amqqueue{options = #{internal := true, |
| 518 | + internal_owner := IOwner}}) -> |
| 519 | + IOwner; |
| 520 | +internal_owner(#amqqueue{}) -> |
| 521 | + undefined. |
| 522 | + |
| 523 | +make_internal(Q = #amqqueue{options = Options}) when is_map(Options) -> |
| 524 | + Q#amqqueue{options = maps:merge(Options, #{internal => true, |
| 525 | + internal_owner => undefined})}. |
| 526 | +make_internal(Q = #amqqueue{options = Options}, Owner) |
| 527 | + when is_map(Options) andalso is_record(Owner, resource) -> |
| 528 | + Q#amqqueue{options = maps:merge(Options, #{internal => true, |
| 529 | + interna_owner => Owner})}. |
| 530 | + |
500 | 531 | fields() ->
|
501 | 532 | fields(?record_version).
|
502 | 533 |
|
|
0 commit comments