1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-05 03:41:13 +03:00

Add lock argument to server_service::background_rollback()

This is to allow implementation to temporarily release the
lock if needed.
This commit is contained in:
Teemu Ollakka
2023-04-16 19:12:26 +03:00
parent f8a20ff00f
commit d2f27babd6
6 changed files with 18 additions and 5 deletions

View File

@ -86,7 +86,8 @@ int db::server_service::start_sst(
return 0; return 0;
} }
void db::server_service::background_rollback(wsrep::client_state&) void db::server_service::background_rollback(wsrep::unique_lock<wsrep::mutex>&,
wsrep::client_state&)
{ {
} }

View File

@ -41,7 +41,8 @@ namespace db
bool sst_before_init() const override; bool sst_before_init() const override;
int start_sst(const std::string&, const wsrep::gtid&, bool) override; int start_sst(const std::string&, const wsrep::gtid&, bool) override;
std::string sst_request() override; std::string sst_request() override;
void background_rollback(wsrep::client_state&) override; void background_rollback(wsrep::unique_lock<wsrep::mutex>&,
wsrep::client_state&) override;
void bootstrap() override; void bootstrap() override;
void log_message(enum wsrep::log::level, const char* message) override; void log_message(enum wsrep::log::level, const char* message) override;
void log_dummy_write_set(wsrep::client_state&, const wsrep::ws_meta&) void log_dummy_write_set(wsrep::client_state&, const wsrep::ws_meta&)

View File

@ -85,8 +85,14 @@ namespace wsrep
/** /**
* Perform a background rollback for a transaction. * Perform a background rollback for a transaction.
*
* @param lock Lock protecting client state.
* @param client_state Client session to do background rollback
* for.
*/ */
virtual void background_rollback(wsrep::client_state&) = 0; virtual void background_rollback(wsrep::unique_lock<wsrep::mutex>& lock,
wsrep::client_state& client_state)
= 0;
/** /**
* Bootstrap a DBMS state for a new cluster. * Bootstrap a DBMS state for a new cluster.

View File

@ -1073,7 +1073,7 @@ bool wsrep::transaction::bf_abort(
} }
} }
server_service_.background_rollback(client_state_); server_service_.background_rollback(lock, client_state_);
} }
} }
return ret; return ret;

View File

@ -49,6 +49,8 @@ namespace wsrep
(void)client_service().bf_rollback(); (void)client_service().bf_rollback();
} }
} }
void lock() { mutex_.lock(); }
void unlock() { mutex_.unlock(); }
private: private:
wsrep::default_mutex mutex_; wsrep::default_mutex mutex_;
wsrep::default_condition_variable cond_; wsrep::default_condition_variable cond_;

View File

@ -184,10 +184,13 @@ namespace wsrep
} }
void void
background_rollback(wsrep::client_state& client_state) WSREP_OVERRIDE background_rollback(wsrep::unique_lock<wsrep::mutex>& lock,
wsrep::client_state& client_state) WSREP_OVERRIDE
{ {
lock.unlock();
client_state.before_rollback(); client_state.before_rollback();
client_state.after_rollback(); client_state.after_rollback();
lock.lock();
} }
int wait_committing_transactions(int) WSREP_OVERRIDE { return 0; } int wait_committing_transactions(int) WSREP_OVERRIDE { return 0; }