微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cosmos Java SDK 抛出异常 x-ms-substatus=10002

如何解决Cosmos Java SDK 抛出异常 x-ms-substatus=10002

我们将 Cosmos DB 与 Spring 数据结合使用

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-spring-data-cosmos</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-cosmos</artifactId>
            <version>4.8.0</version>
        </dependency>

对于某些请求,(间歇性地),我们会看到一些错误,例如 -

1.无法更新项目;嵌套异常是 CosmosException

2.找不到项目;嵌套异常为 CosmosException :应为其进行查询的项目可用。

3. DocumentProducer - 意外失败

{userAgent=azsdk-java-cosmos/4.8.0 Linux/5.3.0-1035-azure JRE/1.8.0_291,error=null,resourceAddress='null',requestUri='null',statusCode=0,message=null,{"userAgent":"azsdk-java-cosmos/4.8.0 Linux/5.3.0-1035-azure JRE/1.8.0_291","requestLatencyInMs":60073,"requestStartTimeUTC":"2021-06-25T05:31:17.150Z","requestEndTimeUTC":"2021-06-25T05:32:17.223Z","connectionMode":"GATEWAY","responseStatisticslist":[],"supplementalResponseStatisticslist":[],"addressResolutionStatistics":{},"regionsContacted":[],"retryContext":{"retryCount":0,"statusAndSubStatusCodes":null,"retryLatency":0},"MetadataDiagnosticsContext":{"MetadataDiagnosticList":null},"serializationDiagnosticsContext":{"serializationDiagnosticslist":[{"serializationType":"ITEM_SERIALIZATION","startTimeUTC":"2021-06-25T05:31:17.150Z","endTimeUTC":"2021-06-25T05:31:17.150Z","durationInMicroSec":0},{"serializationType":"PARTITION_KEY_FETCH_SERIALIZATION","durationInMicroSec":0}]},"gatewayStatistics":{"sessionToken":null,"operationType":"Upsert","statusCode":0,"subStatusCode":10002,"requestCharge":null,"requestTimeline":null},"systeminformation":{"usedMemory":"264619 KB","availableMemory":"3789909 KB","systemcpuLoad":"(2021-06-25T05:31:50.445Z 2.0%),(2021-06-25T05:31:55.445Z 2.0%),(2021-06-25T05:32:00.445Z 2.0%),(2021-06-25T05:32:05.445Z 2.0%),(2021-06-25T05:32:10.445Z 2.0%),(2021-06-25T05:32:15.445Z 2.0%)"},"clientCfgs":{"id":0,"numberOfClients":2,"connCfg":{"rntbd":null,"gw":"(cps:1000,rto:PT5S,icto:PT1M,p:false)","other":"(ed: true,cs: false)"},"consistencyCfg":"(consistency: null,mm: true,prgns: [southcentralus,westus])"}},causeInfo=[class: class io.netty.handler.timeout.ReadTimeoutException,message: null],responseHeaders={x-ms-substatus=10002},requestHeaders=[Accept=application/json,x-ms-date=Fri,25 Jun 2021 05:31:17 GMT,x-ms-documentdb-partitionkey=["xxxxx"],x-ms-documentdb-is-upsert=true,Content-Type=application/json]}

Stacktrace 没有显示太多信息,如果需要,我可以在这里附上。在所有这些情况下,我们在日志中只看到一个响应头 -

responseHeaders={x-ms-substatus=10002}

我们有以下问题 -

  • 这个状态是什么意思?我们的 Cosmos 帮助团队正在询问 Activityid,我们无法在日志中找到这些错误的 Activityid。在这些情况下,我如何添加 activityId?我无法使用 ResponseDiagnosticsProcessor,因为它需要其他 spring cosmos 依赖项。

  • 这些错误的可能原因是什么?

  • 在堆栈跟踪中,为什么所有这些都显示 - io.netty.handler.timeout.ReadTimeoutException还有吗?

  • 我们如何调试这些错误

注意:。我们没有使用 Gremlin API 并在网关模式下连接,我们看到这些错误次数非常少,可能不到 Cosmos 请求总数的 0.05%

解决方法

子状态 10002 与 HTTP 超时有关。由于您处于网关模式,因此您的操作通过 HTTP 执行是有意义的。

在设计或编写分布式应用程序时,您始终需要考虑超时。 SDK 确实会在超时时重试(基于 https://docs.microsoft.com/azure/cosmos-db/troubleshoot-java-sdk-v4-sql#retry-logic-),但应用程序应该始终有一些超时重试层,因为它们可能因各种原因(网络信号、偶发性资源争用)而发生。

您提到您看到这不到总请求的 0.05%,这还不错,但值得检查 Java 超时指南中的区域:https://docs.microsoft.com/azure/cosmos-db/troubleshoot-request-timeout-java-sdk-v4-sql

服务端延迟高峰也可能导致超时(不太可能,但可能会发生),这是您提到的支持团队可能会提供帮助的一个方面。从诊断来看,您的请求超时似乎是 5 秒,因此任何延迟超过 5 秒的网关请求都会生成一个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?