Further investigation shows that platform code performs unnecessary close() calls for committed & rolled back transactions (sync and async). Ticket filed: https://issues.apache.org/jira/browse/IGNITE-5834
I'll fix this tomorrow and it should resolve your issue. Thanks, Pavel On Tue, Jul 25, 2017 at 7:56 PM, Pavel Tupitsyn <[email protected]> wrote: > Anyway, disallowing close() from another thread would be a breaking > change, we can't do that. > > On Tue, Jul 25, 2017 at 7:36 PM, Pavel Tupitsyn <[email protected]> > wrote: > >> I've reproduced the issue, it happens because in .NET we auto-close the >> transaction >> on commit/rollback. This involves two things: >> * release .NET reference to Java object >> * call Transaction.close() >> >> With sync methods this is trivial, but with commitAsync/rollbackAsync we >> have to call close() >> in IgniteFuture listener, which is called in a different thread. >> >> I think we need to be able to close() a transaction from any thread. >> Otherwise I don't see a non-blocking way to deal with >> commitAsync/rollbackAsync. >> >> Thanks, >> Pavel >> >> On Tue, Jul 25, 2017 at 6:10 PM, Николай Ижиков <[email protected]> >> wrote: >> >>> Hi, Pavel >>> >>> You can check my pull request. >>> https://github.com/apache/ignite/pull/2334 >>> >>> For now I return checks so it has to fail on .Net test suite >>> >>> >>> 2017-07-25 17:16 GMT+03:00 Pavel Tupitsyn <[email protected]>: >>> >>> > Hi Николай, >>> > >>> > .NET test in question (TestTxStateAndExceptions) does not do any >>> > multithreading, >>> > everything is called from a single thread. >>> > >>> > I see that the latest .NET run of your pull request on TeamCity >>> finished >>> > successfully: >>> > http://ci.ignite.apache.org/viewLog.html?buildId=738277 >>> > >>> > Do you still have a problem with this? If yes, how can I reproduce it? >>> > Can you prepare a branch where the test fails, so I can run it locally? >>> > >>> > Thanks, >>> > Pavel >>> > >>> > On Tue, Jul 25, 2017 at 4:47 PM, Николай Ижиков < >>> [email protected]> >>> > wrote: >>> > >>> > > Hello, Igniters. >>> > > >>> > > I working on issue https://issues.apache.org/jira/browse/IGNITE-5712 >>> > > I found that .Net client perform transaction operation(`tx.close()`) >>> in >>> > > thread that not owns transaction. >>> > > >>> > > So I can't include checks for threadId in my pull request. >>> > > >>> > > Is it a bug or a desirable behabiour? >>> > > >>> > > With my new check I got following stack trace: >>> > > >>> > > Check: >>> > > >>> > > `assert (threadId() == Thread.currentThread().getId());` >>> > > >>> > > Exception: >>> > > >>> > > Test(s) failed. System.AggregateException : One or more errors >>> occurred. >>> > > ----> Apache.Ignite.Core.Common.IgniteException : Java exception >>> > occurred >>> > > [class=java.lang.AssertionError, message=] ----> >>> > > Apache.Ignite.Core.Common.JavaException : java.lang.AssertionError >>> at >>> > > org.apache.ignite.internal.processors.cache.transactions. >>> > > TransactionProxyImpl.enter0(TransactionProxyImpl.java:113) >>> > > at >>> > > org.apache.ignite.internal.processors.cache.transactions. >>> > > TransactionProxyImpl.enter(TransactionProxyImpl.java:106) >>> > > at >>> > > org.apache.ignite.internal.processors.cache.transactions. >>> > > TransactionProxyImpl.close(TransactionProxyImpl.java:317) >>> > > at >>> > > org.apache.ignite.internal.processors.platform.transactions. >>> > > PlatformTransactions.txClose(PlatformTransactions.java:136) >>> > > at >>> > > org.apache.ignite.internal.processors.platform.transactions. >>> > > PlatformTransactions.processInLongOutLong(PlatformTransactio >>> ns.java:178) >>> > > at >>> > > org.apache.ignite.internal.processors.platform.PlatformTarge >>> tProxyImpl. >>> > > inLongOutLong(PlatformTargetProxyImpl.java:53) >>> > > at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean >>> > > includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wa >>> it(Int32 >>> > > millisecondsTimeout, CancellationToken cancellationToken) at >>> > > System.Threading.Tasks.Task.Wait() at >>> > > Apache.Ignite.Core.Tests.Cache.CacheAbstractTransactionalTest >>> > > .TestTxStateAndExceptions() >>> > > in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core.Tests\Cache\CacheAbstractTransactionalTest.cs:line >>> > > 510 --IgniteException at >>> > > Apache.Ignite.Core.Impl.Unmanaged.UnmanagedCallbacks.Error(Void* >>> target, >>> > > Int32 errType, SByte* errClsChars, Int32 errClsCharsLen, SByte* >>> > > errMsgChars, Int32 errMsgCharsLen, SByte* stackTraceChars, Int32 >>> > > stackTraceCharsLen, Void* errData, Int32 errDataLen) in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core\Impl\Unmanaged\UnmanagedCallbacks.cs:line >>> > > 1066 at >>> > > Apache.Ignite.Core.Impl.Unmanaged.IgniteJniNativeMethods. >>> > > TargetInLongOutLong(Void* >>> > > ctx, Void* target, Int32 opType, Int64 val) at >>> > > Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils.TargetInLon >>> gOutLong( >>> > > IUnmanagedTarget >>> > > target, Int32 opType, Int64 memPtr) in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core\Impl\Unmanaged\UnmanagedUtils.cs:line >>> > > 429 at Apache.Ignite.Core.Impl.PlatformTarget.DoOutInOp(Int32 type, >>> > Int64 >>> > > val) in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core\Impl\PlatformTarget.cs:line >>> > > 717 at >>> > > Apache.Ignite.Core.Impl.Transactions.TransactionsImpl. >>> > > TxClose(TransactionImpl >>> > > tx) in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core\Impl\Transactions\TransactionsImpl.cs:line >>> > > 216 at Apache.Ignite.Core.Impl.Transactions.TransactionImpl.Close() >>> in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core\Impl\Transactions\TransactionImpl.cs:line >>> > > 442 at >>> > > Apache.Ignite.Core.Impl.Transactions.TransactionImpl.< >>> > > CloseWhenComplete>b__d(Task >>> > > x) in >>> > > c:\BuildAgent\work\820be461cd64b574\modules\platforms\dotnet\Apache. >>> > > Ignite.Core\Impl\Transactions\TransactionImpl.cs:line >>> > > 460 at System.Threading.Tasks.Task.Execute() --JavaException ------- >>> > > Stderr: ------- Test started: >>> > > CacheAbstractTransactionalTest.TestTxStateAndExceptions Test >>> finished: >>> > > CacheAbstractTransactionalTest.TestTxStateAndExceptions >>> > > -- >>> > > Nikolay Izhikov >>> > > [email protected] >>> > > >>> > >>> >>> >>> >>> -- >>> Nikolay Izhikov >>> [email protected] >>> >> >> >
