在我试图运行跨分区查询的代码中,it.hasNext()行被卡住了。无法在此进一步调试:
public List<MyDataObject> getList() {
List<Document> documentList =null;
List<MyDataObject> returnList = new ArrayList<>();
try {
FeedOptions feedOptions = new FeedOptions();
feedOptions.setEnableCrossPartitionQuery(true);
SqlQuerySpec querySpec = null;
querySpec = new SqlQuerySpec("SELECT * FROM MyDataObjectColl");
Iterator<FeedResponse<Document>> getDataFromCosmos = myDocumentClient.queryDocuments(collectionLink, querySpec, feedOptions).toBlocking().getIterator();
while (getDataFromCosmos.hasNext()) { //GETTING STUCK ON THIS LINE FOR SOME REASON
FeedResponse<Document> page = getDataFromCosmos.next();
System.out.println("Request Unit Cost for getList " + page.getRequestCharge());
documentList = page.getResults();
for (Document doc : documentList) {
if (doc != null) {
returnList.add(gson.fromJson(doc.toJson(), MyDataObject.class));
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return returnList;
}SDK版本:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-cosmosdb</artifactId>
<version>2.4.4</version>
</dependency>嘿,CosmosDB内部专家,请指出是什么导致了这种行为,我怀疑有些库正在被封锁,请帮助。
发布于 2019-09-17 18:05:35
由于怀疑是版本问题导致了这种情况,基本上,我的应用程序内部库使用的是commons-lang3的以下版本:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.1</version>
</dependency>但是azure-cosmosdb 2.4.4需要不同的:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>详细说明:基本上在FetchExecutionRangeAccumulator类的内部使用一行this.stopwatch.getTime(TimeUnit.MILLISECONDS),但是long getTime(final TimeUnit timeUnit)存在于3.8.1版本的Common-Lang3中,而不是3.3.1中,因此它在内部陷入轮询代码,如果重试相同的代码流,则会间歇性地抛出异常(在Common-lang3中找不到的方法)。
https://stackoverflow.com/questions/57968220
复制相似问题