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

Reply via email to