Skip to content

Commit d2f27ba

Browse files
committed
Add lock argument to server_service::background_rollback()
This is to allow implementation to temporarily release the lock if needed.
1 parent f8a20ff commit d2f27ba

File tree

6 files changed

+18
-5
lines changed

6 files changed

+18
-5
lines changed

dbsim/db_server_service.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ int db::server_service::start_sst(
8686
return 0;
8787
}
8888

89-
void db::server_service::background_rollback(wsrep::client_state&)
89+
void db::server_service::background_rollback(wsrep::unique_lock<wsrep::mutex>&,
90+
wsrep::client_state&)
9091
{
9192
}
9293

dbsim/db_server_service.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ namespace db
4141
bool sst_before_init() const override;
4242
int start_sst(const std::string&, const wsrep::gtid&, bool) override;
4343
std::string sst_request() override;
44-
void background_rollback(wsrep::client_state&) override;
44+
void background_rollback(wsrep::unique_lock<wsrep::mutex>&,
45+
wsrep::client_state&) override;
4546
void bootstrap() override;
4647
void log_message(enum wsrep::log::level, const char* message) override;
4748
void log_dummy_write_set(wsrep::client_state&, const wsrep::ws_meta&)

include/wsrep/server_service.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,14 @@ namespace wsrep
8585

8686
/**
8787
* Perform a background rollback for a transaction.
88+
*
89+
* @param lock Lock protecting client state.
90+
* @param client_state Client session to do background rollback
91+
* for.
8892
*/
89-
virtual void background_rollback(wsrep::client_state&) = 0;
93+
virtual void background_rollback(wsrep::unique_lock<wsrep::mutex>& lock,
94+
wsrep::client_state& client_state)
95+
= 0;
9096

9197
/**
9298
* Bootstrap a DBMS state for a new cluster.

src/transaction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,7 @@ bool wsrep::transaction::bf_abort(
10731073
}
10741074
}
10751075

1076-
server_service_.background_rollback(client_state_);
1076+
server_service_.background_rollback(lock, client_state_);
10771077
}
10781078
}
10791079
return ret;

test/mock_client_state.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ namespace wsrep
4949
(void)client_service().bf_rollback();
5050
}
5151
}
52+
void lock() { mutex_.lock(); }
53+
void unlock() { mutex_.unlock(); }
5254
private:
5355
wsrep::default_mutex mutex_;
5456
wsrep::default_condition_variable cond_;

test/mock_server_state.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,13 @@ namespace wsrep
184184
}
185185

186186
void
187-
background_rollback(wsrep::client_state& client_state) WSREP_OVERRIDE
187+
background_rollback(wsrep::unique_lock<wsrep::mutex>& lock,
188+
wsrep::client_state& client_state) WSREP_OVERRIDE
188189
{
190+
lock.unlock();
189191
client_state.before_rollback();
190192
client_state.after_rollback();
193+
lock.lock();
191194
}
192195

193196
int wait_committing_transactions(int) WSREP_OVERRIDE { return 0; }

0 commit comments

Comments
 (0)