mirror of
https://github.com/codership/wsrep-lib.git
synced 2026-10-23 09:48:57 +03:00
MGL-187_conflict_seqno
Wsrep_write_set::update_conflict() during bf_abort()
Issue:
When a streaming XA transaction COMMIT is BF-aborted and later replayed
via commit_or_rollback_by_xid(), the replay transaction cloned from the
original THD had an undefined ws_meta_.seqno(). This happened because
commit_or_rollback_by_xid() certifies using a local ws_meta instance,
so the transaction’s ws_meta_ never receives the certified seqno.
During replay, if the streaming applier encounters an InnoDB lock
conflict and performs a BF abort on a local transaction, the BF abort
path calls wsrep_thd_trx_seqno() for the replaying THD. With the
undefined seqno this eventually triggers:
Wsrep_write_set::update_conflict():
assert(!conflict_seqno.is_undefined());
Solution:
Fix by enhancing wsrep::transaction::clone_for_replay(): when cloning a
streaming transaction for replay, if ws_meta_.seqno() is undefined but
the streaming_context has stored fragments, use the last fragment’s
seqno to reconstruct ws_meta_. This ensures the replay THD always has a
valid seqno for conflict ordering during BF aborts.
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)
Languages
C++
96.9%
CMake
2.6%
Shell
0.5%