diff options
author | Michael Klishin <klishinm@vmware.com> | 2021-12-01 17:00:58 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-01 17:00:58 +0300 |
commit | b5aecbd3e5469fee99e097d80ebb8e59ec00fd41 (patch) | |
tree | b65a889219bf59b0ab4d209f65e3c4bb505463a1 | |
parent | 3be3569fd705b9f032698f27eb114c0ad6912e42 (diff) | |
parent | f10e9c3d0e3f8a8a88adce6f98a28374380143c9 (diff) | |
download | rabbitmq-server-git-b5aecbd3e5469fee99e097d80ebb8e59ec00fd41.tar.gz |
Merge pull request #3804 from rabbitmq/qq-clean-properties-before-storage
QQ: remove decoded properties before storing messages
-rw-r--r-- | deps/rabbit/src/rabbit_quorum_queue.erl | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl index 62a08c5113..a4c6d5dd5f 100644 --- a/deps/rabbit/src/rabbit_quorum_queue.erl +++ b/deps/rabbit/src/rabbit_quorum_queue.erl @@ -839,7 +839,8 @@ deliver(true, Delivery, QState0) -> rabbit_fifo_client:enqueue(Delivery#delivery.msg_seq_no, Delivery#delivery.message, QState0). -deliver(QSs, #delivery{confirm = Confirm} = Delivery) -> +deliver(QSs, #delivery{confirm = Confirm} = Delivery0) -> + Delivery = clean_delivery(Delivery0), lists:foldl( fun({Q, stateless}, {Qs, Actions}) -> QRef = amqqueue:get_pid(Q), @@ -1623,3 +1624,21 @@ notify_decorators(QName, F, A) -> {error, not_found} -> ok end. + +%% remove any data that a quorum queue doesn't need +clean_delivery(#delivery{message = + #basic_message{content = Content0} = Msg} = Delivery) -> + Content = case Content0 of + #content{properties = none} -> + Content0; + #content{protocol = none} -> + Content0; + #content{properties = Props, + protocol = Proto} -> + Content0#content{properties = none, + properties_bin = Proto:encode_properties(Props)} + end, + + %% TODO: we could also consider clearing out the message id here + Delivery#delivery{message = Msg#basic_message{content = Content}}. + |