Я пытаюсь создать приложение на основе GCP Firestore и поэтому использую библиотеку google-cloud-firestore. Я хочу транслировать результаты своего запроса через потоковый API Query, но через 60 с получаю исключение StatusRuntimeException. Похоже, время операции истекло. Где я могу увеличить этот тайм-аут?
Что я, наконец, хочу сделать, - это создать поток с Flux, который выводит огромное количество данных из Firestore на основе запроса.
Я просто пытался найти возможность увеличить время ожидания с помощью FirestoreOptions, но не нашел работающего решения для этого. Я вижу, что где-то во время инициализации потока был установлен rpcTimeout 60-х годов. Но я не совсем уверен, что это правильно. Также я не нашел места для его установки.
Используемый мной метод:
com.google.cloud.firestore.Query
Query.stream(@Nonnull final ApiStreamObserver<DocumentSnapshot> responseObserver)
Исключение через ~ 60 с:
com.google.api.gax.rpc.UnavailableException: io.grpc.StatusRuntimeException: UNAVAILABLE: The datastore operation timed out, or the data was temporarily unavailable.
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:69)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
...
Отредактировано
Только что выяснилось, что в общем случае можно перезаписать настройки по умолчанию для тайм-аутов, но не для потоковых методов. Как говорит соответствующий метод в FirestoreSettings:
/**
* Applies the given settings updater function to all of the unary API methods in this service.
*
* <p>Note: This method does not support applying settings to streaming methods.
*/
Это действительно раздражает, поскольку у меня не было намерений создавать поток на основе подкачки с помощью курсоров.