Я использую драйвер Cosmos Java 4.12.0 с текущим эмулятором Cosmos DB. Мне нужно написать несколько документов за один шаг. Мой код работает, если я использую API синхронизации. Чтобы повысить скорость, я пробую асинхронный API, и через некоторое время он терпит неудачу с GoneException. Что может быть причиной GoneException?
Последняя строка этого кода вызывает исключение. Что не так в этом асинхронном коде? Есть ли другая концепция, которая лучше работает для нескольких документов?
Все документы используют один и тот же ключ раздела, поскольку позже документы также будут выполнять запросы вместе.
Изменить: после включения журнала отладки драйвера, если обнаружено, что это интересное вырезано на очень длинном выводе:
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] SessionTokenMismatchRetryPolicy not retrying because StatusCode or SubStatusCode not found.
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] received response to cancelled request: {"request":{},"response":{"type":{},"value":{}}}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] Operation will NOT be retried. Current attempt {}, Exception:
[Azure Cosmos,WARN ,3/14 17:34:04,#00031] Operation will NOT be retried. Write operations which failed due to transient transport errors can not be retried safely when sending the request to the service because they arent idempotent. Current attempt {}, Exception:
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {}
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] Operation will NOT be retried. Exception:
[Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] {"ClassName":"GoneException","userAgent":"azsdk-java-cosmos/4.12.0 Windows10/10.0 JRE/11.0.7","statusCode":410,"resourceAddress":"rntbd://10.10.10.16:10253/apps/DocDbApp/services/DocDbServer15/partitions/a4cb495b-38c8-11e6-8106-8cdcd42c33be/replicas/1p/","i
nnerErrorMessage":"AsyncRntbdRequestRecord({\"args\":{\"transportRequestId\":102,\"activityId\":\"13ddd623-84e3-11eb-a42d-d5052d2cf638\",\"origin\":\"rntbd://10.10.10.16:10253\",\"replicaPath\":\"/apps/DocDbApp/services/DocDbServer15/partitions/a4cb495b-38c8-11e6-8106-8cdcd42c33be/replicas/1p\",\"ti
meCreated\":\"2021-03-14T16:33:59.072819500Z\",\"lifetime\":\"PT5.0601317S\"},\"requestLength\":333849,\"responseLength\":-1,\"status\":{\"done\":false,\"cancelled\":false,\"completedExceptionally\":false},\"timeline\":[{\"eventName\":\"created\",\"startTimeUTC\":\"2021-03-14T16:33:59.072819500Z\",\
"durationInMicroSec\":995},{\"eventName\":\"queued\",\"startTimeUTC\":\"2021-03-14T16:33:59.073815300Z\",\"durationInMicroSec\":0},{\"eventName\":\"channelAcquisitionStarted\",\"startTimeUTC\":\"2021-03-14T16:33:59.073815300Z\",\"durationInMicroSec\":997},{\"eventName\":\"pipelined\",\"startTimeUTC\
":\"2021-03-14T16:33:59.074812500Z\",\"durationInMicroSec\":1255947},{\"eventName\":\"transitTime\",\"startTimeUTC\":\"2021-03-14T16:34:00.330760Z\",\"durationInMicroSec\":3802608},{\"eventName\":\"received\",\"startTimeUTC\":null,\"durationInMicroSec\":0},{\"eventName\":\"completed\",\"startTimeUTC
\":null,\"durationInMicroSec\":0}]})","causeInfo":null,"responseHeaders":"{}","requestHeaders":"[Accept=application/json, x-ms-date=Sun, 14 Mar 2021 16:33:59 GMT, x-ms-documentdb-collection-rid=woU8APC+j8k=, x-ms-client-retry-attempt-count=0, Prefer=return=minimal, x-ms-documentdb-partitionkey=[\"/t
est/doc/large.pdf\"], x-ms-remaining-time-in-ms-on-client=60000, Content-Type=application/json]"}
[Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestRecord.expire(RntbdRequestRecord.java:229)
[Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66)
[Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
[Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
[Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at java.base/java.lang.Thread.run(Thread.java:834)
Edit2: основной причиной является тайм-аут. Время ожидания Cosmsos DB по умолчанию составляет 5 секунд. Ошибка возникает примерно через 5-6 секунд. Похоже, что время ожидания рассчитывается на основе времени создания элемента. Потому что создание элементов происходит намного быстрее, так как при передаче элементов в какой-то момент будет превышено время ожидания. Кажется, прогресс игнорируется.
Я использую драйвер Cosmos Java 4.12.0 с текущим эмулятором Cosmos DB. Мне нужно написать несколько документов за один шаг. Мой код работает, если я использую API синхронизации. Чтобы повысить скорость, я пробую асинхронный API, и через некоторое время он терпит неудачу с GoneException. Что может быть причиной GoneException? [code]{ "ClassName":"GoneException", "userAgent":"azsdk-java-cosmos/4.12.0 Windows10/10.0 JRE/11.0.7", "statusCode":410, "resourceAddress":"rntbd://10.10.10.10:10253/apps/DocDbApp/services/DocDbServer15/partitions/a4cb495b-38c8-11e6-8106-8cdcd42c33be/replicas/1p/", "innerErrorMessage":"AsyncRntbdRequestRecord({\"args\":{\"transportRequestId\":102,\"activityId\":\"13ddd623-84e3-11eb-a42d-d5052d2cf638\", \"origin\":\"rntbd://10.10.10.10:10253\", \"replicaPath\":\"/apps/DocDbApp/services/DocDbServer15/partitions/a4cb495b-38c8-11e6-8106-8cdcd42c33be/replicas/1p\", \"timeCreated\":\"2021-03-14T16:33:59.072819500Z\", \"lifetime\":\"PT5.0601317S\"}, \"requestLength\":333849, \"responseLength\":-1, \"status\":{\"done\":false,\"cancelled\":false, \"completedExceptionally\":false}, \"timeline\":[ {\"eventName\":\"created\",\"startTimeUTC\":\"2021-03-14T16:33:59.072819500Z\",\"durationInMicroSec\":995}, {\"eventName\":\"queued\",\"startTimeUTC\":\"2021-03-14T16:33:59.073815300Z\",\"durationInMicroSec\":0}, {\"eventName\":\"channelAcquisitionStarted\",\"startTimeUTC\":\"2021-03-14T16:33:59.073815300Z\",\"durationInMicroSec\":997}, {\"eventName\":\"pipelined\",\"startTimeUTC\":\"2021-03-14T16:33:59.074812500Z\",\"durationInMicroSec\":1255947}, {\"eventName\":\"transitTime\",\"startTimeUTC\":\"2021-03-14T16:34:00.330760Z\",\"durationInMicroSec\":3802608}, {\"eventName\":\"received\",\"startTimeUTC\":null,\"durationInMicroSec\":0}, {\"eventName\":\"completed\",\"startTimeUTC\":null,\"durationInMicroSec\":0} ]})", "causeInfo":null, "responseHeaders":"{}", "requestHeaders":"[Accept=application/json, x-ms-date=Sun, 14 Mar 2021 16:33:59 GMT, x-ms-documentdb-collection-rid=woU8APC+j8k=, x-ms-client-retry-attempt-count=0, Prefer=return=minimal, x-ms-documentdb-partitionkey=[\"/test/doc/foobar\"], x-ms-remaining-time-in-ms-on-client=60000, Content-Type=application/json]" } [/code] Код выглядит так: [code]CosmosAsyncContainer fs = ...; Mono mono = Mono.empty(); for( int i = 0; i < count; i++ ) { doc = ...; mono = mono.and( fs.createItem( doc ) ); } mono.block(); [/code] Последняя строка этого кода вызывает исключение. Что не так в этом асинхронном коде? Есть ли другая концепция, которая лучше работает для нескольких документов? Все документы используют один и тот же ключ раздела, поскольку позже документы также будут выполнять запросы вместе. Изменить: после включения журнала отладки драйвера, если обнаружено, что это интересное вырезано на очень длинном выводе: [code][Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] SessionTokenMismatchRetryPolicy not retrying because StatusCode or SubStatusCode not found. [Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] received response to cancelled request: {"request":{},"response":{"type":{},"value":{}}} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] Operation will NOT be retried. Current attempt {}, Exception: [Azure Cosmos,WARN ,3/14 17:34:04,#00031] Operation will NOT be retried. Write operations which failed due to transient transport errors can not be retried safely when sending the request to the service because they arent idempotent. Current attempt {}, Exception: [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00024] {} [Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] Operation will NOT be retried. Exception: [Azure Cosmos,DEBUG ,3/14 17:34:04,#00031] {"ClassName":"GoneException","userAgent":"azsdk-java-cosmos/4.12.0 Windows10/10.0 JRE/11.0.7","statusCode":410,"resourceAddress":"rntbd://10.10.10.16:10253/apps/DocDbApp/services/DocDbServer15/partitions/a4cb495b-38c8-11e6-8106-8cdcd42c33be/replicas/1p/","i nnerErrorMessage":"AsyncRntbdRequestRecord({\"args\":{\"transportRequestId\":102,\"activityId\":\"13ddd623-84e3-11eb-a42d-d5052d2cf638\",\"origin\":\"rntbd://10.10.10.16:10253\",\"replicaPath\":\"/apps/DocDbApp/services/DocDbServer15/partitions/a4cb495b-38c8-11e6-8106-8cdcd42c33be/replicas/1p\",\"ti meCreated\":\"2021-03-14T16:33:59.072819500Z\",\"lifetime\":\"PT5.0601317S\"},\"requestLength\":333849,\"responseLength\":-1,\"status\":{\"done\":false,\"cancelled\":false,\"completedExceptionally\":false},\"timeline\":[{\"eventName\":\"created\",\"startTimeUTC\":\"2021-03-14T16:33:59.072819500Z\",\ "durationInMicroSec\":995},{\"eventName\":\"queued\",\"startTimeUTC\":\"2021-03-14T16:33:59.073815300Z\",\"durationInMicroSec\":0},{\"eventName\":\"channelAcquisitionStarted\",\"startTimeUTC\":\"2021-03-14T16:33:59.073815300Z\",\"durationInMicroSec\":997},{\"eventName\":\"pipelined\",\"startTimeUTC\ ":\"2021-03-14T16:33:59.074812500Z\",\"durationInMicroSec\":1255947},{\"eventName\":\"transitTime\",\"startTimeUTC\":\"2021-03-14T16:34:00.330760Z\",\"durationInMicroSec\":3802608},{\"eventName\":\"received\",\"startTimeUTC\":null,\"durationInMicroSec\":0},{\"eventName\":\"completed\",\"startTimeUTC \":null,\"durationInMicroSec\":0}]})","causeInfo":null,"responseHeaders":"{}","requestHeaders":"[Accept=application/json, x-ms-date=Sun, 14 Mar 2021 16:33:59 GMT, x-ms-documentdb-collection-rid=woU8APC+j8k=, x-ms-client-retry-attempt-count=0, Prefer=return=minimal, x-ms-documentdb-partitionkey=[\"/t est/doc/large.pdf\"], x-ms-remaining-time-in-ms-on-client=60000, Content-Type=application/json]"} [Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestRecord.expire(RntbdRequestRecord.java:229) [Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66) [Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [Azure Cosmos,TRACE ,3/14 17:34:04,#00031] at java.base/java.lang.Thread.run(Thread.java:834) [/code] Edit2: основной причиной является тайм-аут. Время ожидания Cosmsos DB по умолчанию составляет 5 секунд. Ошибка возникает примерно через 5-6 секунд. Похоже, что время ожидания рассчитывается на основе времени создания элемента. Потому что создание элементов происходит намного быстрее, так как при передаче элементов в какой-то момент будет превышено время ожидания. Кажется, прогресс игнорируется.