mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-08-06 15:02:41 +03:00
Changed background_rollback to return true/false depending on if
background rollback did happen. Background rollback should be skipped if the aborting happens due to KILL command issued by user. Some KILL signals, like KILL CONECTION, wake up the victim too early so that background rollback could happen in parallel with the victim waking up and continuing execution.
This commit is contained in:
@@ -86,8 +86,9 @@ int db::server_service::start_sst(
|
||||
return 0;
|
||||
}
|
||||
|
||||
void db::server_service::background_rollback(wsrep::client_state&)
|
||||
bool db::server_service::background_rollback(wsrep::client_state&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void db::server_service::bootstrap()
|
||||
|
@@ -41,7 +41,7 @@ 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;
|
||||
bool background_rollback(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&)
|
||||
|
@@ -86,7 +86,7 @@ namespace wsrep
|
||||
/**
|
||||
* Perform a background rollback for a transaction.
|
||||
*/
|
||||
virtual void background_rollback(wsrep::client_state&) = 0;
|
||||
virtual bool background_rollback(wsrep::client_state&) = 0;
|
||||
|
||||
/**
|
||||
* Bootstrap a DBMS state for a new cluster.
|
||||
|
@@ -1074,7 +1074,9 @@ bool wsrep::transaction::bf_abort(
|
||||
}
|
||||
|
||||
lock.unlock();
|
||||
server_service_.background_rollback(client_state_);
|
||||
/* if background rollback is skipped, reset rollbacker activity */
|
||||
if (server_service_.background_rollback(client_state_))
|
||||
client_state_.set_rollbacker_active(false);
|
||||
lock.lock();
|
||||
}
|
||||
}
|
||||
|
@@ -183,11 +183,12 @@ namespace wsrep
|
||||
return start_sst_action();
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
background_rollback(wsrep::client_state& client_state) WSREP_OVERRIDE
|
||||
{
|
||||
client_state.before_rollback();
|
||||
client_state.after_rollback();
|
||||
return false;
|
||||
}
|
||||
|
||||
int wait_committing_transactions(int) WSREP_OVERRIDE { return 0; }
|
||||
|
Reference in New Issue
Block a user