SDK
- Что делать, если SDK экстренно завершает работу при завершении работы приложения?
- Что делать, если при вызове fork() в дочернем процессе программа работает некорректно?
- Что делать, если я получаю ошибку «Active sessions limit exceeded», хотя текущее количество активных сессий не превышает лимит?
- Есть ли возможность делать запросы к разным БД из одного приложения?
- Что делать, если отказала одна из ВМ и невозможно сделать запрос?
Что делать, если SDK экстренно завершает работу при завершении работы приложения?
Не следует оборачивать компоненты SDK в синглтон, так как время их жизни не должно превышать время выполнения функции main()
. Так как при уничтожении клиента происходит опустошение пулов сессий, требуется возможность перехода по сети. Но gPRC содержит глобальные статические переменные, которые к этому времени уже могут быть разрушены. Таким образом, работа gRPC невозможна. При необходимости сделать драйвер глобальным объектом, на драйвере нужно вызвать функцию Stop(true)
перед выходом из main()
.
fork()
в дочернем процессе программа работает некорректно?
Что делать, если при вызове Вызов fork()
в многопоточных приложениях является антипаттерном. Так как и SDK, и gRPC-библиотека являются многопоточными приложениями, стабильность их работы не гарантируется.
Что делать, если я получаю ошибку «Active sessions limit exceeded», хотя текущее количество активных сессий не превышает лимит?
Лимит действует на количество активных сессий. Активная сессия — сессия, переданная клиенту для использования в его коде. Сессия возвращается в пул в деструкторе. При этом, сама сессия является копируемым объектом. Возможно, вы сохранили в коде копию сессии.
Есть ли возможность делать запросы к разным БД из одного приложения?
Да, C++ SDK позволяет переопределять параметры БД и токен в момент создания клиента. Отдельные драйверы создавать не нужно.
Что делать, если отказала одна из ВМ и невозможно сделать запрос?
Чтобы выявить недоступность ВМ, нужно проставить клиентский таймаут. Все запросы содержат параметры для клиентского таймаута. Величина таймаута должна быть на порядок больше ожидаемого времени выполнения запроса.