ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nikolay Izhikov <nizhikov....@gmail.com>
Subject Re: .Net client call tx,close in other thread
Date Tue, 25 Jul 2017 20:08:18 GMT
Pavel.

You will fix .Net client so I don't need to change threadId checks in my 
pull request.
Is that correct?

25.07.2017 20:19, Pavel Tupitsyn пишет:
> 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 <ptupitsyn@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 <ptupitsyn@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.dev@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 <ptupitsyn@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.dev@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.dev@gmail.com
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Nikolay Izhikov
>>>> NIzhikov.dev@gmail.com
>>>>
>>>
>>>
>>
> 

Mime
View raw message