RejectedExecutionException в AppEngine с Firestore при обновлении в DeferredTask, если я не жду - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть DeferredTask в проекте App Engine для асинхронного импорта данных в Firestore, который выглядит примерно так:

public void run() {
    FirestoreOptions options = ...
    try (Firestore db = options.getService()) {
        CollectionReference placesCollection = db.collection("MyCollection");
        Map<String, Object> data = new HashMap<>();
        data.put("key", "value");
        DocumentReference doc = placesCollection.document("MyId");
        doc.set(data)
    } catch (Exception e) {
        ...
    }
}

Код выполняется без ошибок, но после завершения метода я вижуисключение в консоли, и в мою коллекцию не было записано никаких данных:

java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@7be031d1 rejected from java.util.concurrent.ScheduledThreadPoolExecutor@6808a2d4[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
  at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
  at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
  at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:326)
  at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:533)

Если я жду завершения записи, я не вижу исключения:

doc.set(data).get();  // block for write to complete

Является липроблема в том, что мое соединение Firestore закрывается при выходе из области try-with-resources, или что вам просто нужно дождаться завершения ApiFuture, возвращаемого set ()?Я думал, что идея асинхронных записей Firestore заключается в том, что вы можете запустить их, и если вам не нужно завершать, вам не нужно ждать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...