В разделе приведено описание доступных таймаутов и представлены примеры использования на различных языках программирования.
Таймаут на операцию
Значение operation_timeout
определяет время, в течение которого результат запроса интересен пользователю. Если за данное время операция не выполнилась, сервер возвращает ошибку c кодом Timeout
и попытается прекратить выполнение запроса, однако отмена запроса не гарантируется. Таким образом, запрос, на который пользователю была возвращена ошибка Timeout
, может быть как успешно выполнен на сервере, так и отменен.
Таймаут отмены операции
Значение cancel_after
определяет время, через которое сервер начнет отмену запроса, если отменить запрос возможно. В случае успешной отмены запроса сервер вернет ошибку с кодом Cancelled
.
Транспортный таймаут
На каждый запрос клиент может выставить транспортный таймаут. Данное значение позволяет определить количество времени, которое клиент готов ждать ответа от сервера. Если за данное время сервер не ответил, то клиенту будет возвращена транспортная ошибка c кодом DeadlineExceeded
.
Применение таймаутов
Всегда рекомендуется устанавливать и таймаут на операцию и транспортный таймаут. Значение транспортного таймаута следует делать на 50-100 миллисекунд больше чем значение таймаута на операцию, чтобы оставался некоторый запас времени, за который клиент сможет получить серверную ошибку c кодом Timeout
.
Рассмотрим примеры использования таймаутов на различных языках программирования:
from kikimr.public.sdk.python import client as ydb
def execute_in_tx(session, query):
settings = ydb.BaseRequestSettings()
settings = settings.with_timeout(0.5) # transport timeout
settings = settings.with_operation_timeout(0.4) # operation timeout
settings = settings.with_cancel_after(0.4) # cancel after timeout
session.transaction().execute(
query,
commit_tx=True,
settings=settings,
)