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

Work around GCC 12 warning of uninitialized use

Use pointers to pass state objects to service constructors
to work around GCC 12 warning

  error: member ‘wsrep::mock_storage_service::client_state_’
  is used uninitialized
This commit is contained in:
Teemu Ollakka
2023-02-26 10:31:07 +02:00
parent 9e8708af7e
commit 3b3429d8df
10 changed files with 46 additions and 42 deletions

View File

@ -108,7 +108,6 @@ wsrep::view db::storage_engine::get_view() const
void db::storage_engine::validate_position(const wsrep::gtid& gtid) const void db::storage_engine::validate_position(const wsrep::gtid& gtid) const
{ {
using std::rel_ops::operator<=;
if (position_.id() == gtid.id() && gtid.seqno() <= position_.seqno()) if (position_.id() == gtid.id() && gtid.seqno() <= position_.seqno())
{ {
std::ostringstream os; std::ostringstream os;

View File

@ -22,10 +22,12 @@
#include "wsrep/logger.hpp" #include "wsrep/logger.hpp"
#include <cassert> #include <cassert>
#include <cstdint>
#include <pthread.h> #include <pthread.h>
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
#include <array>
#include <chrono> #include <chrono>
#include <map> #include <map>
#include <mutex> #include <mutex>

View File

@ -553,8 +553,7 @@ namespace wsrep
return state(lock); return state(lock);
} }
enum state state(wsrep::unique_lock<wsrep::mutex>& enum state state(wsrep::unique_lock<wsrep::mutex>& lock) const;
lock WSREP_UNUSED) const;
/** /**
* Get provider status variables. * Get provider status variables.

View File

@ -165,7 +165,7 @@ namespace wsrep
void cleanup(); void cleanup();
private: private:
void check_fragment_seqno(wsrep::seqno seqno WSREP_UNUSED); void check_fragment_seqno(wsrep::seqno seqno);
size_t fragments_certified_; size_t fragments_certified_;
std::vector<wsrep::seqno> fragments_; std::vector<wsrep::seqno> fragments_;

View File

@ -31,7 +31,7 @@ namespace
struct replicating_client_fixture_sync_rm struct replicating_client_fixture_sync_rm
{ {
replicating_client_fixture_sync_rm() replicating_client_fixture_sync_rm()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc(sc, wsrep::client_id(1), , cc(sc, wsrep::client_id(1),
wsrep::client_state::m_local) wsrep::client_state::m_local)
@ -54,7 +54,7 @@ namespace
struct replicating_two_clients_fixture_sync_rm struct replicating_two_clients_fixture_sync_rm
{ {
replicating_two_clients_fixture_sync_rm() replicating_two_clients_fixture_sync_rm()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc1(sc, wsrep::client_id(1), , cc1(sc, wsrep::client_id(1),
wsrep::client_state::m_local) wsrep::client_state::m_local)
@ -83,7 +83,7 @@ namespace
struct replicating_client_fixture_async_rm struct replicating_client_fixture_async_rm
{ {
replicating_client_fixture_async_rm() replicating_client_fixture_async_rm()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_async, server_service) , sc("s1", wsrep::server_state::rm_async, server_service)
, cc(sc, wsrep::client_id(1), , cc(sc, wsrep::client_id(1),
wsrep::client_state::m_local) wsrep::client_state::m_local)
@ -106,7 +106,7 @@ namespace
struct replicating_client_fixture_2pc struct replicating_client_fixture_2pc
{ {
replicating_client_fixture_2pc() replicating_client_fixture_2pc()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc(sc, wsrep::client_id(1), , cc(sc, wsrep::client_id(1),
wsrep::client_state::m_local) wsrep::client_state::m_local)
@ -130,7 +130,7 @@ namespace
struct replicating_client_fixture_autocommit struct replicating_client_fixture_autocommit
{ {
replicating_client_fixture_autocommit() replicating_client_fixture_autocommit()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc(sc, wsrep::client_id(1), , cc(sc, wsrep::client_id(1),
wsrep::client_state::m_local) wsrep::client_state::m_local)
@ -154,7 +154,7 @@ namespace
struct applying_client_fixture struct applying_client_fixture
{ {
applying_client_fixture() applying_client_fixture()
: server_service(sc) : server_service(&sc)
, sc("s1", , sc("s1",
wsrep::server_state::rm_async, server_service) wsrep::server_state::rm_async, server_service)
, cc(sc, , cc(sc,
@ -193,7 +193,7 @@ namespace
struct applying_client_fixture_2pc struct applying_client_fixture_2pc
{ {
applying_client_fixture_2pc() applying_client_fixture_2pc()
: server_service(sc) : server_service(&sc)
, sc("s1", , sc("s1",
wsrep::server_state::rm_async, server_service) wsrep::server_state::rm_async, server_service)
, cc(sc, , cc(sc,
@ -228,7 +228,7 @@ namespace
struct streaming_client_fixture_row struct streaming_client_fixture_row
{ {
streaming_client_fixture_row() streaming_client_fixture_row()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc(sc, , cc(sc,
wsrep::client_id(1), wsrep::client_id(1),
@ -254,7 +254,7 @@ namespace
struct streaming_client_fixture_byte struct streaming_client_fixture_byte
{ {
streaming_client_fixture_byte() streaming_client_fixture_byte()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc(sc, , cc(sc,
wsrep::client_id(1), wsrep::client_id(1),
@ -279,7 +279,7 @@ namespace
struct streaming_client_fixture_statement struct streaming_client_fixture_statement
{ {
streaming_client_fixture_statement() streaming_client_fixture_statement()
: server_service(sc) : server_service(&sc)
, sc("s1", wsrep::server_state::rm_sync, server_service) , sc("s1", wsrep::server_state::rm_sync, server_service)
, cc(sc, , cc(sc,
wsrep::client_id(1), wsrep::client_id(1),

View File

@ -24,11 +24,11 @@
int wsrep::mock_client_service::bf_rollback() int wsrep::mock_client_service::bf_rollback()
{ {
int ret(0); int ret(0);
if (client_state_.before_rollback()) if (client_state_->before_rollback())
{ {
ret = 1; ret = 1;
} }
else if (client_state_.after_rollback()) else if (client_state_->after_rollback())
{ {
ret = 1; ret = 1;
} }
@ -38,11 +38,11 @@ int wsrep::mock_client_service::bf_rollback()
enum wsrep::provider::status enum wsrep::provider::status
wsrep::mock_client_service::replay() wsrep::mock_client_service::replay()
{ {
wsrep::mock_high_priority_service hps(client_state_.server_state(), wsrep::mock_high_priority_service hps(client_state_->server_state(),
&client_state_, true); client_state_, true);
enum wsrep::provider::status ret( enum wsrep::provider::status ret(
client_state_.provider().replay( client_state_->provider().replay(
client_state_.transaction().ws_handle(), client_state_->transaction().ws_handle(),
&hps)); &hps));
++replays_; ++replays_;
return ret; return ret;

View File

@ -60,7 +60,7 @@ namespace wsrep
class mock_client_service : public wsrep::client_service class mock_client_service : public wsrep::client_service
{ {
public: public:
mock_client_service(wsrep::mock_client_state& client_state) mock_client_service(wsrep::mock_client_state* client_state)
: wsrep::client_service() : wsrep::client_service()
, is_autocommit_() , is_autocommit_()
, do_2pc_() , do_2pc_()
@ -79,6 +79,8 @@ namespace wsrep
, unordered_replays_() , unordered_replays_()
, aborts_() , aborts_()
{ } { }
mock_client_service(const mock_client_service&) = delete;
mock_client_service& operator=(const mock_client_service&) = delete;
int bf_rollback() WSREP_OVERRIDE; int bf_rollback() WSREP_OVERRIDE;
@ -93,8 +95,8 @@ namespace wsrep
{ {
if (bf_abort_during_fragment_removal_) if (bf_abort_during_fragment_removal_)
{ {
client_state_.before_rollback(); client_state_->before_rollback();
client_state_.after_rollback(); client_state_->after_rollback();
return 1; return 1;
} }
else else
@ -122,7 +124,7 @@ namespace wsrep
lock.unlock(); lock.unlock();
if (bf_abort_during_wait_) if (bf_abort_during_wait_)
{ {
wsrep_test::bf_abort_unordered(client_state_); wsrep_test::bf_abort_unordered(*client_state_);
} }
lock.lock(); lock.lock();
} }
@ -135,7 +137,7 @@ namespace wsrep
} }
static const char buf[1] = { 1 }; static const char buf[1] = { 1 };
wsrep::const_buffer data = wsrep::const_buffer(buf, 1); wsrep::const_buffer data = wsrep::const_buffer(buf, 1);
return client_state_.append_data(data); return client_state_->append_data(data);
} }
void cleanup_transaction() WSREP_OVERRIDE { } void cleanup_transaction() WSREP_OVERRIDE { }
@ -158,7 +160,7 @@ namespace wsrep
buffer.push_back(&buf[0], &buf[1]); buffer.push_back(&buf[0], &buf[1]);
wsrep::const_buffer data(buffer.data(), buffer.size()); wsrep::const_buffer data(buffer.data(), buffer.size());
position = buffer.size(); position = buffer.size();
return client_state_.append_data(data); return client_state_->append_data(data);
} }
void store_globals() WSREP_OVERRIDE { } void store_globals() WSREP_OVERRIDE { }
@ -186,10 +188,10 @@ namespace wsrep
switch (sync_point_action_) switch (sync_point_action_)
{ {
case spa_bf_abort_unordered: case spa_bf_abort_unordered:
wsrep_test::bf_abort_unordered(client_state_); wsrep_test::bf_abort_unordered(*client_state_);
break; break;
case spa_bf_abort_ordered: case spa_bf_abort_ordered:
wsrep_test::bf_abort_ordered(client_state_); wsrep_test::bf_abort_ordered(*client_state_);
break; break;
} }
} }
@ -228,7 +230,7 @@ namespace wsrep
size_t unordered_replays() const { return unordered_replays_; } size_t unordered_replays() const { return unordered_replays_; }
size_t aborts() const { return aborts_; } size_t aborts() const { return aborts_; }
private: private:
wsrep::mock_client_state& client_state_; wsrep::mock_client_state* client_state_;
bool will_replay_called_; bool will_replay_called_;
size_t replays_; size_t replays_;
size_t unordered_replays_; size_t unordered_replays_;
@ -244,7 +246,7 @@ namespace wsrep
const wsrep::client_id& id, const wsrep::client_id& id,
enum wsrep::client_state::mode mode) enum wsrep::client_state::mode mode)
: mock_client_state(server_state, *this, id, mode) : mock_client_state(server_state, *this, id, mode)
, mock_client_service(static_cast<mock_client_state&>(*this)) , mock_client_service(static_cast<mock_client_state*>(this))
{ } { }
int after_row() int after_row()

View File

@ -34,7 +34,7 @@ namespace wsrep
class mock_server_service : public wsrep::server_service class mock_server_service : public wsrep::server_service
{ {
public: public:
mock_server_service(wsrep::server_state& server_state) mock_server_service(wsrep::server_state* server_state)
: sync_point_enabled_() : sync_point_enabled_()
, sync_point_action_() , sync_point_action_()
, sst_before_init_() , sst_before_init_()
@ -44,18 +44,20 @@ namespace wsrep
, logged_view_() , logged_view_()
, position_() , position_()
{ } { }
mock_server_service(const mock_server_service&) = delete;
mock_server_service& operator=(const mock_server_service&) = delete;
wsrep::storage_service* storage_service(wsrep::client_service&) wsrep::storage_service* storage_service(wsrep::client_service&)
WSREP_OVERRIDE WSREP_OVERRIDE
{ {
return new wsrep::mock_storage_service(server_state_, return new wsrep::mock_storage_service(*server_state_,
wsrep::client_id(++last_client_id_)); wsrep::client_id(++last_client_id_));
} }
wsrep::storage_service* storage_service(wsrep::high_priority_service&) wsrep::storage_service* storage_service(wsrep::high_priority_service&)
WSREP_OVERRIDE WSREP_OVERRIDE
{ {
return new wsrep::mock_storage_service(server_state_, return new wsrep::mock_storage_service(*server_state_,
wsrep::client_id(++last_client_id_)); wsrep::client_id(++last_client_id_));
} }
@ -70,11 +72,11 @@ namespace wsrep
WSREP_OVERRIDE WSREP_OVERRIDE
{ {
wsrep::mock_client* cs(new wsrep::mock_client( wsrep::mock_client* cs(new wsrep::mock_client(
server_state_, *server_state_,
wsrep::client_id(++last_client_id_), wsrep::client_id(++last_client_id_),
wsrep::client_state::m_high_priority)); wsrep::client_state::m_high_priority));
wsrep::mock_high_priority_service* ret( wsrep::mock_high_priority_service* ret(
new wsrep::mock_high_priority_service(server_state_, new wsrep::mock_high_priority_service(*server_state_,
cs, false)); cs, false));
cs->open(cs->id()); cs->open(cs->id());
cs->before_command(); cs->before_command();
@ -85,11 +87,11 @@ namespace wsrep
wsrep::high_priority_service&) WSREP_OVERRIDE wsrep::high_priority_service&) WSREP_OVERRIDE
{ {
wsrep::mock_client* cs(new wsrep::mock_client( wsrep::mock_client* cs(new wsrep::mock_client(
server_state_, *server_state_,
wsrep::client_id(++last_client_id_), wsrep::client_id(++last_client_id_),
wsrep::client_state::m_high_priority)); wsrep::client_state::m_high_priority));
wsrep::mock_high_priority_service* ret( wsrep::mock_high_priority_service* ret(
new wsrep::mock_high_priority_service(server_state_, new wsrep::mock_high_priority_service(*server_state_,
cs, false)); cs, false));
cs->open(cs->id()); cs->open(cs->id());
cs->before_command(); cs->before_command();
@ -115,7 +117,7 @@ namespace wsrep
void log_message(enum wsrep::log::level level, const char* message) void log_message(enum wsrep::log::level level, const char* message)
WSREP_OVERRIDE WSREP_OVERRIDE
{ {
wsrep::log(level, server_state_.name().c_str()) << message; wsrep::log(level, server_state_->name().c_str()) << message;
} }
void log_dummy_write_set(wsrep::client_state&, void log_dummy_write_set(wsrep::client_state&,
const wsrep::ws_meta&) const wsrep::ws_meta&)
@ -196,7 +198,7 @@ namespace wsrep
case spa_none: case spa_none:
break; break;
case spa_initialize: case spa_initialize:
server_state_.initialized(); server_state_->initialized();
break; break;
case spa_initialize_error: case spa_initialize_error:
throw wsrep::runtime_error("Inject initialization error"); throw wsrep::runtime_error("Inject initialization error");
@ -224,7 +226,7 @@ namespace wsrep
position_ = position; position_ = position;
} }
private: private:
wsrep::server_state& server_state_; wsrep::server_state* server_state_;
unsigned long long last_client_id_; unsigned long long last_client_id_;
unsigned long long last_transaction_id_; unsigned long long last_transaction_id_;
wsrep::view logged_view_; wsrep::view logged_view_;

View File

@ -25,7 +25,7 @@
wsrep::mock_storage_service::mock_storage_service( wsrep::mock_storage_service::mock_storage_service(
wsrep::server_state& server_state, wsrep::server_state& server_state,
wsrep::client_id client_id) wsrep::client_id client_id)
: client_service_(client_state_) : client_service_(&client_state_)
, client_state_(server_state, client_service_, client_id, , client_state_(server_state, client_service_, client_id,
wsrep::client_state::m_high_priority) wsrep::client_state::m_high_priority)
{ {

View File

@ -26,7 +26,7 @@ namespace
struct server_fixture_base struct server_fixture_base
{ {
server_fixture_base() server_fixture_base()
: server_service(ss) : server_service(&ss)
, ss("s1", , ss("s1",
wsrep::server_state::rm_sync, server_service) wsrep::server_state::rm_sync, server_service)
, cc(ss, , cc(ss,