1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-21 12:22:06 +03:00

Removed wsrep_api.h dependency from view.hpp

This commit is contained in:
Teemu Ollakka
2018-06-18 20:39:25 +03:00
parent 60fb119fa1
commit d1a1e298e9
9 changed files with 151 additions and 86 deletions

View File

@ -8,6 +8,8 @@
#include "id.hpp" #include "id.hpp"
#include "seqno.hpp" #include "seqno.hpp"
#include <iosfwd>
namespace wsrep namespace wsrep
{ {
class gtid class gtid
@ -27,6 +29,8 @@ namespace wsrep
wsrep::id id_; wsrep::id id_;
wsrep::seqno seqno_; wsrep::seqno seqno_;
}; };
std::ostream& operator<<(std::ostream&, const wsrep::gtid&);
} }
#endif // WSREP_GTID_HPP #endif // WSREP_GTID_HPP

View File

@ -193,6 +193,30 @@ namespace wsrep
static const int snapshot = (1 << 7); static const int snapshot = (1 << 7);
}; };
/**
* Provider capabilities.
*/
struct capabilities
{
static const int multi_master = (1 << 0);
static const int certification = (1 << 1);
static const int parallel_applying = (1 << 2);
static const int transaction_replay = (1 << 3);
static const int isolation = (1 << 4);
static const int pause = (1 << 5);
static const int causal_reads = (1 << 6);
static const int causal_transaction = (1 << 7);
static const int incremental_writeset = (1 << 8);
static const int session_locks = (1 << 9);
static const int distributed_locks = (1 << 10);
static const int consistency_check = (1 << 11);
static const int unordered = (1 << 12);
static const int annotation = (1 << 13);
static const int preordered = (1 << 14);
static const int streaming = (1 << 15);
static const int snapshot = (1 << 16);
static const int nbo = (1 << 17);
};
provider(wsrep::server_state& server_state) provider(wsrep::server_state& server_state)
: server_state_(server_state) : server_state_(server_state)
{ } { }

View File

@ -2,11 +2,16 @@
// Copyright (C) 2018 Codership Oy <info@codership.com> // Copyright (C) 2018 Codership Oy <info@codership.com>
// //
/** @file view.hpp
*
*
*/
#ifndef WSREP_VIEW_HPP #ifndef WSREP_VIEW_HPP
#define WSREP_VIEW_HPP #define WSREP_VIEW_HPP
#include <wsrep_api.h> #include "id.hpp"
#include <vector> #include <vector>
namespace wsrep namespace wsrep
@ -14,76 +19,78 @@ namespace wsrep
class view class view
{ {
public: public:
enum status
{
primary,
non_primary,
disconnected
};
class member class member
{ {
public: public:
member(const wsrep_member_info_t& member_info) member(const wsrep::id& id,
: id_() const std::string& name,
, name_(member_info.name, WSREP_MEMBER_NAME_LEN) const std::string& incoming)
, incoming_(member_info.incoming, WSREP_INCOMING_LEN) : id_(id)
, name_(name)
, incoming_(incoming)
{ {
char uuid_str[WSREP_UUID_STR_LEN + 1];
wsrep_uuid_print(&member_info.id, uuid_str, sizeof(uuid_str));
id_ = uuid_str;
} }
const std::string& id() const { return id_; } const wsrep::id& id() const { return id_; }
const std::string& name() const { return name_; } const std::string& name() const { return name_; }
const std::string& incoming() const { return incoming_; } const std::string& incoming() const { return incoming_; }
private: private:
std::string id_; wsrep::id id_;
std::string name_; std::string name_;
std::string incoming_; std::string incoming_;
}; };
view(const wsrep_view_info_t& view_info) view(const wsrep::gtid& state_id,
: state_id_(view_info.state_id) wsrep::seqno view_seqno,
, view_(view_info.view) enum wsrep::view::status status,
, status_(view_info.status) int capabilities,
, capabilities_(view_info.capabilities) ssize_t own_index,
, my_idx_(view_info.my_idx) int protocol_version,
, proto_ver_(view_info.proto_ver) const std::vector<wsrep::view::member>& members)
, members_() : state_id_(state_id)
{ , view_seqno_(view_seqno)
for (int i(0); i < view_info.memb_num; ++i) , status_(status)
{ , capabilities_(capabilities)
members_.push_back(view_info.members[i]); , own_index_(own_index)
} , protocol_version_(protocol_version)
} , members_(members)
{ }
wsrep::gtid state_id() const
{ return state_id_; }
wsrep_seqno_t id() const wsrep::seqno view_seqno() const
{ return view_; } { return view_seqno_; }
wsrep_view_status_t status() const
wsrep::view::status status() const
{ return status_; } { return status_; }
int own_index() const
{ return my_idx_; }
std::vector<member> members() const ssize_t own_index() const
{ { return own_index_; }
std::vector<member> ret;
for (std::vector<wsrep_member_info_t>::const_iterator i(members_.begin()); const std::vector<member>& members() const { return members_; }
i != members_.end(); ++i)
{ /**
ret.push_back(member(*i)); * Return true if the view is final
} */
return ret;
}
//
// Return true if the view is final
//
bool final() const bool final() const
{ {
return (members_.empty() && my_idx_ == -1); return (members_.empty() && own_index_ == -1);
} }
private: private:
wsrep_gtid_t state_id_; wsrep::gtid state_id_;
wsrep_seqno_t view_; wsrep::seqno view_seqno_;
wsrep_view_status_t status_; enum wsrep::view::status status_;
wsrep_cap_t capabilities_; int capabilities_;
int my_idx_; ssize_t own_index_;
int proto_ver_; int protocol_version_;
std::vector<wsrep_member_info_t> members_; std::vector<wsrep::view::member> members_;
}; };
} }

View File

@ -4,6 +4,7 @@
add_library(wsrep-lib add_library(wsrep-lib
client_state.cpp client_state.cpp
gtid.cpp
id.cpp id.cpp
logger.cpp logger.cpp
provider.cpp provider.cpp

12
src/gtid.cpp Normal file
View File

@ -0,0 +1,12 @@
//
// Copyright (C) 2018 Codership Oy <info@codership.com>
//
#include "wsrep/gtid.hpp"
#include <iostream>
std::ostream& wsrep::operator<<(std::ostream& os, const wsrep::gtid& gtid)
{
return (os << gtid.id() << ":" << gtid.seqno());
}

View File

@ -1,31 +0,0 @@
//
// Copyright (C) 2018 Codership Oy <info@codership.com>
//
#ifndef WSREP_PROVIDER_IMPL_HPP
#define WSREP_PROVIDER_IMPL_HPP
#include <wsrep_api.h>
namespace wsrep
{
// Abstract interface for provider implementations
class provider_impl
{
public:
virtual int start_transaction(wsrep_ws_handle_t*) = 0;
virtual int append_key(wsrep_ws_handle_t*, const wsrep_key_t*) = 0;
virtual int append_data(wsrep_ws_handle_t*, const wsrep_buf_t*) = 0;
virtual wsrep_status_t
certify(wsrep_conn_id_t, wsrep_ws_handle_t*,
uint32_t,
wsrep_trx_meta_t*) = 0;
virtual int rollback(const wsrep_trx_id_t) = 0;
virtual wsrep_status commit_order_enter(wsrep_ws_handle_t*) = 0;
virtual int commit_order_leave(wsrep_ws_handle_t*) = 0;
virtual int release(wsrep_ws_handle_t*) = 0;
};
}
#endif // WSREP_PROVIDER_IMPL_HPP

View File

@ -87,7 +87,7 @@ void wsrep::server_state::on_connect()
void wsrep::server_state::on_view(const wsrep::view& view) void wsrep::server_state::on_view(const wsrep::view& view)
{ {
wsrep::log() << "================================================\nView:\n" wsrep::log() << "================================================\nView:\n"
<< "id: " << view.id() << "\n" << "id: " << view.state_id() << "\n"
<< "status: " << view.status() << "\n" << "status: " << view.status() << "\n"
<< "own_index: " << view.own_index() << "\n" << "own_index: " << view.own_index() << "\n"
<< "final: " << view.final() << "\n" << "final: " << view.final() << "\n"

View File

@ -231,6 +231,54 @@ namespace
wsrep_trx_meta_t trx_meta_; wsrep_trx_meta_t trx_meta_;
}; };
enum wsrep::view::status map_view_status_from_native(
wsrep_view_status_t status)
{
switch (status)
{
case WSREP_VIEW_PRIMARY: return wsrep::view::primary;
case WSREP_VIEW_NON_PRIMARY: return wsrep::view::non_primary;
case WSREP_VIEW_DISCONNECTED: return wsrep::view::disconnected;
default: throw wsrep::runtime_error("Unknown view status");
}
}
/** @todo Currently capabilities defined in provider.hpp
* are one to one with wsrep_api.h. However, the mapping should
* be made explicit. */
int map_capabilities_from_native(wsrep_cap_t capabilities)
{
return capabilities;
}
wsrep::view view_from_native(const wsrep_view_info& view_info)
{
std::vector<wsrep::view::member> members;
for (int i(0); i < view_info.memb_num; ++i)
{
wsrep::id id(view_info.members[i].id.data, sizeof(view_info.members[i].id.data));
std::string name(
view_info.members[i].name,
strnlen(view_info.members[i].name,
sizeof(view_info.members[i].name)));
std::string incoming(
view_info.members[i].incoming,
strnlen(view_info.members[i].incoming,
sizeof(view_info.members[i].incoming)));
members.push_back(wsrep::view::member(id, name, incoming));
}
return wsrep::view(
wsrep::gtid(
wsrep::id(view_info.state_id.uuid.data,
sizeof(view_info.state_id.uuid.data)),
wsrep::seqno(view_info.state_id.seqno)),
wsrep::seqno(view_info.view),
map_view_status_from_native(view_info.status),
map_capabilities_from_native(view_info.capabilities),
view_info.my_idx,
view_info.proto_ver,
members);
}
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
// Callbacks // // Callbacks //
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
@ -269,7 +317,7 @@ namespace
*reinterpret_cast<wsrep::server_state*>(app_ctx)); *reinterpret_cast<wsrep::server_state*>(app_ctx));
try try
{ {
wsrep::view view(*view_info); wsrep::view view(view_from_native(*view_info));
server_state.on_view(view); server_state.on_view(view);
return WSREP_CB_SUCCESS; return WSREP_CB_SUCCESS;
} }

View File

@ -7,7 +7,7 @@
#include "wsrep/provider.hpp" #include "wsrep/provider.hpp"
#include <wsrep_api.h> struct wsrep_st;
namespace wsrep namespace wsrep
{ {
@ -49,7 +49,7 @@ namespace wsrep
private: private:
wsrep_provider_v26(const wsrep_provider_v26&); wsrep_provider_v26(const wsrep_provider_v26&);
wsrep_provider_v26& operator=(const wsrep_provider_v26); wsrep_provider_v26& operator=(const wsrep_provider_v26);
wsrep_t* wsrep_; struct wsrep_st* wsrep_;
}; };
} }