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

* Added size exceeded error code

* Return provider status from selected client_state calls
* Added more methods to provider interface
This commit is contained in:
Teemu Ollakka
2018-06-20 19:44:20 +03:00
parent bf7dad6815
commit ef0fb72b73
9 changed files with 109 additions and 15 deletions

View File

@ -196,7 +196,7 @@ wsrep::client_state::after_statement()
(void)transaction_.after_statement();
if (current_error() == wsrep::e_deadlock_error)
{
if (client_service_.is_autocommit())
if (mode_ == m_replicating && client_service_.is_autocommit())
{
debug_log_state("after_statement: may_retry");
return asr_may_retry;

View File

@ -506,6 +506,30 @@ int wsrep::wsrep_provider_v26::disconnect()
return ret;
}
int wsrep::wsrep_provider_v26::capabilities() const
{
return wsrep_->capabilities(wsrep_);
}
int wsrep::wsrep_provider_v26::desync()
{
return (wsrep_->desync(wsrep_) != WSREP_OK);
}
int wsrep::wsrep_provider_v26::resync()
{
return (wsrep_->resync(wsrep_) != WSREP_OK);
}
int wsrep::wsrep_provider_v26::pause()
{
return (wsrep_->pause(wsrep_) != WSREP_OK);
}
int wsrep::wsrep_provider_v26::resume()
{
return (wsrep_->resume(wsrep_) != WSREP_OK);
}
enum wsrep::provider::status
wsrep::wsrep_provider_v26::run_applier(void *applier_ctx)
{
@ -534,14 +558,15 @@ int wsrep::wsrep_provider_v26::append_key(wsrep::ws_handle& ws_handle,
!= WSREP_OK);
}
int wsrep::wsrep_provider_v26::append_data(wsrep::ws_handle& ws_handle,
enum wsrep::provider::status
wsrep::wsrep_provider_v26::append_data(wsrep::ws_handle& ws_handle,
const wsrep::const_buffer& data)
{
const wsrep_buf_t wsrep_buf = {data.data(), data.size()};
mutable_ws_handle mwsh(ws_handle);
return (wsrep_->append_data(wsrep_, mwsh.native(), &wsrep_buf,
1, WSREP_DATA_ORDERED, true)
!= WSREP_OK);
return map_return_value(
wsrep_->append_data(wsrep_, mwsh.native(), &wsrep_buf,
1, WSREP_DATA_ORDERED, true));
}
enum wsrep::provider::status
@ -674,6 +699,35 @@ wsrep::wsrep_provider_v26::status() const
return ret;
}
void wsrep::wsrep_provider_v26::reset_status()
{
wsrep_->stats_reset(wsrep_);
}
std::string wsrep::wsrep_provider_v26::options() const
{
std::string ret;
char* opts;
if ((opts = wsrep_->options_get(wsrep_)))
{
ret = opts;
free(opts);
}
else
{
throw wsrep::runtime_error("Failed to get provider options");
}
return ret;
}
void wsrep::wsrep_provider_v26::options(const std::string& opts)
{
if (wsrep_->options_set(wsrep_, opts.c_str()) != WSREP_OK)
{
throw wsrep::runtime_error("Failed to set provider options");
}
}
void* wsrep::wsrep_provider_v26::native() const
{
return wsrep_;

View File

@ -21,11 +21,18 @@ namespace wsrep
int connect(const std::string&, const std::string&, const std::string&,
bool);
int disconnect();
int capabilities() const;
int desync();
int resync();
int pause();
int resume();
enum wsrep::provider::status run_applier(void*);
int start_transaction(wsrep::ws_handle&) { return 0; }
int append_key(wsrep::ws_handle&, const wsrep::key&);
int append_data(wsrep::ws_handle&, const wsrep::const_buffer&);
enum wsrep::provider::status
append_data(wsrep::ws_handle&, const wsrep::const_buffer&);
enum wsrep::provider::status
certify(wsrep::client_id, wsrep::ws_handle&,
int,
@ -46,6 +53,9 @@ namespace wsrep
int sst_received(const wsrep::gtid& gtid, int);
std::vector<status_variable> status() const;
void reset_status();
std::string options() const;
void options(const std::string&);
void* native() const;
private:
wsrep_provider_v26(const wsrep_provider_v26&);