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

Review request for qpid, Gordon Sim and Kenneth Giusti.


Repository: qpid


Description
-------

QPID-5139: HA transactions block a thread, can deadlock the broker

PrimaryTxObserver::prepare blocks pending responses from each backup. With
concurrent transactions this can deadlock the broker: once all worker threads
are blocked in prepare, responses from backups cannot be received.

This commit generalizes the async completion mechanism for messages to allow
async completion of arbitrary commands. It leaves the special-case code for
messages undisturbed but adds a second path (starting from
SessionState::handleCommand) for async completion of other commands.

So far have only done the refactor on the Session side for generic async 
commands.
Still  need code to
- Pass AsyncCompletion from IncompleteCommand down to PrimaryTxObserver::prepare
- Call startCompleter for each backup broker.
- Call finisCompleter on response from backup brokers.

Issues:
- exra malloc per command, each command gets an AsyncCompletion. Can it be 
avoided?
- can we clean up execution.sync special case?
- In auth test, causes strange core dump in SaslFactory.cpp:
  - static getPasswordFromSettingsSecrets not initialized?


Diffs
-----

  /trunk/qpid/cpp/src/qpid/broker/SessionState.h 1526725 
  /trunk/qpid/cpp/src/qpid/broker/SessionState.cpp 1526725 
  /trunk/qpid/cpp/src/tests/ha_test.py 1526725 
  /trunk/qpid/cpp/src/tests/ha_tests.py 1526725 

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


Testing
-------


Thanks,

Alan Conway

Reply via email to