我使用的是Ignite.NET 2.7.6,有时它会崩溃
( Apache.Ignite.Core.Impl.Unmanaged.UnmanagedCallbacks.CacheEntryFilterApply(long
memPtr)
因为var t、==空和t.Invoke(流)抛出NullPointerException。
我做错了什么来引发这个问题?
在上述方法中添加了:stream.ReadLong()返回0,因此表达式
_ignite.HandleRegistry.Get(stream.ReadLong())
获取id == 0的过滤器持有人,该id看起来是无效的。
可能的解决方案:我使用这样的二进制过滤器创建扫描查询:
cursor = cache.WithKeepBinary.Query(new ScanQuery(myFilter))稍后,我在一个单独的线程中使用这个游标来收集结果:从其中获取一个枚举数并遍历对象。
但是,我有一个逻辑错误,可能导致游标被释放时的情况,但是相应的迭代器调用MoveNext或Current。在这种情况下,不会抛出任何异常,并调用上面提到的JNI处理程序,从而导致异常,从而导致Ignite的未定义行为。
我会看看这个问题是否解决了,并将报告结果。
发布于 2019-10-31 14:52:42
我可以确认,如果从多个线程中使用IQueryCursor<K, V>实例,并且一个线程处理它,而另一个线程枚举它,则竞争条件是可能的。
查询游标不是线程安全的,它们应该从单个线程中使用.
https://stackoverflow.com/questions/58632391
复制相似问题