Andrey, > On Jun 14, 2017, at 3:11 AM, Andrey Gura <ag...@apache.org> wrote: > > Guys, > > first of all I should notice that thre is difference between eception > handling in pessimistic and optimistic transaction, because in > optimistic txs we can't throw CacheException on tx.commit() call. >
How do we use the detection with this transactions then? There is no special documentation section about this. > The second, I'm surprised why TransactionTimeoutException is replaced > by IgniteCheckedException? I still see converter for > IgniteTxTimeoutCheckedException that eventually throws > TransactionTimeoutException with TransactionDeadlockException as > cause. > See the provided example that shows this is no longer true: https://github.com/dmagda/ignite_transactions/blob/master/src/main/java/org/apache/ignite/examples/DeadlockDetectionExample.java <https://github.com/dmagda/ignite_transactions/blob/master/src/main/java/org/apache/ignite/examples/DeadlockDetectionExample.java> In the example I have to use IgniteCheckedException instead on TransactionTimeoutException because otherwise the whole exception will be swallowed. > > > On Wed, Jun 14, 2017 at 3:11 AM, Dmitriy Setrakyan > <dsetrak...@apache.org> wrote: >> On Tue, Jun 13, 2017 at 5:06 PM, Denis Magda <dma...@apache.org> wrote: >> >>> e.getCause() might return ‘null’ and you’ll get NullPointerException >>> trying to execute e.getCause().getCause(). >>> >>> Ideally, we need to throw TransactionDeadlockException like it’s done in >>> .NET. >>> >> >> Agree, looks odd, but because of JSR107 we cannot throw any additional type >> of exception. >> >> Can we simplify by having one getCause() instead of double >> getCause().getCause()? >> >> >>> — >>> Denis >>> >>>> On Jun 13, 2017, at 4:43 PM, Dmitriy Setrakyan <dsetrak...@apache.org> >>> wrote: >>>> >>>> This looks a bit confusing. Why is it not enough to have this check: >>>> >>>> e.getCause().getCause() instanceof TransactionDeadlockException >>>> >>>> ? >>>> >>>> On Tue, Jun 13, 2017 at 4:40 PM, Denis Magda <dma...@apache.org> wrote: >>>> >>>>> Pardon me, copy pasted the catch block twice. This how the block looked >>>>> like in Ignite 1.x >>>>> >>>>> catch (CacheException e) { >>>>> if (e.getCause() instanceof TransactionTimeoutException && >>>>> e.getCause().getCause() instanceof TransactionDeadlockException) >>>>> >>>>> System.out.println(e.getCause().getCause().getMessage()); >>>>> } >>>>> >>>>> and this is how it must be coded in 2.0: >>>>> >>>>>> catch (CacheException e) { >>>>>> if (e.getCause() instanceof IgniteCheckedException && >>>>>> e.getCause().getCause() instanceof TransactionDeadlockException) >>>>>> >>>>>> System.out.println(e.getCause().getCause().getMessage()); >>>>>> } >>>>> >>>>> >>>>> >>>>> — >>>>> Denis >>>>> >>>>>> On Jun 13, 2017, at 4:24 PM, Denis Magda <dma...@apache.org> wrote: >>>>>> >>>>>> Andrey Gura, Igniters, >>>>>> >>>>>> If to refer to our documentation [1], this is how we need to catch the >>>>> deadlock detection exception: >>>>>> >>>>>> catch (CacheException e) { >>>>>> if (e.getCause() instanceof IgniteCheckedException && >>>>>> e.getCause().getCause() instanceof TransactionDeadlockException) >>>>>> >>>>>> System.out.println(e.getCause().getCause().getMessage()); >>>>>> } >>>>>> >>>>>> However, this is no longer works in Ignite 2.0 because >>>>> IgniteCheckedException has to be used instead of >>>>> TransactionTimeoutException: >>>>>> >>>>>> catch (CacheException e) { >>>>>> if (e.getCause() instanceof IgniteCheckedException && >>>>>> e.getCause().getCause() instanceof TransactionDeadlockException) >>>>>> >>>>>> System.out.println(e.getCause().getCause().getMessage()); >>>>>> } >>>>>> >>>>>> See the example with the workaround: >>>>>> https://github.com/dmagda/ignite_transactions/blob/ >>>>> master/src/main/java/org/apache/ignite/examples/ >>>>> DeadlockDetectionExample.java >>>>>> >>>>>> >>>>>> Could we do on of the following: >>>>>> >>>>>> 1) Recover the previous behavior or >>>>>> 2) Throw TransactionDeadlockDetection right away as it’s done in .NET >>> [3] >>>>>> >>>>>> [1] https://apacheignite.readme.io/docs/transactions#section- >>>>> deadlock-detection >>>>>> [3] https://github.com/apache/ignite/blob/master/modules/ >>>>> platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/ >>>>> TransactionDeadlockDetectionExample.cs#L110 >>>>>> >>>>> >>>>> >>> >>>