在java aerospike客户端6.0.0中,线程在records.next()调用中无限期阻塞,但是我们在queryPolicy中将totalTimeout设置为30秒。甚至发生这种情况,我们的集合中没有任何特定二级索引值的数据。我们没有在查询中遇到失败,但应用程序挂在 recordSet next 函数中。我附上了回溯和代码片段,请提出解决方案。
代码如下:
Map<Key, Record> map = new HashMap<Key, Record>();
RecordSet records = null;
try {
records = aerospike.getAerospikeClient().query(aerospike.getQueryPolicy(), stmt);;
while(records!=null && records.next())
{
Record record = records.getRecord();
Key key = records.getKey();
map.put(key, record);
}
}
异常追踪如下:
io.vertx.core.VertxException:线程在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) 的 sun.misc.Unsafe.park(Native Method) ~[?:1.8.0_131] 处被阻塞~[?:1.8.0_131] 在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) ~[?:1.8.0_131] 在 java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue. java:403) ~[?:1.8.0_131] 在 com.aerospike.client.query.RecordSet.next(RecordSet.java:66) ~[JioUdmProv.jar:?] 在 rjil.udmp.jioudmp.aerospike.AeroSpikeInterface。查询(AeroSpikeInterface.java:546) ~[JioUdmProv.jar:?]
我们尝试在查询策略中将 TotalTimeout 设置为 30 秒,但没有成功。
可能值得检查更新的 Java 客户端版本?
特别想知道版本 6.1.6中的以下修复是否可以适用于此处:
CLIENT-2112 在检查 PartitionTracker.isComplete() 中的错误之前重置前台查询“完成”指示器。这解决了运行在多次可重试错误后失败的查询时潜在的挂起问题。