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