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:
@ -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_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user