ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pavel Tupitsyn <ptupit...@apache.org>
Subject Re: .Net client call tx,close in other thread
Date Tue, 25 Jul 2017 16:36:09 GMT
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(
> PlatformTransactions.java:178)
> > > at
> > > org.apache.ignite.internal.processors.platform.
> PlatformTargetProxyImpl.
> > > inLongOutLong(PlatformTargetProxyImpl.java:53)
> > > at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean
> > > includeTaskCanceledExceptions) at System.Threading.Tasks.Task.
> Wait(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.dev@gmail.com
> > >
> >
>
>
>
> --
> Nikolay Izhikov
> NIzhikov.dev@gmail.com
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message