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
|
||||
};
|
||||
|
||||
client_context(trrep::server_context& server_context,
|
||||
//
|
||||
// Client context constuctor
|
||||
//
|
||||
client_context(trrep::mutex& mutex,
|
||||
trrep::server_context& server_context,
|
||||
client_id id,
|
||||
enum mode mode)
|
||||
: mutex_()
|
||||
: mutex_(mutex)
|
||||
, server_context_(server_context)
|
||||
, id_(id)
|
||||
, mode_(mode)
|
||||
@ -130,7 +134,7 @@ namespace trrep
|
||||
|
||||
void state(enum state state);
|
||||
|
||||
trrep::mutex mutex_;
|
||||
trrep::mutex& mutex_;
|
||||
trrep::server_context& server_context_;
|
||||
client_id id_;
|
||||
enum mode mode_;
|
||||
|
@ -6,8 +6,10 @@
|
||||
#define TRREP_MOCK_SERVER_CONTEXT_HPP
|
||||
|
||||
#include "server_context.hpp"
|
||||
#include "mock_client_context.hpp"
|
||||
#include "mock_provider_impl.hpp"
|
||||
|
||||
|
||||
namespace trrep
|
||||
{
|
||||
class mock_server_context : public trrep::server_context
|
||||
@ -27,8 +29,8 @@ namespace trrep
|
||||
{ return mock_provider_impl_; }
|
||||
trrep::client_context* local_client_context()
|
||||
{
|
||||
return new trrep::client_context(*this, ++last_client_id_,
|
||||
trrep::client_context::m_local);
|
||||
return new trrep::mock_client_context(*this, ++last_client_id_,
|
||||
trrep::client_context::m_local);
|
||||
}
|
||||
|
||||
void on_connect() { }
|
||||
|
@ -11,20 +11,35 @@
|
||||
|
||||
namespace trrep
|
||||
{
|
||||
// Default pthread implementation
|
||||
|
||||
//!
|
||||
//!
|
||||
//!
|
||||
class mutex
|
||||
{
|
||||
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))
|
||||
{
|
||||
throw trrep::runtime_error("mutex init failed");
|
||||
}
|
||||
}
|
||||
~mutex()
|
||||
~default_mutex()
|
||||
{
|
||||
if (pthread_mutex_destroy(&mutex_))
|
||||
{
|
||||
@ -48,8 +63,6 @@ namespace trrep
|
||||
}
|
||||
}
|
||||
private:
|
||||
mutex(const mutex& other);
|
||||
mutex& operator=(const mutex& other);
|
||||
pthread_mutex_t mutex_;
|
||||
};
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
//
|
||||
|
||||
#include "transaction_context.hpp"
|
||||
#include "client_context.hpp"
|
||||
#include "mock_client_context.hpp"
|
||||
#include "mock_server_context.hpp"
|
||||
#include "provider.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::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);
|
||||
|
||||
// Verify initial state
|
||||
@ -98,7 +99,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_2pc)
|
||||
{
|
||||
trrep::mock_server_context sc("s1", "s1",
|
||||
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);
|
||||
|
||||
// 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::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);
|
||||
|
||||
// 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::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);
|
||||
|
||||
// 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::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);
|
||||
|
||||
// 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::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);
|
||||
|
||||
// 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::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);
|
||||
|
||||
// Verify initial state
|
||||
@ -354,7 +355,7 @@ BOOST_AUTO_TEST_CASE(transaction_context_1pc_applying)
|
||||
{
|
||||
trrep::mock_server_context sc("s1", "s1",
|
||||
trrep::server_context::rm_sync);
|
||||
trrep::client_context cc(sc,
|
||||
trrep::mock_client_context cc(sc,
|
||||
trrep::client_id(1),
|
||||
trrep::client_context::m_applier);
|
||||
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::server_context::rm_sync);
|
||||
trrep::client_context cc(sc,
|
||||
trrep::mock_client_context cc(sc,
|
||||
trrep::client_id(1),
|
||||
trrep::client_context::m_applier);
|
||||
trrep::transaction_context tc(applying_transaction(
|
||||
|
Reference in New Issue
Block a user