mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-31 18:24:25 +03:00
Added must_exit boolean flag to high_priority_service interface
This is needed to allow slave threads to exit processing loop if requested by the DBMS.
This commit is contained in:
@ -21,7 +21,8 @@ namespace wsrep
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
high_priority_service(wsrep::server_state& server_state)
|
high_priority_service(wsrep::server_state& server_state)
|
||||||
: server_state_(server_state) { }
|
: server_state_(server_state)
|
||||||
|
, must_exit_() { }
|
||||||
virtual ~high_priority_service() { }
|
virtual ~high_priority_service() { }
|
||||||
|
|
||||||
int apply(const ws_handle& ws_handle, const ws_meta& ws_meta,
|
int apply(const ws_handle& ws_handle, const ws_meta& ws_meta,
|
||||||
@ -79,8 +80,11 @@ namespace wsrep
|
|||||||
virtual int log_dummy_write_set(const ws_handle&, const ws_meta&) = 0;
|
virtual int log_dummy_write_set(const ws_handle&, const ws_meta&) = 0;
|
||||||
|
|
||||||
virtual bool is_replaying() const = 0;
|
virtual bool is_replaying() const = 0;
|
||||||
|
|
||||||
|
bool must_exit() const { return must_exit_; }
|
||||||
protected:
|
protected:
|
||||||
wsrep::server_state& server_state_;
|
wsrep::server_state& server_state_;
|
||||||
|
bool must_exit_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class high_priority_switch
|
class high_priority_switch
|
||||||
|
@ -558,6 +558,8 @@ int wsrep::transaction::after_statement()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case s_aborted:
|
case s_aborted:
|
||||||
|
// Raise a deadlock error if the transaction was BF aborted and
|
||||||
|
// rolled back by client outside of transaction hooks.
|
||||||
if (bf_aborted() && client_state_.current_error() == wsrep::e_success)
|
if (bf_aborted() && client_state_.current_error() == wsrep::e_success)
|
||||||
{
|
{
|
||||||
client_state_.override_error(wsrep::e_deadlock_error);
|
client_state_.override_error(wsrep::e_deadlock_error);
|
||||||
|
@ -361,7 +361,7 @@ namespace
|
|||||||
uint32_t flags,
|
uint32_t flags,
|
||||||
const wsrep_buf_t* buf,
|
const wsrep_buf_t* buf,
|
||||||
const wsrep_trx_meta_t* meta,
|
const wsrep_trx_meta_t* meta,
|
||||||
wsrep_bool_t* exit_loop __attribute__((unused)))
|
wsrep_bool_t* exit_loop)
|
||||||
{
|
{
|
||||||
wsrep::high_priority_service* high_priority_service(
|
wsrep::high_priority_service* high_priority_service(
|
||||||
reinterpret_cast<wsrep::high_priority_service*>(ctx));
|
reinterpret_cast<wsrep::high_priority_service*>(ctx));
|
||||||
@ -384,6 +384,7 @@ namespace
|
|||||||
{
|
{
|
||||||
return WSREP_CB_FAILURE;
|
return WSREP_CB_FAILURE;
|
||||||
}
|
}
|
||||||
|
*exit_loop = high_priority_service->must_exit();
|
||||||
return WSREP_CB_SUCCESS;
|
return WSREP_CB_SUCCESS;
|
||||||
}
|
}
|
||||||
catch (const wsrep::runtime_error& e)
|
catch (const wsrep::runtime_error& e)
|
||||||
|
Reference in New Issue
Block a user