1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-06 20:56:43 +03:00

* Added applier side TOI commit order enter and leave

* Added cleanup_transaction() method to client_service in order to
  provide a way to make DBMS side cleanup when transaction
  is cleaned up
This commit is contained in:
Teemu Ollakka
2018-06-25 14:09:19 +03:00
parent cad9176474
commit 4e152ee79d
8 changed files with 21 additions and 5 deletions

View File

@ -50,6 +50,8 @@ namespace db
return 0; return 0;
} }
void cleanup_transaction() override { }
size_t bytes_generated() const override size_t bytes_generated() const override
{ {
return 0; return 0;

View File

@ -29,7 +29,7 @@ void db::server_service::release_client_state(
bool db::server_service::sst_before_init() const bool db::server_service::sst_before_init() const
{ {
return false; return true;
} }
std::string db::server_service::sst_request() std::string db::server_service::sst_request()

View File

@ -36,7 +36,9 @@ void db::simulator::sst(db::server& server,
{ {
wsrep::log_info() << "SST " << server.server_state().id() << " -> " << id; wsrep::log_info() << "SST " << server.server_state().id() << " -> " << id;
} }
i->second->server_state().sst_received(gtid, 0); i->second->server_state().sst_transferred(gtid);
i->second->server_state().initialized();
// i->second->server_state().sst_received(gtid, 0);
server.server_state().sst_sent(gtid, 0); server.server_state().sst_sent(gtid, 0);
} }
@ -116,6 +118,8 @@ void db::simulator::start()
throw wsrep::runtime_error("Failed to connect"); throw wsrep::runtime_error("Failed to connect");
} }
server.start_applier(); server.start_applier();
server.server_state().wait_until_state(wsrep::server_state::s_initializing);
server.server_state().initialized();
server.server_state().wait_until_state( server.server_state().wait_until_state(
wsrep::server_state::s_synced); wsrep::server_state::s_synced);
} }

View File

@ -63,6 +63,11 @@ namespace wsrep
*/ */
virtual int prepare_data_for_replication() = 0; virtual int prepare_data_for_replication() = 0;
/**
* Clean up after transcation has been terminated.
*/
virtual void cleanup_transaction() = 0;
// //
// Streaming // Streaming
// //

View File

@ -4,4 +4,4 @@
#include "wsrep/exception.hpp" #include "wsrep/exception.hpp"
bool wsrep::abort_on_exception(true); bool wsrep::abort_on_exception(false);

View File

@ -175,8 +175,9 @@ namespace
return ret; return ret;
} }
int apply_toi(wsrep::server_service&, int apply_toi(wsrep::provider& provider,
wsrep::client_state& client_state, wsrep::client_state& client_state,
const wsrep::ws_handle& ws_handle,
const wsrep::ws_meta& ws_meta, const wsrep::ws_meta& ws_meta,
const wsrep::const_buffer& data) const wsrep::const_buffer& data)
{ {
@ -184,9 +185,11 @@ namespace
wsrep::commits_transaction(ws_meta.flags())) wsrep::commits_transaction(ws_meta.flags()))
{ {
// Regular toi // Regular toi
provider.commit_order_enter(ws_handle, ws_meta);
client_state.enter_toi(ws_meta); client_state.enter_toi(ws_meta);
int ret(client_state.client_service().apply_toi(data)); int ret(client_state.client_service().apply_toi(data));
client_state.leave_toi(); client_state.leave_toi();
provider.commit_order_leave(ws_handle, ws_meta);
return ret; return ret;
} }
else if (wsrep::starts_transaction(ws_meta.flags())) else if (wsrep::starts_transaction(ws_meta.flags()))
@ -507,7 +510,7 @@ int wsrep::server_state::on_apply(
{ {
if (is_toi(ws_meta.flags())) if (is_toi(ws_meta.flags()))
{ {
return apply_toi(server_service_, client_state, ws_meta, data); return apply_toi(provider(), client_state, ws_handle, ws_meta, data);
} }
else if (is_commutative(ws_meta.flags()) || is_native(ws_meta.flags())) else if (is_commutative(ws_meta.flags()) || is_native(ws_meta.flags()))
{ {

View File

@ -959,6 +959,7 @@ void wsrep::transaction::cleanup()
ws_meta_ = wsrep::ws_meta(); ws_meta_ = wsrep::ws_meta();
certified_ = false; certified_ = false;
pa_unsafe_ = false; pa_unsafe_ = false;
client_service_.cleanup_transaction();
debug_log_state("cleanup_leave"); debug_log_state("cleanup_leave");
} }

View File

@ -122,6 +122,7 @@ namespace wsrep
return client_state_.append_data(data); return client_state_.append_data(data);
} }
void cleanup_transaction() WSREP_OVERRIDE { }
size_t bytes_generated() const size_t bytes_generated() const
{ {
return bytes_generated_; return bytes_generated_;