No description
  • C++ 96.9%
  • CMake 2.6%
  • Shell 0.5%
Find a file
Jan Lindström 66a2add655 MENT-2552 Fix mutex order in commit_or_rollback_by_xid()
The server state mutex must always be acquired before the client state
mutex. server_state::convert_streaming_client_to_applier() holds the
server state mutex over high_priority_service::adopt_transaction(),
after_apply(), store_globals() and
server_service::release_high_priority_service(), all of which take the
client state mutex of the applier client.
server_state::close_orphaned_sr_transactions() does the same.

transaction::commit_or_rollback_by_xid(), reached by XA COMMIT or
XA ROLLBACK of an xid owned by a streaming applier, took the two in the
opposite order: it locked the client state and then called
server_state::find_streaming_applier(), which locks the server state.
A client terminating a prepared XA transaction by xid could therefore
wait for the server state mutex while holding its own client state
mutex, deadlocking against a thread which is converting a streaming
client into a streaming applier.

Do the find_streaming_applier() lookup before locking the client state.
Nothing between the old lock point and the lookup needs the client
state mutex.

Add sync point wsrep_commit_or_rollback_by_xid_client_locked so that
the mutex order can be exercised from a test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 07:53:56 +03:00
.github/workflows Apparently github has removed support for Ubuntu 20.04 in workfolws. 2025-04-30 17:45:34 +02:00
cmake Fix boost download link 2025-01-14 12:35:12 +02:00
dbsim MDEV-36551: Add interface to report wsrep state change in Galera 2025-05-07 17:32:41 +03:00
doc Cleaned up client_state interface. 2018-06-18 18:55:38 +03:00
include/wsrep std::back_inserter needs iterator include header 2026-08-11 09:10:19 +03:00
scripts Helper script to run dbsim stress test with provider loaded 2019-01-25 14:50:44 +02:00
src MENT-2552 Fix mutex order in commit_or_rollback_by_xid() 2026-09-02 07:53:56 +03:00
test MGL-52 Handle BF abort during XA commit/rollback by XID 2026-02-16 14:46:59 +02:00
wsrep-API MDEV-37026 Revert "Pass callback to get provider options to provider_v26 constructor" 2026-02-13 12:00:19 +02:00
.clang-format Implemented thread service support. 2019-10-14 09:30:15 +03:00
.gitignore Add support for custom provider implementation 2025-01-14 16:51:26 +02:00
.gitmodules MDEV-39710: Update git modules WSREP Links to mariadb-corporation 2026-07-07 09:56:31 -06:00
CMakeLists.txt MDEV-36422 Build fails with cmake 4.0.0 2025-04-03 09:09:08 +03:00
CONTRIBUTOR_AGREEMENT.txt Contributor License Agreement 2021-02-01 19:04:46 +02:00
CONTRIBUTORS.txt MDEV-26851 : Add interface to monitor connections in Galera 2025-02-21 11:36:34 +02:00
COPYING Added GPLv2 licence and copyright headers. 2018-10-15 15:14:22 +03:00
LICENSE Added GPLv2 licence and copyright headers. 2018-10-15 15:14:22 +03:00
README.md Added WSREP_LIB_STRICT_BUILD_FLAGS and WSREP_LIB_MAINTAINER_MODE to README.md 2019-01-24 18:15:13 +02:00

Introduction

Project name: wsrep-lib - Integration library for WSREP API

The purpose of this project is to implement C++ wrapper for wsrep API with additional convenience for transaction processing.

This project will abstract away most of the transaction state management required on DBMS side and will provide simple C++ interface for key set population, data set population, commit processing, write set applying etc.

Build Instructions

In order to build the library, run

cmake . make

Build Requirements

  • C++ compiler (g++ 5.4 or later recommended)
  • CMake version 2.8 or later
  • The following Boost libraries are required if the unit tests and the sample program is compiled
    • Unit Test Framework
    • Program Options
    • Filesystem
    • Thread

CMake Options

  • WSREP_LIB_WITH_UNIT_TESTS - Compile unit tests (default ON)
  • WSREP_LIB_WITH_AUTO_TEST - Run unit tests automatically as a part of compilation (default OFF)
  • WSREP_LIB_WITH_DBSIM - Compile sample program (default ON)
  • WSREP_LIB_WITH_ASAN - Enable address sanitizer instrumentation (default OFF)
  • WSREP_LIB_WITH_TSAN - Enable thread sanitizer instrumentation (default OFF)
  • WSREP_LIB_WITH_DOCUMENTATION - Generate documentation, requires Doxygen (default OFF)
  • WSREP_LIB_WITH_COVERAGE - Compile with coverage instrumentation (default OFF)
  • WSREP_LIB_STRICT_BUILD_FLAGS - Compile with strict build flags, currently enables -Weffc++ (default OFF)
  • WSREP_LIB_MAINTAINER_MODE - Make every compiler warning to be treated as error, enables -Werror compiler flag (default OFF)