[Tarantool-patches] [PATCH 2/2] box: introduce a cfg handle to become syncro leader
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Tue Jul 21 00:13:09 MSK 2020
Hi! Thanks for the review!
>> diff --git a/src/box/box.cc b/src/box/box.cc
>> index ca24b98ca..087710383 100644
>> --- a/src/box/box.cc
>> +++ b/src/box/box.cc
>> @@ -78,6 +78,7 @@
>> #include "sequence.h"
>> #include "sql_stmt_cache.h"
>> #include "msgpack.h"
>> +#include "trivia/util.h"
>> static char status[64] = "unknown";
>> @@ -945,6 +946,84 @@ box_set_replication_anon(void)
>> }
>> +void
>> +box_set_replication_synchro_leader(void)
>> +{
>> + bool is_leader = cfg_geti("replication_synchro_leader");
>> + /*
>> + * For now no actions required when an instance stops
>> + * being a leader. We should probably wait until txn_limbo
>> + * becomes empty.
>> + */
>> + if (!is_leader)
>> + return;
>> + uint32_t former_leader_id = txn_limbo.instance_id;
>> + if (former_leader_id == REPLICA_ID_NIL ||
>> + former_leader_id == instance_id) {
>> + return;
>> + }
>> +
>> + /* Wait until pending confirmations/rollbacks reach us. */
>> + double timeout = 2 * txn_limbo_confirm_timeout(&txn_limbo);
>> + double start_tm = fiber_time();
>> + while (!txn_limbo_is_empty(&txn_limbo)) {
>> + if (fiber_time() - start_tm > timeout)
>
> From the d988d7fb92fe1dda4b64218fb06813e93eb56ed1 commit comment:
> "
> ...use fiber_clock() instead of fiber_time() for timeouts
>
> fiber_time() reports real time, which shouldn't be used for calculating
> timeouts as it is affected by system time changes. Add fiber_clock()
> based on ev_monotonic_now(), export it to Lua, and use it instead.
> ".
Indeed. I've sent a patch fixing it.
More information about the Tarantool-patches
mailing list