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:
@ -86,7 +86,8 @@ int db::server_service::start_sst(
|
||||
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&)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,8 @@ namespace db
|
||||
bool sst_before_init() const override;
|
||||
int start_sst(const std::string&, const wsrep::gtid&, bool) 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 log_message(enum wsrep::log::level, const char* message) override;
|
||||
void log_dummy_write_set(wsrep::client_state&, const wsrep::ws_meta&)
|
||||
|
@ -85,8 +85,14 @@ namespace wsrep
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
@ -1073,7 +1073,7 @@ bool wsrep::transaction::bf_abort(
|
||||
}
|
||||
}
|
||||
|
||||
server_service_.background_rollback(client_state_);
|
||||
server_service_.background_rollback(lock, client_state_);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
@ -49,6 +49,8 @@ namespace wsrep
|
||||
(void)client_service().bf_rollback();
|
||||
}
|
||||
}
|
||||
void lock() { mutex_.lock(); }
|
||||
void unlock() { mutex_.unlock(); }
|
||||
private:
|
||||
wsrep::default_mutex mutex_;
|
||||
wsrep::default_condition_variable cond_;
|
||||
|
@ -184,10 +184,13 @@ namespace wsrep
|
||||
}
|
||||
|
||||
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.after_rollback();
|
||||
lock.lock();
|
||||
}
|
||||
|
||||
int wait_committing_transactions(int) WSREP_OVERRIDE { return 0; }
|
||||
|
Reference in New Issue
Block a user