diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2015-01-12 19:36:37 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2015-01-12 19:36:37 +0000 |
| commit | 7634d04f716b3bccff4a5bae9717119875371c2f (patch) | |
| tree | 710bd3da876439e10a779fcdd23b7bdbb26e917d /src | |
| parent | 814b54783e326508bcbdce7b6ba251c782b9b1a9 (diff) | |
| download | rabbitmq-server-git-7634d04f716b3bccff4a5bae9717119875371c2f.tar.gz | |
Only call create_pub_record_body/2 once per message published; keep the serialised form in memory.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_queue_index.erl | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl index 65118c1ad5..e36797a91a 100644 --- a/src/rabbit_queue_index.erl +++ b/src/rabbit_queue_index.erl @@ -165,7 +165,7 @@ %% ---- misc ---- --define(PUB, {_, _, _}). %% {MsgId, MsgProps, IsPersistent} +-define(PUB, {_, _}). -define(READ_MODE, [binary, raw, read]). -define(WRITE_MODE, [write | ?READ_MODE]). @@ -305,15 +305,14 @@ publish(MsgOrId, SeqId, MsgProps, IsPersistent, State#qistate{unconfirmed_msg = UCM1}; {false, _} -> State end), + Body = create_pub_record_body(MsgOrId, MsgProps), ok = file_handle_cache:append( JournalHdl, [<<(case IsPersistent of true -> ?PUB_PERSIST_JPREFIX; false -> ?PUB_TRANS_JPREFIX end):?JPREFIX_BITS, - SeqId:?SEQ_BITS>>, - create_pub_record_body(MsgOrId, MsgProps)]), - maybe_flush_journal( - add_to_journal(SeqId, {MsgOrId, MsgProps, IsPersistent}, State1)). + SeqId:?SEQ_BITS>>, Body]), + maybe_flush_journal(add_to_journal(SeqId, {IsPersistent, Body}, State1)). deliver(SeqIds, State) -> deliver_or_ack(del, SeqIds, State). @@ -776,10 +775,10 @@ load_journal_entries(State = #qistate { journal_handle = Hdl }) -> ?PUB_PERSIST_JPREFIX -> true; ?PUB_TRANS_JPREFIX -> false end, + B = create_pub_record_body(MsgOrId, Props), load_journal_entries( add_to_journal( - SeqId, {MsgOrId, Props, IsPersistent}, - State)); + SeqId, {IsPersistent, B}, State)); _ErrOrEoF -> State end; @@ -893,12 +892,11 @@ write_entry_to_segment(RelSeq, {Pub, Del, Ack}, Hdl) -> ok = case Pub of no_pub -> ok; - {MsgOrId, MsgProps, IsPersistent} -> + {IsPersistent, Body} -> file_handle_cache:append( Hdl, [<<?PUB_PREFIX:?PUB_PREFIX_BITS, (bool_to_int(IsPersistent)):1, - RelSeq:?REL_SEQ_BITS>>, - create_pub_record_body(MsgOrId, MsgProps)]) + RelSeq:?REL_SEQ_BITS>>, Body]) end, ok = case {Del, Ack} of {no_del, no_ack} -> |
