[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