Skip to content

ConnectionPool call timeouts don't work if tcp connection is not established in a long time

На данный момент ConnectionPoolWorker создаёт объект network client не передавая таймаут для tcp соединения (сорсы). И т.к. TcpStream::connect блочит весь файбер (см. tarantool-module#227 (closed)), в случае если соединение не может установиться долгое время, будут заблочены все rpc запросы к этому пиру, даже те, у которых маленький таймаут (обнаружилось тут: repro).

Более того, в ReconnClient пока невозможно указать таймаут для соединения.

Репро

репро можно брать тут: repro

Быстрое решение

Стоит добавить в ReconnClient проброс таймаута в TcpStream::connect_timeout (это можно сделать добавив connect_timeout config параметр (см.)

Системное решение

В tarantool-module#227 (closed) предложена реализация async-friendly TcpStream::connect, который бы также полностью решил данную проблему

Edited by Georgy Moshkin
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information