From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp61.i.mail.ru (smtp61.i.mail.ru [217.69.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 2AFB8445320 for ; Tue, 7 Jul 2020 02:31:29 +0300 (MSK) References: From: Vladislav Shpilevoy Message-ID: <0bfd227b-fb22-0b76-ff46-02c9e34b2851@tarantool.org> Date: Tue, 7 Jul 2020 01:31:26 +0200 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [Tarantool-patches] [PATCH] Add new error injection constant ERRINJ_SYNC_TIMEOUT List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: sergeyb@tarantool.org, tarantool-patches@dev.tarantool.org, sergepetrenko@tarantool.org, gorcunov@gmail.com, lvasiliev@tarantool.org Привет! On 06/07/2020 12:32, sergeyb@tarantool.org wrote: > From: Sergey Bronnikov > > 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 и не будет посылать аки.