// // Copyright (C) 2018 Codership Oy // #include "db_high_priority_service.hpp" #include "db_server.hpp" #include "db_client.hpp" db::high_priority_service::high_priority_service( db::server& server, db::client* client) : wsrep::high_priority_service(server_.server_state()) , server_(server) , client_(client) { } int db::high_priority_service::start_transaction( const wsrep::ws_handle& ws_handle, const wsrep::ws_meta& ws_meta) { return client_->client_state().start_transaction(ws_handle, ws_meta); } void db::high_priority_service::adopt_transaction(const wsrep::transaction&) { throw wsrep::not_implemented_error(); } int db::high_priority_service::apply_write_set(const wsrep::const_buffer&) { client_->se_trx_.start(client_); client_->se_trx_.apply(client_->client_state().transaction()); return 0; } int db::high_priority_service::apply_toi( const wsrep::ws_meta&, const wsrep::const_buffer&) { throw wsrep::not_implemented_error(); } int db::high_priority_service::commit() { int ret(client_->client_state_.before_commit()); if (ret == 0) client_->se_trx_.commit(); ret = ret || client_->client_state_.ordered_commit(); ret = ret || client_->client_state_.after_commit(); return ret; } int db::high_priority_service::rollback() { int ret(client_->client_state_.before_rollback()); assert(ret == 0); client_->se_trx_.rollback(); ret = client_->client_state_.after_rollback(); assert(ret == 0); return ret; } void db::high_priority_service::after_apply() { client_->client_state_.after_statement(); } bool db::high_priority_service::is_replaying() const { return (client_->client_state_.transaction().state() == wsrep::transaction::s_replaying); }