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 <ptupit...@apache.org> 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, Николай Ижиков <nizhikov....@gmail.com> > 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 <ptupit...@apache.org>: >> >> > 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, Николай Ижиков <nizhikov....@gmail.com >> > >> > 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.TargetInLongOutLong( >> > > 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 >> > > nizhikov....@gmail.com >> > > >> > >> >> >> >> -- >> Nikolay Izhikov >> nizhikov....@gmail.com >> > >