-
Notifications
You must be signed in to change notification settings - Fork 4
Таймауты #29
Comments
На самом деле, SyncClient почти не тестируется. Предполагается, что он является некой built-in оберткой над ядром -- AsyncClient'ом, который является основным. Так что сразу не подскажу по SyncClient'у, нужно посмотреть. Точно должен работать AsyncClient, там при connect_timeout вызывается переданный callback с ошибкой. В основном сейчас пока пишут такую обертку вида |
Я докопал до следующего: В функции Но затем вызывается что-то еще, где уже важен тормозящий Тарантул. Но таймаута для connect_timeout УЖЕ нет, а таймаут для request_timeout на это что-то похоже ЕЩЁ не действует. |
Похоже, что дело в вызове функции На этом этапе (уже после Но всё это происходит внутри Подозреваю, что это баг. Можете проверить? |
Ребята? |
Сорри за задержку. Я посмотрю. |
В принципе во всех коннекторах это реализовано так, что максимальный таймаут на соединение это коннект + рид, именно из-за природы операции коннекта (для тарантула):
Так что я не уверен, что это стоит решать единым таймаутом на коннект. |
Эм... не совсем понял. Вы подтверждаете, что хендшейк не контролируется таймаутом, но полагаете, что так и нужно? Но это же довольно-таки опасно получается. Это приведет к зависанию приложения без каких-либо варнингов. Я чего копаться-то полез - у меня как-раз так и вышло, всё висело и при этом ни на что не жаловалось. Всё это в обязательном порядке придется накрывать самодельным таймаутом. А раз обязательно - то прям просится сделать это в самом модуле... |
Я утверждаю что:
Смысла всё это подпихивать в connect_timeout нет, ибо выходит что максимальное время вполне измеримо. Вот это я утверждаю. То что handshake read висит бесконечно - нет, я не утверждаю что так должно быть. |
Хорошо, пусть хендшейк контролируется request_timeout. Но дело-то в том, что сейчас он не контролируется никаким таймаутом. |
Да, всё верно, @ivanych, на вычитывание handshake-данных таймаута нет :( Спасибо. Постараюсь поскорее пофиксить. |
@limpasha Удалось пофиксить? |
Пытаюсь установить таймаут на подключение к Тарантулу. Для имитации аварии замедлил Тарантул по максимуму (урезал ему процессор и память, чтобы он еле шевелился).
Использую DR::Tarantool::MsgPack::SyncClient.
Передаю ему таймауты так:
Я ожидаю, что если соединение не установится за 1 секунду, то процесс прервется и вылетит какой-нибудь эксепшен.
Но процесс не прерывается. Все зависает на строке
my ($self) = $cv->recv;
в функцииconnect
модуляDR::Tarantool::MsgPack::SyncClient
. Определил просто понаставив варнингов в разных местах. До этой функции доходит и на ней всё останавливается и дальше ничего не происходит.Это я что-то не так делаю? Может быть,
SyncClient
вообще не умеет работать с таймаутами?The text was updated successfully, but these errors were encountered: