[ https://issues.apache.org/jira/browse/QPID-5642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14074137#comment-14074137 ]
Pavel Moravec commented on QPID-5642: ------------------------------------- Review https://reviews.apache.org/r/19566/ pending on Alan's improvements to the replication sequence for newcomers brokers. > Message sequence numbers (enabled with qpid.msg_sequence) should be > persistent across broker restarts > ----------------------------------------------------------------------------------------------------- > > Key: QPID-5642 > URL: https://issues.apache.org/jira/browse/QPID-5642 > Project: Qpid > Issue Type: Bug > Components: C++ Broker > Affects Versions: 0.26 > Reporter: Pavel Moravec > Assignee: Pavel Moravec > Priority: Minor > > The C++ broker supports currently only at-least-once and at-most-once > reliability. Therefore duplicate messages may occur, especially in situations > involving failovers, reconnects etc. Currently, the broker doesn't offer any > specific solution for duplicate detection. For many messaging scenarios, it > is crucial to process every message only once to avoid errors. > The broker supports message sequencing on exchange level. The message > sequencing assigns a sequence number to every message which is routed via the > exchange. In theory, this can be used to detect duplicates. Unfortunately, > the sequence number isn't stored persistently and is restarted with every > restart of the broker (HA cluster) and starts again from 1. That makes the > use of the sequence number for duplicate detection quite complicated, > especially since the restart of the broker is also the situation when the > duplicates may occur. > Therefore, it is required to update message sequence numbers (enabled with > qpid.msg_sequence) to store/journal after every (pre)route of a durable > exchange, in order to persist the sequence numbers accross broker restart. > > Reproducer: > rm -rf /var/lib/qpidd/* output.txt > service qpidd restart > qpid-config add exchange fanout myFanout --sequence --durable > qpid-receive -a myFanout --connection-options="{reconnect:true}" -f > --print-content=no --print-header=yes -m 6 > output.txt 2>/dev/null & > sleep 1 > qpid-send -a myFanout -m 3 > service qpidd restart > sleep 1 > qpid-send -a myFanout -m 3 > cat output.txt > Current output: > Properties: {qpid.msg_sequence:1, sn:1, ts:1394611002529779545, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:2, sn:2, ts:1394611002529879589, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:3, sn:3, ts:1394611002529896423, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:1, sn:1, ts:1394611004142278196, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:2, sn:2, ts:1394611004142340093, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:3, sn:3, ts:1394611004142354743, > x-amqp-0-10.routing-key:} > Expected output: > Properties: {qpid.msg_sequence:1, sn:1, ts:1394611002529779545, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:2, sn:2, ts:1394611002529879589, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:3, sn:3, ts:1394611002529896423, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:4, sn:1, ts:1394611004142278196, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:5, sn:2, ts:1394611004142340093, > x-amqp-0-10.routing-key:} > Properties: {qpid.msg_sequence:6, sn:3, ts:1394611004142354743, > x-amqp-0-10.routing-key:} > (sn comes from qpid-send so it will be re-set to 1) -- This message was sent by Atlassian JIRA (v6.2#6252) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org