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