Hey all,
I'm using Apache Ignite .NET ver. 2.4.0#20180305-sha1:aa342270, running
multiple caches.
One of the caches holds entries which expire after a while.
At some point of operation I observed that two of my transactions raised
exceptions when being commited by me.
Both transactions were used on different threads (18 and 27), and the work
being done in the transaction was on different caches (one of them was the
cache which holds expiring items).
This is the log output I got:
11.04 16:41:33,845 WARN [ 18] pter.StatusEventProcessor : Exception while
processing status event
Apache.Ignite.Core.Common.IgniteException: Java exception occurred
[class=java.lang.NullPointerException, message=] --->
Apache.Ignite.Core.Common.JavaException: java.lang.NullPointerException
at
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:197)
at
org.apache.ignite.internal.processors.cache.GridCacheUtils.unwindEvicts(GridCacheUtils.java:834)
at
org.apache.ignite.internal.processors.cache.GridCacheUtils.unwindEvicts(GridCacheUtils.java:844)
at
org.apache.ignite.internal.processors.cache.transactions.TransactionProxyImpl.leave(TransactionProxyImpl.java:136)
at
org.apache.ignite.internal.processors.cache.transactions.TransactionProxyImpl.close(TransactionProxyImpl.java:326)
at
org.apache.ignite.internal.processors.platform.transactions.PlatformTransactions.txClose(PlatformTransactions.java:136)
at
org.apache.ignite.internal.processors.platform.transactions.PlatformTransactions.processInLongOutLong(PlatformTransactions.java:178)
at
org.apache.ignite.internal.processors.platform.PlatformTargetProxyImpl.inLongOutLong(PlatformTargetProxyImpl.java:55)
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Env.ExceptionCheck()
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Env.CallLongMethod(GlobalRef obj,
IntPtr methodId, Int64* argsPtr)
at
Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils.TargetInLongOutLong(GlobalRef
target, Int32 opType, Int64 memPtr)
at Apache.Ignite.Core.Impl.PlatformJniTarget.InLongOutLong(Int32 type, Int64
val)
--- End of inner exception stack trace ---
at Apache.Ignite.Core.Impl.PlatformJniTarget.InLongOutLong(Int32 type, Int64
val)
at Apache.Ignite.Core.Impl.Transactions.TransactionImpl.Close()
at Apache.Ignite.Core.Impl.Transactions.TransactionImpl.Dispose()
at MY CODE DOING THE TRANSACTION COMMIT
11.04 16:41:33,900 ERROR [ 27] ite.WorkHeapCacheListener :
Apache.Ignite.Core.Common.IgniteException: Java exception occurred
[class=java.lang.NullPointerException, message=] --->
Apache.Ignite.Core.Common.JavaException: java.lang.NullPointerException
at
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:197)
at
org.apache.ignite.internal.processors.cache.GridCacheUtils.unwindEvicts(GridCacheUtils.java:834)
at
org.apache.ignite.internal.processors.cache.GridCacheUtils.unwindEvicts(GridCacheUtils.java:844)
at
org.apache.ignite.internal.processors.cache.transactions.TransactionProxyImpl.leave(TransactionProxyImpl.java:136)
at
org.apache.ignite.internal.processors.cache.transactions.TransactionProxyImpl.close(TransactionProxyImpl.java:326)
at
org.apache.ignite.internal.processors.platform.transactions.PlatformTransactions.txClose(PlatformTransactions.java:136)
at
org.apache.ignite.internal.processors.platform.transactions.PlatformTransactions.processInLongOutLong(PlatformTransactions.java:178)
at
org.apache.ignite.internal.processors.platform.PlatformTargetProxyImpl.inLongOutLong(PlatformTargetProxyImpl.java:55)
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Env.ExceptionCheck()
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Env.CallLongMethod(GlobalRef obj,
IntPtr methodId, Int64* argsPtr)
at
Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils.TargetInLongOutLong(GlobalRef
target, Int32 opType, Int64 memPtr)
at Apache.Ignite.Core.Impl.PlatformJniTarget.InLongOutLong(Int32 type, Int64
val)
--- End of inner exception stack trace ---
at Apache.Ignite.Core.Impl.PlatformJniTarget.InLongOutLong(Int32 type, Int64
val)
at Apache.Ignite.Core.Impl.Transactions.TransactionImpl.Close()
at Apache.Ignite.Core.Impl.Transactions.TransactionImpl.Dispose()
at MY CODE DOING THE TRANSACTION COMMIT
The code in GridCacheTtlManager.java:197 is "boolean more =
cctx.offheap().expire(dhtCtx, expireC, amount);" and my guess is, that
offheap() returns null at that stage.
I'm using TransactionConcurrency.Optimistic, TransactionIsolation.Serializable
as concurrency and isolation modes for the transaction.
For all caches I do not use a special off-heap configuration, everything is set
to default. I only use a custom dataStorageConfiguration (using no persistence).
Would it be possible for me to circumvent the error by changing some
configuration values?
Greets,
Dome