Skip to content

Commit ece5942

Browse files
committed
Assertion server_id.is_undefined() in fails certify_fragment()
Handle the case where server_id is undefined in before fragment certification. This may happen if the server is disconnected right before replicating a fragment.
1 parent 4bbb694 commit ece5942

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/transaction.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,6 +1531,8 @@ int wsrep::transaction::certify_fragment(
15311531
flags(flags() | wsrep::provider::flag::implicit_deps);
15321532
}
15331533

1534+
client_service_.debug_sync("wsrep_before_fragment_append");
1535+
15341536
int ret(0);
15351537
enum wsrep::client_error error(wsrep::e_success);
15361538
enum wsrep::provider::status cert_ret(wsrep::provider::success);
@@ -1549,14 +1551,21 @@ int wsrep::transaction::certify_fragment(
15491551
// available to store the fragment. The fragment meta data
15501552
// is updated after certification.
15511553
wsrep::id server_id(client_state_.server_state().id());
1552-
assert(server_id.is_undefined() == false);
1553-
if (storage_service.start_transaction(ws_handle_) ||
1554+
if (server_id.is_undefined())
1555+
{
1556+
// we can't append a fragment with undefined server_id
1557+
// server has disconnected?
1558+
ret = 1;
1559+
error = wsrep::e_append_fragment_error;
1560+
}
1561+
1562+
if (!ret && (storage_service.start_transaction(ws_handle_) ||
15541563
storage_service.append_fragment(
15551564
server_id,
15561565
id(),
15571566
flags(),
15581567
wsrep::const_buffer(data.data(), data.size()),
1559-
xid()))
1568+
xid())))
15601569
{
15611570
ret = 1;
15621571
error = wsrep::e_append_fragment_error;

0 commit comments

Comments
 (0)