|
33 | 33 |
|
34 | 34 | -export([new/0, |
35 | 35 | insert/5, |
36 | | - confirm_msg_ref/4, |
37 | 36 | confirm_multiple_msg_ref/4, |
38 | 37 | forget_ref/2, |
39 | 38 |
|
@@ -112,27 +111,22 @@ insert(MsgId, QueueNames, QueueRefs, XName, |
112 | 111 | error({message_already_exists, MsgId, QueueNames, QueueRefs, XName, UC}) |
113 | 112 | end. |
114 | 113 |
|
115 | | -%% Confirms a message on behalf of the given queue. If it was the last queue (ref) |
116 | | -%% on the waiting list, returns 'confirmed' and performs the necessary cleanup. |
117 | | --spec confirm_msg_ref(msg_id(), queue_name(), queue_ref(), ?MODULE()) -> |
118 | | - {{confirmed | rejected, {msg_id(), exchange_name()}} | not_confirmed, ?MODULE()}. |
119 | | -confirm_msg_ref(MsgId, QueueName, QueueRef, |
120 | | - #unconfirmed{reverse = Reverse} = UC) -> |
121 | | - remove_msg_ref(confirm, MsgId, QueueName, QueueRef, |
122 | | - UC#unconfirmed{reverse = remove_from_reverse(QueueRef, [MsgId], Reverse)}). |
123 | | - |
| 114 | +%% Confirms messages on behalf of the given queue. If it was the last queue (ref) |
| 115 | +%% on the waiting list, returns message id and excahnge name |
| 116 | +%% and performs the necessary cleanup. |
124 | 117 | -spec confirm_multiple_msg_ref(msg_id(), queue_name(), queue_ref(), ?MODULE()) -> |
125 | | - {{confirmed | rejected, {msg_id(), exchange_name()}} | not_confirmed, ?MODULE()}. |
| 118 | + {[{msg_id(), exchange_name()}], [{msg_id(), exchange_name()}], ?MODULE()}. |
126 | 119 | confirm_multiple_msg_ref(MsgIds, QueueName, QueueRef, |
127 | 120 | #unconfirmed{reverse = Reverse} = UC0) -> |
128 | 121 | lists:foldl( |
129 | | - fun(MsgId, {C, UC}) -> |
| 122 | + fun(MsgId, {C, R, UC}) -> |
130 | 123 | case remove_msg_ref(confirm, MsgId, QueueName, QueueRef, UC) of |
131 | | - {{confirmed, V}, UC1} -> {[V | C], UC1}; |
132 | | - {not_confirmed, UC1} -> {C, UC1} |
| 124 | + {{confirmed, V}, UC1} -> {[V | C], R, UC1}; |
| 125 | + {{rejected, V}, UC1} -> {C, [V | R], UC1}; |
| 126 | + {not_confirmed, UC1} -> {C, R, UC1} |
133 | 127 | end |
134 | 128 | end, |
135 | | - {[], UC0#unconfirmed{reverse = remove_from_reverse(QueueRef, MsgIds, Reverse)}}, |
| 129 | + {[], [], UC0#unconfirmed{reverse = remove_from_reverse(QueueRef, MsgIds, Reverse)}}, |
136 | 130 | MsgIds). |
137 | 131 |
|
138 | 132 | %% Removes all messages for a queue. |
@@ -179,14 +173,15 @@ reject_msg(MsgId, #unconfirmed{ordered = Ordered, index = Index, reverse = Rever |
179 | 173 | {Rejected :: [{msg_id(), exchange_name()}], ?MODULE()}. |
180 | 174 | reject_all_for_queue(QueueRef, #unconfirmed{reverse = Reverse0} = UC0) -> |
181 | 175 | MsgIds = maps:keys(maps:get(QueueRef, Reverse0, #{})), |
182 | | - lists:foldl(fun(MsgId, {R, UC}) -> |
183 | | - case reject_msg(MsgId, UC) of |
184 | | - {not_confirmed, UC1} -> {R, UC1}; |
185 | | - {{rejected, V}, UC1} -> {[V | R], UC1} |
186 | | - end |
187 | | - end, |
188 | | - {[], UC0#unconfirmed{reverse = maps:remove(QueueRef, Reverse0)}}, |
189 | | - MsgIds). |
| 176 | + lists:foldl( |
| 177 | + fun(MsgId, {R, UC}) -> |
| 178 | + case reject_msg(MsgId, UC) of |
| 179 | + {not_confirmed, UC1} -> {R, UC1}; |
| 180 | + {{rejected, V}, UC1} -> {[V | R], UC1} |
| 181 | + end |
| 182 | + end, |
| 183 | + {[], UC0#unconfirmed{reverse = maps:remove(QueueRef, Reverse0)}}, |
| 184 | + MsgIds). |
190 | 185 |
|
191 | 186 | %% Returns a smallest message id. |
192 | 187 | -spec smallest(?MODULE()) -> msg_id(). |
|
0 commit comments