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

Refactoring continued.

This commit is contained in:
Teemu Ollakka
2018-06-15 15:13:22 +03:00
parent 4fbf1d0cf8
commit b3f60b7be1
13 changed files with 197 additions and 89 deletions

View File

@ -649,6 +649,30 @@ namespace wsrep
enum wsrep::client_context::mode orig_mode_;
};
template <class D>
class scoped_client_context
{
public:
scoped_client_context(wsrep::client_context* client_context, D deleter)
: client_context_(client_context)
, deleter_(deleter)
{
if (client_context_ == 0)
{
throw wsrep::runtime_error("Null client_context provided");
}
}
wsrep::client_context& client_context() { return *client_context_; }
~scoped_client_context()
{
deleter_(client_context_);
}
private:
scoped_client_context(const scoped_client_context&);
scoped_client_context& operator=(const scoped_client_context&);
wsrep::client_context* client_context_;
D deleter_;
};
}

View File

@ -210,6 +210,8 @@ namespace wsrep
*/
virtual client_context* streaming_applier_client_context() = 0;
virtual void release_client_context(wsrep::client_context*) = 0;
void start_streaming_applier(
const wsrep::id&,
const wsrep::transaction_id&,
@ -442,6 +444,20 @@ namespace wsrep
int debug_log_level_;
};
class client_deleter
{
public:
client_deleter(wsrep::server_context& server_context)
: server_context_(server_context)
{ }
void operator()(wsrep::client_context* client_context)
{
server_context_.release_client_context(client_context);
}
private:
wsrep::server_context& server_context_;
};
static inline std::string to_string(enum wsrep::server_context::state state)
{
switch (state)