-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/23096/
-----------------------------------------------------------
(Updated Aug. 20, 2014, 9:35 p.m.)
Review request for qpid, Gordon Sim, rajith attapattu, and Robbie Gemmell.
Changes
-------
Analysys of problem and broker side fix.
Summary (updated)
-----------------
QPID-5855: JAVA Client Can not recieve message with qpid ha cluster "Session
exception occured while trying to commit"
Bugs: QPID-5855
https://issues.apache.org/jira/browse/QPID-5855
Repository: qpid
Description (updated)
-------
The problem: the java client sets the sync flag on tx.commit and then waits for
completion of the entire transaction. With HA enabled, both transfer and commit
are asynchronously completed and it is possible for the commit to
complete *before* the preceeding transfer. In that case the C++ broker sends
completions immediately for the commit (because it has the sync flag), but there
is a hole for the incomplete transfer. The transfer does *not* have the sync
flag so when it completes the broker does not immediately send a completion and
we hang.
Its not completely clear which of the broker or the client is strictly correct
in this case, but it seems prudent to fix it on the broker. The fix: when a
command with the sync flag completes, if there are any "holes" (earlier commands
not yet complete) then the broker records the current command ID as if it were
an execution.sync. Thus when the holes are filled the broker will send the
completions immediately.
Diffs (updated)
-----
trunk/qpid/cpp/src/qpid/broker/SessionState.h 1619236
trunk/qpid/cpp/src/qpid/broker/SessionState.cpp 1619236
Diff: https://reviews.apache.org/r/23096/diff/
Testing (updated)
-------
Passes reproducer and ctest
Thanks,
Alan Conway