1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-18 14:02:16 +03:00
1) Add initialization for trx->xid in InnoDB trx pool

2) Add server UUID in the XID of InnoDB SR transactions

3) Modify trx_recover_for_mysql_callback() so that recovered InnoDB SR
transactions are not made visible to MySQL as recovered XA transactions.

4) Modify how SR transactions are detected and the wsrep_is_sr flag is
set for InnoDB SR transactions.
This commit is contained in:
Pekka Lampio
2021-02-23 18:52:40 +02:00
parent a866ce7107
commit c487d11f86
5 changed files with 50 additions and 2 deletions

View File

@ -926,7 +926,16 @@ namespace wsrep
{
return transaction_;
}
#ifdef WITH_WSREP_SR_SPEEDUP
/**
* Return a reference to the transaction associated
* with the client state.
*/
wsrep::transaction& transaction()
{
return transaction_;
}
#endif /* WITH_WSREP_SR_SPEEDUP */
const wsrep::ws_meta& toi_meta() const
{
return toi_meta_;

View File

@ -82,6 +82,10 @@ namespace wsrep
*/
virtual int remove_fragments() = 0;
#ifdef WITH_WSREP_SR_SPEEDUP
int set_fragments_from_table() {return 0;};
#endif /* WITH_WSREP_SR_SPEEDUP */
/**
* Commit the transaction.
*/

View File

@ -142,6 +142,9 @@ namespace wsrep
void xa_detach();
int xa_replay(wsrep::unique_lock<wsrep::mutex>&);
#ifdef WITH_WSREP_SR_SPEEDUP
int set_fragments_from_table();
#endif /* WITH_WSREP_SR_SPEEDUP */
bool pa_unsafe() const { return pa_unsafe_; }
void pa_unsafe(bool pa_unsafe) { pa_unsafe_ = pa_unsafe; }

View File

@ -99,6 +99,10 @@ static int apply_fragment(wsrep::server_state& server_state,
wsrep::high_priority_switch sw(high_priority_service,
*streaming_applier);
apply_err = streaming_applier->apply_write_set(ws_meta, data, err);
#ifdef DEBUG_SR_SPEEDUP
wsrep::log_info() << "server_state: apply_fragment, line = "
<< __LINE__ << ", apply_err = " << apply_err;
#endif /* DEBUG_SR_SPEEDUP */
if (!apply_err)
{
assert(err.size() == 0);
@ -127,7 +131,10 @@ static int apply_fragment(wsrep::server_state& server_state,
}
}
}
#ifdef DEBUG_SR_SPEEDUP
wsrep::log_info() << "server_state: apply_fragment, line = "
<< __LINE__ << ", ret = " << ret;
#endif /* DEBUG_SR_SPEEDUP */
if (!ret)
{
if (!apply_err)

View File

@ -214,6 +214,12 @@ void wsrep::transaction::fragment_applied(wsrep::seqno seqno)
{
assert(active());
streaming_context_.applied(seqno);
#ifdef DEBUG_SR_SPEEDUP
wsrep::log_info() << "wsrep::transaction::fragment_applied: "
<< "SR context = " << (void *)&streaming_context_
<< ", size = " << streaming_context_.fragments_stored()
<< ", seqno = " << seqno.get();
#endif /* DEBUG_SR_SPEEDUP */
}
int wsrep::transaction::prepare_for_ordering(
@ -1299,6 +1305,24 @@ int wsrep::transaction::xa_replay(wsrep::unique_lock<wsrep::mutex>& lock)
return ret;
}
#ifdef WITH_WSREP_SR_SPEEDUP
int wsrep::transaction::set_fragments_from_table()
{
scoped_storage_service<storage_service_deleter>
sr_scope(
client_service_,
server_service_.storage_service(client_service_),
storage_service_deleter(server_service_));
wsrep::storage_service& storage_service(
sr_scope.storage_service());
int rcode = storage_service.set_fragments_from_table();
return (rcode);
}
#endif /* WITH_WSREP_SR_SPEEDUP */
////////////////////////////////////////////////////////////////////////////////
// Private //
////////////////////////////////////////////////////////////////////////////////
@ -1634,6 +1658,7 @@ int wsrep::transaction::certify_fragment(
else
{
streaming_context_.stored(sr_ws_meta.seqno());
}
client_service_.debug_crash(
"crash_replicate_fragment_success");