-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/107/
-----------------------------------------------------------

Review request for qpid.


Summary
-------


   QPID-2874 Clustered broker crashes in assertion in cluster/ExpiryPolicy.cpp

    - Added missing lock to ExpiryPolicy
    - 1-N mapping for expiry ID to mapping when receiving an update.
    - Regression test.

    A fan-out message (sent to multiple queues e.g. by fanout or topic
    exchange) is a single message on multiple queues with a single expiry
    ID. During an update however each instance is sent as a separate
    message so we need to allow 1-N mapping of expiry ID to message during
    update.

The problem is to do with messages that are fanned-out to multiple queues.
The cluster update process does not recognize the same message on different
queues and updates as if it were two distinct messages. The cluster expiry code
expects a 1-1 correspondence between messages and expiry-ids, which are
assigned per message, not per-queued-message. 

This patch allows a 1-n correspondence between expiry-id and messages received 
via update, and ensures that all messages with the same expiry-id are expired 
at the same time.

Arguably it would be better to resolve the underlying problem - have update 
recognize the same message on different queues and send the actual message only 
once and inform the updatee of the queues it is on. That would be a more 
involved fix, and would be redundant if we implement some form the new cluster 
design.  This patch fix solves the immediate problem for the shorter term. 


This addresses bug qpid-2874.
    https://issues.apache.org/jira/browse/qpid-2874


Diffs
-----

  trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.h 1035880 
  trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.cpp 1035880 
  trunk/qpid/cpp/src/tests/cluster_tests.py 1035880 
  trunk/qpid/python/qpid/brokertest.py 1035880 

Diff: https://reviews.apache.org/r/107/diff


Testing
-------

Passing the reproducers, make check and make check-long. See qpid-2874


Thanks,

Alan

Reply via email to