mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-08-06 15:02:41 +03:00
Eliminated duplicate fragment removal code
Extracted duplicate fragment removal code in after_commit() and after_rollback() into separate method.
This commit is contained in:
@@ -249,6 +249,8 @@ namespace wsrep
|
|||||||
int certify_commit(wsrep::unique_lock<wsrep::mutex>&);
|
int certify_commit(wsrep::unique_lock<wsrep::mutex>&);
|
||||||
int append_sr_keys_for_commit();
|
int append_sr_keys_for_commit();
|
||||||
int release_commit_order(wsrep::unique_lock<wsrep::mutex>&);
|
int release_commit_order(wsrep::unique_lock<wsrep::mutex>&);
|
||||||
|
void remove_fragments_in_storage_service_scope(
|
||||||
|
wsrep::unique_lock<wsrep::mutex>&);
|
||||||
void streaming_rollback(wsrep::unique_lock<wsrep::mutex>&);
|
void streaming_rollback(wsrep::unique_lock<wsrep::mutex>&);
|
||||||
int replay(wsrep::unique_lock<wsrep::mutex>&);
|
int replay(wsrep::unique_lock<wsrep::mutex>&);
|
||||||
void xa_replay_common(wsrep::unique_lock<wsrep::mutex>&);
|
void xa_replay_common(wsrep::unique_lock<wsrep::mutex>&);
|
||||||
|
@@ -614,18 +614,7 @@ int wsrep::transaction::after_commit()
|
|||||||
{
|
{
|
||||||
// XA fragment removal happens here,
|
// XA fragment removal happens here,
|
||||||
// see comment in before_prepare
|
// see comment in before_prepare
|
||||||
lock.unlock();
|
remove_fragments_in_storage_service_scope(lock);
|
||||||
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());
|
|
||||||
storage_service.adopt_transaction(*this);
|
|
||||||
storage_service.remove_fragments();
|
|
||||||
storage_service.commit(wsrep::ws_handle(), wsrep::ws_meta());
|
|
||||||
lock.lock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client_state_.mode() == wsrep::client_state::m_local)
|
if (client_state_.mode() == wsrep::client_state::m_local)
|
||||||
@@ -757,21 +746,7 @@ int wsrep::transaction::after_rollback()
|
|||||||
// MDL locks. It is not clear how to enforce that though.
|
// MDL locks. It is not clear how to enforce that though.
|
||||||
if (is_streaming() && bf_aborted_in_total_order_)
|
if (is_streaming() && bf_aborted_in_total_order_)
|
||||||
{
|
{
|
||||||
lock.unlock();
|
remove_fragments_in_storage_service_scope(lock);
|
||||||
// Storage service scope
|
|
||||||
{
|
|
||||||
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());
|
|
||||||
storage_service.adopt_transaction(*this);
|
|
||||||
storage_service.remove_fragments();
|
|
||||||
storage_service.commit(wsrep::ws_handle(), wsrep::ws_meta());
|
|
||||||
}
|
|
||||||
lock.lock();
|
|
||||||
streaming_context_.cleanup();
|
streaming_context_.cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -811,6 +786,26 @@ int wsrep::transaction::release_commit_order(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wsrep::transaction::remove_fragments_in_storage_service_scope(
|
||||||
|
wsrep::unique_lock<wsrep::mutex>& lock)
|
||||||
|
{
|
||||||
|
assert(lock.owns_lock());
|
||||||
|
lock.unlock();
|
||||||
|
{
|
||||||
|
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());
|
||||||
|
storage_service.adopt_transaction(*this);
|
||||||
|
storage_service.remove_fragments();
|
||||||
|
storage_service.commit(wsrep::ws_handle(), wsrep::ws_meta());
|
||||||
|
}
|
||||||
|
lock.lock();
|
||||||
|
}
|
||||||
|
|
||||||
int wsrep::transaction::after_statement()
|
int wsrep::transaction::after_statement()
|
||||||
{
|
{
|
||||||
int ret(0);
|
int ret(0);
|
||||||
|
Reference in New Issue
Block a user