mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-06-14 15:02:27 +03:00
Made trrep::mutex abstract class in order to allow DBMS integrations
to define their own instrumented mutex types.
This commit is contained in:
@ -53,10 +53,14 @@ namespace trrep
|
|||||||
s_quitting
|
s_quitting
|
||||||
};
|
};
|
||||||
|
|
||||||
client_context(trrep::server_context& server_context,
|
//
|
||||||
|
// Client context constuctor
|
||||||
|
//
|
||||||
|
client_context(trrep::mutex& mutex,
|
||||||
|
trrep::server_context& server_context,
|
||||||
client_id id,
|
client_id id,
|
||||||
enum mode mode)
|
enum mode mode)
|
||||||
: mutex_()
|
: mutex_(mutex)
|
||||||
, server_context_(server_context)
|
, server_context_(server_context)
|
||||||
, id_(id)
|
, id_(id)
|
||||||
, mode_(mode)
|
, mode_(mode)
|
||||||
@ -130,7 +134,7 @@ namespace trrep
|
|||||||
|
|
||||||
void state(enum state state);
|
void state(enum state state);
|
||||||
|
|
||||||
trrep::mutex mutex_;
|
trrep::mutex& mutex_;
|
||||||
trrep::server_context& server_context_;
|
trrep::server_context& server_context_;
|
||||||
client_id id_;
|
client_id id_;
|
||||||
enum mode mode_;
|
enum mode mode_;
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
#define TRREP_MOCK_SERVER_CONTEXT_HPP
|
#define TRREP_MOCK_SERVER_CONTEXT_HPP
|
||||||
|
|
||||||
#include "server_context.hpp"
|
#include "server_context.hpp"
|
||||||
|
#include "mock_client_context.hpp"
|
||||||
#include "mock_provider_impl.hpp"
|
#include "mock_provider_impl.hpp"
|
||||||
|
|
||||||
|
|
||||||
namespace trrep
|
namespace trrep
|
||||||
{
|
{
|
||||||
class mock_server_context : public trrep::server_context
|
class mock_server_context : public trrep::server_context
|
||||||
@ -27,8 +29,8 @@ namespace trrep
|
|||||||
{ return mock_provider_impl_; }
|
{ return mock_provider_impl_; }
|
||||||
trrep::client_context* local_client_context()
|
trrep::client_context* local_client_context()
|
||||||
{
|
{
|
||||||
return new trrep::client_context(*this, ++last_client_id_,
|
return new trrep::mock_client_context(*this, ++last_client_id_,
|
||||||
trrep::client_context::m_local);
|
trrep::client_context::m_local);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_connect() { }
|
void on_connect() { }
|
||||||
|
@ -11,20 +11,35 @@
|
|||||||
|
|
||||||
namespace trrep
|
namespace trrep
|
||||||
{
|
{
|
||||||
// Default pthread implementation
|
//!
|
||||||
|
//!
|
||||||
|
//!
|
||||||
class mutex
|
class mutex
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
mutex()
|
mutex() { }
|
||||||
: mutex_()
|
virtual ~mutex() { }
|
||||||
|
virtual void lock() = 0;
|
||||||
|
virtual void unlock() = 0;
|
||||||
|
private:
|
||||||
|
mutex(const mutex& other);
|
||||||
|
mutex& operator=(const mutex& other);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Default pthread implementation
|
||||||
|
class default_mutex : public trrep::mutex
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
default_mutex()
|
||||||
|
: trrep::mutex(),
|
||||||
|
mutex_()
|
||||||
{
|
{
|
||||||
if (pthread_mutex_init(&mutex_, 0))
|
if (pthread_mutex_init(&mutex_, 0))
|
||||||
{
|
{
|
||||||
throw trrep::runtime_error("mutex init failed");
|
throw trrep::runtime_error("mutex init failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
~mutex()
|
~default_mutex()
|
||||||
{
|
{
|
||||||
if (pthread_mutex_destroy(&mutex_))
|
if (pthread_mutex_destroy(&mutex_))
|
||||||
{
|
{
|
||||||
@ -48,8 +63,6 @@ namespace trrep
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
mutex(const mutex& other);
|
|
||||||
mutex& operator=(const mutex& other);
|
|
||||||
pthread_mutex_t mutex_;
|
pthread_mutex_t mutex_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "transaction_context.hpp"
|
#include "transaction_context.hpp"
|
||||||
#include "client_context.hpp"
|
#include "mock_client_context.hpp"
|
||||||
#include "mock_server_context.hpp"
|
#include "mock_server_context.hpp"
|
||||||
#include "provider.hpp"
|
#include "provider.hpp"
|
||||||
#include "mock_provider_impl.hpp"
|
#include "mock_provider_impl.hpp"
|
||||||
@ -58,7 +58,8 @@ BOOST_AUTO_TEST_CASE(transaction_context_1pc)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc,trrep::client_id(1),
|
||||||
|
trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -98,7 +99,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_2pc)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -145,7 +146,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_1pc_bf_before_before_commit)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -186,7 +187,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_2pc_bf_before_before_prepare)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -227,7 +228,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_2pc_bf_before_after_prepare)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -273,7 +274,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_1pc_bf_during_before_commit_uncertified
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -316,7 +317,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_1pc_bf_during_before_commit_certified)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
trrep::mock_client_context cc(sc, trrep::client_id(1), trrep::client_context::m_replicating);
|
||||||
trrep::transaction_context tc(cc);
|
trrep::transaction_context tc(cc);
|
||||||
|
|
||||||
// Verify initial state
|
// Verify initial state
|
||||||
@ -354,7 +355,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_1pc_applying)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc,
|
trrep::mock_client_context cc(sc,
|
||||||
trrep::client_id(1),
|
trrep::client_id(1),
|
||||||
trrep::client_context::m_applier);
|
trrep::client_context::m_applier);
|
||||||
trrep::transaction_context tc(applying_transaction(
|
trrep::transaction_context tc(applying_transaction(
|
||||||
@ -379,7 +380,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_2pc_applying)
|
|||||||
{
|
{
|
||||||
trrep::mock_server_context sc("s1", "s1",
|
trrep::mock_server_context sc("s1", "s1",
|
||||||
trrep::server_context::rm_sync);
|
trrep::server_context::rm_sync);
|
||||||
trrep::client_context cc(sc,
|
trrep::mock_client_context cc(sc,
|
||||||
trrep::client_id(1),
|
trrep::client_id(1),
|
||||||
trrep::client_context::m_applier);
|
trrep::client_context::m_applier);
|
||||||
trrep::transaction_context tc(applying_transaction(
|
trrep::transaction_context tc(applying_transaction(
|
||||||
|
Reference in New Issue
Block a user