[Tarantool-patches] [PATCH] Add new error injection constant ERRINJ_SYNC_TIMEOUT

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Tue Jul 7 02:31:26 MSK 2020


Привет!

On 06/07/2020 12:32, sergeyb at tarantool.org wrote:
> From: Sergey Bronnikov <sergeyb at tarantool.org>
> 
> Some tests for synchronous replication requires creation of a special state
> when replication_synchro_timeout is not exceeded. Greater timeout value will
> make tests longer and increase probability of flakiness. When constant
> ERRINJ_SYNC_TIMEOUT is set to true operation will stay in a state nor confirmed
> nor rolled back.

Честно говоря я не очень понял, как связаны ERRINJ_SYNC_TIMEOUT и синхра.
Место, куда ты добавил этот инджекшн, вообще никакого отношения к синхронной
репликации не имеет. Но это не главная проблема. См. дальше.

> diff --git a/src/box/replication.cc b/src/box/replication.cc
> index ef0e2411d..675a76a7e 100644
> --- a/src/box/replication.cc
> +++ b/src/box/replication.cc
> @@ -866,6 +867,9 @@ replicaset_sync(void)
>  	       replicaset.applier.loading >= quorum) {
>  		if (fiber_cond_wait_deadline(&replicaset.applier.cond,
>  					     deadline) != 0)
> +			ERROR_INJECT(ERRINJ_SYNC_TIMEOUT, {
> +				continue;
> +			});

Смысл errinj модуля в том, чтоб сымитировать реальные ошибки или
просто редкие пути выполнения. Конкретно этот путь невозможен
впринципе. Что делает этот errinj бесполезным. То есть он может
в теории что-то и помогает протестировать, но это что-то не будет
связано с реальностью.

Какую задачу ты хочешь тут решить? Выключить аки от репликации?
Посмотри в ERRINJ_APPLIER_SLOW_ACK. Или просто увеличь
replication_timeout. Или включи ERRINJ_WAL_DELAY на реплике - она
не будет ничего писать в WAL и не будет посылать аки.


More information about the Tarantool-patches mailing list