----------------------------------------------------------- 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