mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-30 07:23:07 +03:00
Handle assert server_id_.is_undefined == false
Return an error if server_id_ is undefined before fragment certification. This may happen if the server disconnects from the cluster, right before a transactions attempts to replicate a fragment.
This commit is contained in:
@ -1535,14 +1535,22 @@ int wsrep::transaction::certify_fragment(
|
|||||||
// available to store the fragment. The fragment meta data
|
// available to store the fragment. The fragment meta data
|
||||||
// is updated after certification.
|
// is updated after certification.
|
||||||
wsrep::id server_id(client_state_.server_state().id());
|
wsrep::id server_id(client_state_.server_state().id());
|
||||||
assert(server_id.is_undefined() == false);
|
|
||||||
if (storage_service.start_transaction(ws_handle_) ||
|
if (server_id.is_undefined()) {
|
||||||
storage_service.append_fragment(
|
// Server disconnected from cluster, do not
|
||||||
server_id,
|
// append a fragment with undefined server_id.
|
||||||
id(),
|
ret = 1;
|
||||||
flags(),
|
error = wsrep::e_append_fragment_error;
|
||||||
wsrep::const_buffer(data.data(), data.size()),
|
}
|
||||||
xid()))
|
|
||||||
|
if (ret == 0 &&
|
||||||
|
(storage_service.start_transaction(ws_handle_) ||
|
||||||
|
storage_service.append_fragment(
|
||||||
|
server_id,
|
||||||
|
id(),
|
||||||
|
flags(),
|
||||||
|
wsrep::const_buffer(data.data(), data.size()),
|
||||||
|
xid())))
|
||||||
{
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
error = wsrep::e_append_fragment_error;
|
error = wsrep::e_append_fragment_error;
|
||||||
|
Reference in New Issue
Block a user