Aerospike java 客户端 RecordSet 下一个函数在查询一组后无限长时间挂起

问题描述 投票:0回答:1

在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 秒,但没有成功。

aerospike
1个回答
0
投票

可能值得检查更新的 Java 客户端版本?

特别想知道版本 6.1.6中的以下修复是否可以适用于此处:

CLIENT-2112 在检查 PartitionTracker.isComplete() 中的错误之前重置前台查询“完成”指示器。这解决了运行在多次可重试错误后失败的查询时潜在的挂起问题。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.