diff --git a/include/wsrep/seqno.hpp b/include/wsrep/seqno.hpp index 2756337..9d8cedb 100644 --- a/include/wsrep/seqno.hpp +++ b/include/wsrep/seqno.hpp @@ -60,6 +60,17 @@ namespace wsrep { return (seqno_ > other.seqno_); } + + bool operator<=(seqno other) const + { + return !(seqno_ > other.seqno_); + } + + bool operator>=(seqno other) const + { + return !(seqno_ < other.seqno_); + } + bool operator==(seqno other) const { return (seqno_ == other.seqno_); diff --git a/include/wsrep/server_state.hpp b/include/wsrep/server_state.hpp index 4a6a344..0fa6420 100644 --- a/include/wsrep/server_state.hpp +++ b/include/wsrep/server_state.hpp @@ -387,16 +387,6 @@ namespace wsrep */ const wsrep::view& current_view() const { return current_view_; } - /** - * Set last committed GTID. - */ - void last_committed_gtid(const wsrep::gtid&); - /** - * Return the last committed GTID known to be committed - * on server. - */ - wsrep::gtid last_committed_gtid() const; - /** * Wait until all the write sets up to given GTID have been * committed. @@ -643,7 +633,6 @@ namespace wsrep , connected_gtid_() , previous_primary_view_() , current_view_() - , last_committed_gtid_() , rollback_event_queue_() { } @@ -725,7 +714,6 @@ namespace wsrep wsrep::gtid connected_gtid_; wsrep::view previous_primary_view_; wsrep::view current_view_; - wsrep::gtid last_committed_gtid_; std::deque rollback_event_queue_; }; diff --git a/src/server_state.cpp b/src/server_state.cpp index 869291d..1a2372a 100644 --- a/src/server_state.cpp +++ b/src/server_state.cpp @@ -731,6 +731,16 @@ void wsrep::server_state::sst_received(wsrep::client_service& cs, gtid = server_service_.get_position(cs); wsrep::log_info() << "Recovered position from storage: " << gtid; + + lock.lock(); + if (gtid.seqno() >= connected_gtid().seqno()) + { + /* Now the node has all the data the cluster has: part in + * storage, part in replication event queue. */ + state(lock, s_joined); + } + lock.unlock(); + wsrep::view const v(server_service_.get_view(cs, id_)); wsrep::log_info() << "Recovered view from SST:\n" << v; @@ -804,21 +814,6 @@ void wsrep::server_state::initialized() } } -void wsrep::server_state::last_committed_gtid(const wsrep::gtid& gtid) -{ - wsrep::unique_lock lock(mutex_); - assert(last_committed_gtid_.is_undefined() || - last_committed_gtid_.seqno() + 1 == gtid.seqno()); - last_committed_gtid_ = gtid; - cond_.notify_all(); -} - -wsrep::gtid wsrep::server_state::last_committed_gtid() const -{ - wsrep::unique_lock lock(mutex_); - return last_committed_gtid_; -} - enum wsrep::provider::status wsrep::server_state::wait_for_gtid(const wsrep::gtid& gtid, int timeout) const diff --git a/src/transaction.cpp b/src/transaction.cpp index 859e477..ac6495f 100644 --- a/src/transaction.cpp +++ b/src/transaction.cpp @@ -647,7 +647,6 @@ int wsrep::transaction::after_commit() assert(ret == 0); state(lock, s_committed); - // client_state_.server_state().last_committed_gtid(ws_meta.gitd()); debug_log_state("after_commit_leave"); return ret; }