Tinkoff / investAPI

399 stars 136 forks source link

Ограничения по времени выполнения запроса #248

Closed Shemplo closed 2 years ago

Shemplo commented 2 years ago

Доброго времени суток.

Я столкнулся с такой проблемой, пытаясь получить купоны по списку облигаций.

Exception in thread "pool-2-thread-1" ru.tinkoff.piapi.core.exception.ApiRuntimeException: deadline exceeded after 59.999823500s. [closed=[], open=[[remote_addr=invest-public-api.tinkoff.ru/91.194.227.80:443]]] unknown error tracking_id null
    at ru.tinkoff.piapi.core.utils.Helpers.apiRuntimeException(Helpers.java:55)
    at ru.tinkoff.piapi.core.utils.Helpers.unaryCall(Helpers.java:46)
    at ru.tinkoff.piapi.core.InstrumentsService.getBondCouponsSync(InstrumentsService.java:110)
        ...

Исполняемый код приведён ниже, при этом известно, что размер списка bonds сильно меньше даже 100 (хотя по таблице к сервису инструментов можно вообще отправлять по 200 запросов через gRPC). Кроме того, стрим по списку гарантированно синхронизированный, поэтому не может быть такого, что на сервер отправились пачкой 100 запросов, и метод getBondCouponsSync генерирует только 1 unary запрос.

final var bond2coupons = bonds.stream ()
    . flatMap (bond -> client.getInstrumentsService ().getBondCouponsSync (bond.getFigi (), from, to).stream ())
    . sorted (Comparator.comparing (coupon -> coupon.getCouponDate ().getSeconds ()))
    . collect (Collectors.groupingBy (Coupon::getFigi));

Столкнулся с такой проблемой впервые, и воспроизводится она всё утро. Буквально вчера вечером (29.08.2022) тот же самый код при тех же самых условиях работал без ошибки.

Создал Issue в этом репозитории, потому что это не похоже на ошибку Java SDK, но подозрительно выглядит то, что tracking_id нулевой.

Используемая версия Java SDK: 1.0.12

Shemplo commented 2 years ago

Ошибка больше не воспроизводится