mirror of
https://github.com/mariadb-corporation/wsrep-lib.git
synced 2026-09-20 00:31:12 +00:00
No description
- C++ 96.9%
- CMake 2.6%
- Shell 0.5%
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> |
||
|---|---|---|
| .github/workflows | ||
| cmake | ||
| dbsim | ||
| doc | ||
| include/wsrep | ||
| scripts | ||
| src | ||
| test | ||
| wsrep-API | ||
| .clang-format | ||
| .gitignore | ||
| .gitmodules | ||
| CMakeLists.txt | ||
| CONTRIBUTOR_AGREEMENT.txt | ||
| CONTRIBUTORS.txt | ||
| COPYING | ||
| LICENSE | ||
| README.md | ||
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)