mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-28 20:02:00 +03:00
Pass victim context for provider on BF abort
This change is needed for custom provider implementations to have a way to access the victim in the application context. Helper interface operation_context to pass caller context for service/provider callbacks in more type safe way.
This commit is contained in:
@ -43,6 +43,7 @@
|
||||
#include "thread.hpp"
|
||||
#include "xid.hpp"
|
||||
#include "chrono.hpp"
|
||||
#include "operation_context.hpp"
|
||||
|
||||
namespace wsrep
|
||||
{
|
||||
@ -662,22 +663,45 @@ namespace wsrep
|
||||
* called by a transaction which needs to BF abort a conflicting
|
||||
* locally processing transaction.
|
||||
*/
|
||||
int bf_abort(wsrep::seqno bf_seqno)
|
||||
int bf_abort(wsrep::seqno bf_seqno,
|
||||
wsrep::operation_context& victim_ctx)
|
||||
{
|
||||
wsrep::unique_lock<wsrep::mutex> lock(mutex_);
|
||||
assert(mode_ == m_local || transaction_.is_streaming());
|
||||
return transaction_.bf_abort(lock, bf_seqno);
|
||||
return transaction_.bf_abort(lock, bf_seqno, victim_ctx);
|
||||
}
|
||||
|
||||
/**
|
||||
* For backwards compatibility when the caller does not pass
|
||||
* victim_ctx.
|
||||
*/
|
||||
int bf_abort(wsrep::seqno bf_seqno)
|
||||
{
|
||||
wsrep::null_operation_context victim_ctx;
|
||||
return bf_abort(bf_seqno, victim_ctx);
|
||||
}
|
||||
/**
|
||||
* Brute force abort a transaction in total order. This method
|
||||
* should be called by the TOI operation which needs to
|
||||
* BF abort a transaction.
|
||||
*/
|
||||
int total_order_bf_abort(wsrep::seqno bf_seqno)
|
||||
int total_order_bf_abort(wsrep::seqno bf_seqno,
|
||||
wsrep::operation_context& victim_ctx)
|
||||
{
|
||||
wsrep::unique_lock<wsrep::mutex> lock(mutex_);
|
||||
assert(mode_ == m_local || transaction_.is_streaming());
|
||||
return transaction_.total_order_bf_abort(lock, bf_seqno);
|
||||
return transaction_.total_order_bf_abort(lock, bf_seqno,
|
||||
victim_ctx);
|
||||
}
|
||||
|
||||
/**
|
||||
* For backwards compatibility when the caller does not pass
|
||||
* victim_ctx.
|
||||
*/
|
||||
int total_order_bf_abort(wsrep::seqno bf_seqno)
|
||||
{
|
||||
wsrep::null_operation_context victim_ctx;
|
||||
return total_order_bf_abort(bf_seqno, victim_ctx);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user