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 <ptupit...@apache.org>
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 <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.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
>>> > > nizhikov....@gmail.com
>>> > >
>>> >
>>>
>>>
>>>
>>> --
>>> Nikolay Izhikov
>>> nizhikov....@gmail.com
>>>
>>
>>
>

Reply via email to