В чем причина GoneException из Cosmos DB с асинхронными запросами?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 В чем причина GoneException из Cosmos DB с асинхронными запросами?

Сообщение Anonymous »

Я использую драйвер Cosmos Java 4.12.0 с текущим эмулятором Cosmos DB. Мне нужно написать несколько документов за один шаг. Мой код работает, если я использую API синхронизации. Чтобы повысить скорость, я пробую асинхронный API, и через некоторое время он терпит неудачу с GoneException. Что может быть причиной GoneException?

Код: Выделить всё

{
"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]"
}
Код выглядит так:

Код: Выделить всё

CosmosAsyncContainer fs = ...;
Mono mono = Mono.empty();
for( int i = 0; i < count; i++ ) {
doc = ...;
mono = mono.and( fs.createItem( doc ) );
}
mono.block();
Последняя строка этого кода вызывает исключение. Что не так в этом асинхронном коде? Есть ли другая концепция, которая лучше работает для нескольких документов?
Все документы используют один и тот же ключ раздела, поскольку позже документы также будут выполнять запросы вместе.
Изменить: после включения журнала отладки драйвера, если обнаружено, что это интересное вырезано на очень длинном выводе:

Код: Выделить всё

[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 секунд. Похоже, что время ожидания рассчитывается на основе времени создания элемента. Потому что создание элементов происходит намного быстрее, так как при передаче элементов в какой-то момент будет превышено время ожидания. Кажется, прогресс игнорируется.

Подробнее здесь: https://stackoverflow.com/questions/666 ... c-requests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»