1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-04-18 10:24:01 +03:00

493 Commits

Author SHA1 Message Date
Jan Lindström
7c7c3be62e Allow provider initialization even when connection monitor service
is not supported by Galera library.
2025-04-11 07:24:20 +03:00
Teemu Ollakka
e55f01ce1e Fix compilation for gcc 4.8 2025-04-08 11:59:48 +03:00
Teemu Ollakka
324b01e431 MDEV-36422 Build fails with cmake 4.0.0
Set policy_max version to 4.0 to avoid error

    Compatibility with CMake < 3.5 has been removed from CMake.

Add github workflow to check CMake compatibility for commonly used
versions and the newest ones.
2025-04-03 09:09:08 +03:00
Teemu Ollakka
cd07c34996 Fix wsrep-API/v26 to point to v26 branch head 2025-02-27 11:34:58 +02:00
Jan Lindström
b8e0540e7a MDEV-26851 : Add interface to monitor connections in Galera 2025-02-21 11:36:34 +02:00
Teemu Ollakka
2d7b357e60 Fix condition to treat an id as alphanumeric string
An id is considered an alphanumeric string if it contains a
non-empty sequence of alphanumeric characters followed by
one or more null characters.

Fixed unit tests accordingly.
2025-01-14 16:52:23 +02:00
Teemu Ollakka
5ea78de6c2 Add support for custom provider implementation
- Add a set_provider_factory() method to server_state to allow
  injecting provider factory which will be called when the
  provider is loaded.

Other related changes:
- Implement to_string() helper method for id class.
- Fix id ostream operator human readable id printing.
- Pass victim client_service as an argument to provider::bf_abort()
  to allow passing victim context to custom provider.
- Implement prev() helper method for seqno class.
- Make server_state recover_streaming_appliers_if_not_recovered()
  public. In some recovery scenarios the method must be called outside
  of server_state internal code paths.
- Add storage_service requires_globals() method. The storage service
  implementation may override this to return false if changing to
  storage service context does not require store/reset globals.
- Change view final() to also require that the view status is not
  primary for the view to be final. Also change the method name to
  is_final() to avoid confusion with C++ final identifier.
- Fixes to server state handling in disconnecting and disconnected
  states.
- Keep TOI meta data over whole TOI critical section.

Co-authored-by: Denis Protivensky <denis.protivensky@galeracluster.com>
2025-01-14 16:51:26 +02:00
Teemu Ollakka
51a0b0ab4f Fix boost download link 2025-01-14 12:35:12 +02:00
Teemu Ollakka
70cd967f5e Change github actions/cache to version 4
Cache service version 2 is going to get closed down,
replace with version 4.
2024-12-11 07:47:49 +02:00
Teemu Ollakka
7994288534 Check local sequential consistency in dbsim
- Release commit time critical section in callback
- Check the consistency inside commit order critical section

Other: Add 2pc switch to dbsim
2024-11-28 15:09:35 +02:00
Teemu Ollakka
3de594b662 Add application defined sequential consistency for certification
Client state methods before_prepare() and before_commit() accept
a callback which is called by the provider after it can guarantee
sequential consistency. This allows application threads which wish to
maintain sequential consistency to enter before_prepare() and
before_commit() calls concurrently without waiting the prior call
to finish.
2024-11-28 13:10:16 +02:00
Daniele Sciascia
1c61b809d1 MDEV-26266 Fix error handling around remove_fragments()
Handle the case where client_service::remove_fragments() fails,
for reasons other than bf abort. In this case, we want to make
sure that the transaction state is moved to s_must_abort, so
that we satisfy the sanity check at the end of before_prepare():

```
   assert(state() == s_preparing ||
          (is_xa() && state() == s_replaying) ||
          (ret && (state() == s_must_abort ||
                   state() == s_must_replay ||
                   state() == s_cert_failed ||
                   state() == s_aborted)));
```
2024-10-09 17:31:02 +02:00
Teemu Ollakka
31db847676 MDEV-32363 Add interface to set node isolation mode in provider 2024-05-21 12:38:34 +03:00
Teemu Ollakka
664d8cc01e Fix reporter test compilation
The compilation failed with

    error: ‘setprecision’ is not a member of ‘std’

Fix by including <iomanip>.
2024-05-17 16:09:54 +03:00
Teemu Ollakka
e399d53d04 Try actions gcc-11 on ubuntu 22.04, add gcc 13 and 14 on ubuntu 24.04
The gcc-11 disappeared from ubuntu-2004. Change gcc-11 os to ubuntu
22.04 where it is available.

Add gcc-13 and gcc-14 which are now available on ubuntu-2404.
2024-05-17 16:06:32 +03:00
Teemu Ollakka
4980861963 Use superproject BOOST_INCLUDE_DIR if set
Extract unittest specific cmake into separate unit to clean up
the main CMakeLists.txt.

fixes codership/wsrep-lib#231
2024-05-15 09:56:22 +03:00
Daniele Sciascia
6b879d46c8 Improve "Unallowed state transition" warning
In client_state, change warning "Unallowed state transition" to print
state names instead of numbers.
2024-04-25 15:37:47 +02:00
Daniele Sciascia
dfc4bdb8a5 Do not abort prepared transaction when statement is interrupted
In `transaction::abort_or_interrupt()` handle the case were a statement
is interrupted while transaction is in prepared state. In which case,
the transaction must remain in prepared state, until it is
committed (or rolled back).
Also in this patch: remove check for reduntant `s_must_abort` state.
2024-03-26 10:07:04 +01:00
Teemu Ollakka
7d108eb870 Rename reported log_msg struct to log_msg_t
MySQL defines a macro log_msg in one of its headers, which
causes log_msg to be replaced with different symbol in
some compilation units.

Fix by renaming the struct to log_msg_t to avoid the conflict.
2024-03-19 10:20:29 +02:00
Daniele Sciascia
6a17207b7f Add method client_service::is_prepared_xa() 2024-01-24 13:05:03 +02:00
Teemu Ollakka
a5d95f0175 Fix dbsim thread instrumentation for main thread
The thread local ti_thread object was not initialized for main thread,
which caused ASAN to complain about wild pointer.

Fixed by assigning a thread local ti_thread object for main
thread too.
2023-10-30 12:29:10 +03:00
Denis Protivensky
ffe1ba7a5d Fix use-after-free in wsrep::log 2023-10-17 14:15:14 +03:00
Alexey Yurchenko
07af42c052 Fix file descriptor leak
Ref codership/wsrep-lib#219
2023-10-09 19:37:37 +03:00
Daniele Sciascia
151d4f8591 Unlock client mutex when calling client_service::remove_fragments()
To avoid mutex order violations
2023-09-05 10:19:23 +03:00
Daniele Sciascia
3b07ea039a Failed to insert streaming client warning after replay
Avoid streaming context cleanup in after_rollback() hook, if
transaction is going to replay. Otherwise, streaming client is not
stopped and is left in streaming client map, potentially causing
"Failed to insert streaming client" warning if the transaction
goes for retry.
2023-09-05 10:19:23 +03:00
Daniele Sciascia
173693f2ee Github actions: do sudo apt update before installing packages 2023-07-17 15:41:24 +02:00
Daniele Sciascia
62bd40800f Remove duplicate logic from after_statement
Remove bf abort handling `client_state::after_statement()`, since the
same logic already appears later in `transaction::after_statement()`.
Also, introduce `transaction::after_statement()` overload which takes
a lock.
2023-07-17 15:07:22 +02:00
Teemu Ollakka
7dafce8403 Remove wrong assertion from transaction::cleanup()
In case if SR transaction gets BF aborted before it is
certified, the replay will happen but if the replay fails
due to certification conflict, the transaction is not terminated
in provider replay and will keep its streaming status.

Removed the wrong assertion about streaming status from
transaction::cleanup().
2023-05-26 13:35:31 +03:00
Teemu Ollakka
9070f2a891 Change unit tests to mimic application behavior on replaying
Allocate separate client state in mock_client_service::replay()
for replaying step.

Added two new test cases for streaming replication replay after
BF abort.
2023-05-26 12:47:47 +03:00
Teemu Ollakka
e238c0d240 Review fixes
* Move resetting is_bf_immutable_ into trasaction::cleanup()
  to ensure that it is reset to false regardless how the
  transaction terminates.
* Removed redundant lock()/unlock() methods from
  mock_client_state.
2023-05-16 19:30:31 +03:00
Teemu Ollakka
b76e94f84a Transaction not immune after becoming ordered for commit
The transaction state is set to s_ordered_commit in
ordered_commit(). However, this is too late for making the
transaction immune for BF aborts after commit order has
been established, which happens in before_commit().

Moving the state change into before_commit() would be the
right thing to do, but that would require too many fixes
to existing applications which are using the lib.

In order to make the transaction immune for BF abort
after it has been ordered to commit, introduce additional
boolean flag which is set to true at the end of before_commit()
and is taken into account in bf_abort().
2023-04-26 11:46:34 +03:00
Teemu Ollakka
d2f27babd6 Add lock argument to server_service::background_rollback()
This is to allow implementation to temporarily release the
lock if needed.
2023-04-16 19:12:26 +03:00
Teemu Ollakka
f8a20ff00f Make is_rollbacker_active() public, don't unlock for background rollback
Make is_rollbacker_active() public so that the BF thread can
check if the rollbacker was started or not.

Also don't unlock the lock for launching the background
rollbacker to avoid race conditions in accessing the
victim state.
2023-04-05 09:30:55 +03:00
Teemu Ollakka
4951c38357 Github Actions has removed ubuntu-18.04
Replace ubuntu-18.04 virtual environment with ubuntu-20.04.
Compilation tests for GCC < 7 cannot be done anymore
since ubuntu-20.04 environment does not provide such an
old compilers.
2023-04-04 13:53:25 +03:00
Teemu Ollakka
626c0b7b3b Fix -Winconsistent-missing-destructor-override warnings 2023-03-30 13:46:14 +03:00
Teemu Ollakka
66a8fa9b13 Add -Winconsistent-missing-destructor-override if compiler supports 2023-03-30 13:03:43 +03:00
Teemu Ollakka
94ea93a48d Add clang-13 into build matrix 2023-03-29 18:14:43 +03:00
Teemu Ollakka
5185ad3481 Grab lock after starting background rollback
This makes the bf_abort() to return with lock locked.
2023-03-17 16:24:56 +02:00
Teemu Ollakka
69b9d7d464 Allow external locking for BF aborts
Added methods bf_abort() and total_order_bf_abort() which take
wsrep::unique_lock<wsrep::mutex> as argument to allow caller
to grab the mutex before attempting BF abort. The old calls
were kept for backwards compatibility and wrap the new calls
with internal locking.
2023-03-17 14:38:03 +02:00
Daniele Sciascia
32d4275c60 Rollback storage service in case of errors while appending fragment
This is part of fix for MDEV-30838
2023-03-14 14:25:37 +01:00
Teemu Ollakka
7e0ccfc1d4 Updated wsrep-API/v26 for ASAN instrumentation fix 2023-03-02 08:44:56 +02:00
Teemu Ollakka
9a35083730 Eliminated duplicate fragment removal code
Extracted duplicate fragment removal code in after_commit()
and after_rollback() into separate method.
2023-03-02 08:39:37 +02:00
Teemu Ollakka
241898af7e Postpone streaming_context cleanup into after_rollback()
Streaming_context was cleaned up in streaming_rollback(),
which could cause clearing fragment seqno vector while
it was still accessed by the owning thread, causing
undefined behavior. Fixed by postponing streaming_context
cleanup for BF aborted SR transactions to always happen in
after_rollback().
2023-03-02 08:38:19 +02:00
Teemu Ollakka
19eaed587c Fix total order BF abort
Streaming rollback for total order BF abort used regular
BF abort codepath, which was not correct because the streaming
rollback must fully complete before total order operation executes.
Fixed this by adjusting bf_aborted_in_total_order_
before streaming_rollback() gets called.
2023-03-02 08:37:12 +02:00
Teemu Ollakka
7843345a19 Extracted duplicate logic into return_from_donor_state
The condition to skip changing to `s_joined` for all codepaths
which return from donor state. Extracted the logic into separate
method.

Commented start_sst_action in mock_server_service.
2023-02-28 16:20:18 +02:00
Teemu Ollakka
5a943b66a7 Fix assertion unallowed state transition: connected -> joined
When the donor lost its donor state during SST due to cluster
partitioning, the state was erranously changed to `s_joined`
in `start_sst()` and `sst_sent()`, which caused assertion failures
in state checking.

Fixed by changing state to `s_joined` only if donor is still in
`s_donor` state.
2023-02-28 12:13:00 +02:00
Teemu Ollakka
3b3429d8df Work around GCC 12 warning of uninitialized use
Use pointers to pass state objects to service constructors
to work around GCC 12 warning

  error: member ‘wsrep::mock_storage_service::client_state_’
  is used uninitialized
2023-02-27 13:32:55 +02:00
Teemu Ollakka
9e8708af7e Add GCC 12 into GitHup actions build matrix 2023-02-26 10:12:56 +02:00
Teemu Ollakka
53638a8384 Removing assert() calls from public headers
Removed calls to assert() from public headers to have
full control when assertions are enabled in wsrep-lib
code regardless of parent project build configuration.
Moved methods containing assertions and non-trivial
code from headers into compilation units.
2023-02-26 10:12:49 +02:00
Teemu Ollakka
940ba9bd0e Fix escape_json() compilation error due to type limits check
Compilation failed on arm64 with

  error: comparison is always true due to limited range of data type
  [-Werror=type-limits]

for
  if (0x0 <= *c && *c <= 0x1f)

This was because char is unsigned on arm64 and thus always greater
than zero.

Fixed by using std::iscntrl() instead of explicit range check.
This adds also backspace into set of escaped characters.
2023-01-23 11:08:32 +02:00