mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-30 07:23:07 +03:00
handle certification error explicitly when entering TOI
This commit is contained in:
committed by
Teemu Ollakka
parent
922ce579c7
commit
e0f9550967
@ -415,12 +415,22 @@ int wsrep::client_state::enter_toi_local(const wsrep::key_array& keys,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case wsrep::provider::error_certification_failed:
|
||||||
|
override_error(e_deadlock_error, status);
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
override_error(wsrep::e_error_during_commit,
|
override_error(e_error_during_commit, status);
|
||||||
status);
|
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret && !toi_meta_.seqno().is_undefined())
|
||||||
|
{
|
||||||
|
wsrep::mutable_buffer err;
|
||||||
|
provider().leave_toi(id_, err);
|
||||||
|
}
|
||||||
|
|
||||||
debug_log_state("enter_toi_local: leave");
|
debug_log_state("enter_toi_local: leave");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -543,18 +553,22 @@ int wsrep::client_state::begin_nbo_phase_one(
|
|||||||
mode(lock, m_nbo);
|
mode(lock, m_nbo);
|
||||||
ret= 0;
|
ret= 0;
|
||||||
break;
|
break;
|
||||||
default:
|
case wsrep::provider::error_certification_failed:
|
||||||
override_error(e_deadlock_error, status);
|
override_error(e_deadlock_error, status);
|
||||||
if (!toi_meta_.seqno().is_undefined())
|
ret = 1;
|
||||||
{
|
break;
|
||||||
// TODO(leandro): do we need to pass sth here? is leave_toi necessary here? enter_toi_local doesn't do it.
|
default:
|
||||||
wsrep::mutable_buffer err;
|
override_error(e_error_during_commit, status);
|
||||||
provider().leave_toi(id_, err);
|
ret = 1;
|
||||||
}
|
|
||||||
toi_meta_ = wsrep::ws_meta();
|
|
||||||
ret= 1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret && !toi_meta_.seqno().is_undefined())
|
||||||
|
{
|
||||||
|
wsrep::mutable_buffer err;
|
||||||
|
provider().leave_toi(id_, err);
|
||||||
|
}
|
||||||
|
|
||||||
debug_log_state("begin_nbo_phase_one: leave");
|
debug_log_state("begin_nbo_phase_one: leave");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -637,6 +651,9 @@ int wsrep::client_state::begin_nbo_phase_two(
|
|||||||
ret= 1;
|
ret= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(leandro): should we check for defined toi_meta_ on error and call leave_toi?
|
||||||
|
|
||||||
debug_log_state("begin_nbo_phase_two: leave");
|
debug_log_state("begin_nbo_phase_two: leave");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user