Sir, yes, sir! Done ;) — Denis
> On May 27, 2016, at 2:52 PM, Andrey Gura <ag...@gridgain.com> wrote: > > Denis, > > one note from me: it would be great to add information block which states > that deadlock detection supports only pessimistic transaction now. > > Thanks. > > On Fri, May 27, 2016 at 2:14 PM, Denis Magda <dma...@gridgain.com> wrote: > >> Andrey, Dmitriy, thanks for the inputs. Considered them. >> >> Finally reworked/regrouped Transactions documentation [1], added table of >> contents, made some sections much clearer. >> >> [1] https://apacheignite.readme.io/v1.6/docs/transactions >> >> — >> Denis >> >>> On May 27, 2016, at 11:59 AM, Dmitriy Setrakyan <dsetrak...@apache.org> >> wrote: >>> >>> On Wed, May 25, 2016 at 10:37 PM, Denis Magda <dma...@gridgain.com> >> wrote: >>> >>>> Parchi, >>>> >>>> Thanks a lot for the editing! >>>> >>>> Dmitriy, >>>> >>>> Maybe it’s better to introduce a table of content to Transactions >>>> documentation like it’s done for JVM tuning [1]? >>>> >>> >>> Sure, why not. >>> >>> >>>> >>>> [1] https://apacheignite.readme.io/docs/jvm-and-system-tuning < >>>> https://apacheignite.readme.io/docs/jvm-and-system-tuning> >>>> >>>>> On May 26, 2016, at 1:42 AM, Prachi Garg <pg...@gridgain.com> wrote: >>>>> >>>>> Denis, >>>>> >>>>> I have made some minor edits. Please see if it makes sense. >>>>> >>>>> Thanks, >>>>> -Prachi >>>>> >>>>> On Wed, May 25, 2016 at 9:43 AM, Dmitriy Setrakyan < >>>> dsetrak...@apache.org> >>>>> wrote: >>>>> >>>>>> I would make deadlock-detection into a separate page. This way it will >>>> be >>>>>> more prominent and easier to access. >>>>>> >>>>>> I think we can mention 2 topics on that page: >>>>>> - deadlock-free transactions >>>>>> - deadlock detection >>>>>> >>>>>> What do you think? >>>>>> >>>>>> D. >>>>>> >>>>>> On Wed, May 25, 2016 at 6:06 AM, Andrey Gura <ag...@gridgain.com> >>>> wrote: >>>>>> >>>>>>> Denis, >>>>>>> >>>>>>> great doc! Thanks! >>>>>>> >>>>>>> On Tue, May 24, 2016 at 10:28 AM, Denis Magda <dma...@gridgain.com> >>>>>> wrote: >>>>>>> >>>>>>>> Andrey, thanks for additional details. The doc is updated >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>> >> https://apacheignite.readme.io/docs/transactions#deadlock-detection-in-pessimistic-transactions >>>>>>>> < >>>>>>>> >>>>>>> >>>>>> >>>> >> https://apacheignite.readme.io/docs/transactions#deadlock-detection-in-pessimistic-transactions >>>>>>>>> >>>>>>>> >>>>>>>> — >>>>>>>> Denis >>>>>>>> >>>>>>>>> On May 23, 2016, at 2:28 PM, Andrey Gura <ag...@gridgain.com> >> wrote: >>>>>>>>> >>>>>>>>> Dmitry, >>>>>>>>> >>>>>>>>> In this case "blocked" means that transaction can't be rolled back >>>>>>> while >>>>>>>>> deadlock detection isn't completed. As soon as detection completes >>>>>>>>> transaction can be rolled back and, for example, retried. >>>>>>>>> >>>>>>>>> So in cases when deadlock detection is switched off transactions >> will >>>>>>> be >>>>>>>>> just rolled back immediately with TransactionTimeoutException, >> while >>>>>>> with >>>>>>>>> deadlock detection they will be blocked during deadlock detection >>>>>>>> procedure >>>>>>>>> execution. >>>>>>>>> >>>>>>>>> On Mon, May 23, 2016 at 12:30 AM, Dmitriy Setrakyan < >>>>>>>> dsetrak...@apache.org> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Andrey, >>>>>>>>>> >>>>>>>>>> Can you tell me what transaction is being blocked? If it is the >>>>>>>> transaction >>>>>>>>>> in deadlock, then I think it should not matter, as it is blocked >>>>>>> anyway. >>>>>>>>>> >>>>>>>>>> D. >>>>>>>>>> >>>>>>>>>> On Sun, May 22, 2016 at 2:11 PM, Andrey Gura <ag...@gridgain.com> >>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Dmitry, >>>>>>>>>>> >>>>>>>>>>> Do you think that we should configure deadlock detection using >>>>>> cache >>>>>>>>>>> configuration? >>>>>>>>>>> >>>>>>>>>>> User should have possibility to have control over this process >>>>>>> because >>>>>>>> it >>>>>>>>>>> blocks transaction until detection completion. >>>>>>>>>>> >>>>>>>>>>> You are right. Deadlock detection starts after transaction >> timeout >>>>>>> and >>>>>>>>>>> lists transactions and keys involved into deadlock in exception >>>>>>>> message. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Fri, May 20, 2016 at 3:16 AM, Dmitriy Setrakyan < >>>>>>>>>> dsetrak...@apache.org> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Andrey, >>>>>>>>>>>> >>>>>>>>>>>> Why are we using system properties for the deadlock detection >>>>>>>>>>>> configuration? Also, why would a user want to interrupt the >>>>>> deadlock >>>>>>>>>>>> detection process? >>>>>>>>>>>> >>>>>>>>>>>> To my knowledge, the deadlock detection process should run after >>>>>>>>>>>> transaction has timed out and should include the deadlocked keys >>>>>>> into >>>>>>>>>> the >>>>>>>>>>>> timeout exception message. Am I wrong? >>>>>>>>>>>> >>>>>>>>>>>> D. >>>>>>>>>>>> >>>>>>>>>>>> On Wed, May 18, 2016 at 9:38 AM, Andrey Gura < >> ag...@gridgain.com> >>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Deadlock detection is multi step procedure where steps amount >>>>>>> depends >>>>>>>>>>> on >>>>>>>>>>>>> amount of nodes in cluster, keys and transactions that involved >>>>>>> into >>>>>>>>>>>>> deadlock. Deadlock detection initiator is a node on whicn >>>>>>> transaction >>>>>>>>>>> was >>>>>>>>>>>>> started and timeouted. So this node tries to untangle deadlock >>>>>> step >>>>>>>>>> by >>>>>>>>>>>> step >>>>>>>>>>>>> where each step it is usually request to remote node. So onle >>>>>>>>>>>>> request/response cycle is an iteration. >>>>>>>>>>>>> >>>>>>>>>>>>> Amount of keys, transactions and nodes may be too big. >> Moreover, >>>>>>>>>>>>> transaction timeout does not mean that deadlock actually >> exists. >>>>>> So >>>>>>>>>>> user >>>>>>>>>>>>> can limit amount of iterations that deadlock detection performs >>>>>>> using >>>>>>>>>>>>> IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS system property. User >> also >>>>>>> can >>>>>>>>>>>>> switch off deadlock detection using non positive value for this >>>>>>>>>>> property. >>>>>>>>>>>>> >>>>>>>>>>>>> IGNITE_TX_DEADLOCK_DETECTION_TIMEOUT allows to inerrupt >> deadlock >>>>>>>>>>>> detection >>>>>>>>>>>>> process after specified amount of time. It is another way to >>>>>> limit >>>>>>>>>> time >>>>>>>>>>>> of >>>>>>>>>>>>> execution of deadlock detection process. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, May 17, 2016 at 10:51 AM, Denis Magda < >>>>>> dma...@gridgain.com >>>>>>>> >>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Andrey, perfect! Thanks a lot for the explanation. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I’ve created a documentation for this functionality and added >> it >>>>>>> to >>>>>>>>>>> 1.6 >>>>>>>>>>>>>> version of readme.io >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>> >> http://apacheignite.gridgain.org/v1.6/docs/transactions#deadlock-detection-in-pessimistic-transactions >>>>>>>>>>>>>> >>>>>>>>>>>>>> Please feel free to improve it if needed. >>>>>>>>>>>>>> >>>>>>>>>>>>>> However, I would add more technical details on how the >> deadlock >>>>>>>>>>>> detection >>>>>>>>>>>>>> procedure works because presently it’s not clear why user need >>>>>> to >>>>>>>>>>>> modify >>>>>>>>>>>>>> these properties - IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS and >>>>>>>>>>>>>> IGNITE_TX_DEADLOCK_DETECTION_TIMEOUT. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Could you elaborate on the procedure more technically so that >>>>>> its >>>>>>>>>>> clear >>>>>>>>>>>>>> why these properties are needed? >>>>>>>>>>>>>> >>>>>>>>>>>>>> — >>>>>>>>>>>>>> Denis >>>>>>>>>>>>>> >>>>>>>>>>>>>> On May 16, 2016, at 3:47 PM, Andrey Gura <ag...@gridgain.com> >>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>> >>>>>>>>>>>>>> There is no example how to use it. It just works :) >>>>>>>>>>>>>> >>>>>>>>>>>>>> For now deadlock detection supported only by pessimistic >>>>>>>>>> transactions >>>>>>>>>>>>> with >>>>>>>>>>>>>> timeout. Near cache isn't supported. >>>>>>>>>>>>>> >>>>>>>>>>>>>> User should just start some pessimistic transactions with >>>>>> timeout >>>>>>>>>> and >>>>>>>>>>>> if >>>>>>>>>>>>>> timeout expired then deadlock detection will try to find >>>>>> deadlock. >>>>>>>>>>>>>> TransactionTimeoutException will be thrown and returned to >> user >>>>>> as >>>>>>>>>>>> cause >>>>>>>>>>>>>> of CacheException regardless of deadlock. But if deadlock >>>>>> detected >>>>>>>>>>> then >>>>>>>>>>>>>> cause of this TransactionTimeoutException will be >>>>>>>>>>>>>> TransactionDeadlockException (at least for one transaction >>>>>>> involved >>>>>>>>>>>> into >>>>>>>>>>>>>> deadlock). TransactionDeadlockException contains message like >>>>>>> this: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Deadlock detected: >>>>>>>>>>>>>> >>>>>>>>>>>>>> K1: TX1 holds lock, TX2 waits lock. >>>>>>>>>>>>>> K2: TX2 holds lock, TX1 waits lock. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Transactions: >>>>>>>>>>>>>> >>>>>>>>>>>>>> TX1 [txId=GridCacheVersion [topVer=74882201, >> time=1463402200675, >>>>>>>>>>>>>> order=1463402198603, nodeOrder=1], >>>>>>>>>>>>>> nodeId=46ef3b0a-dd48-434d-8151-d1af778fe180, threadId=77] >>>>>>>>>>>>>> TX2 [txId=GridCacheVersion [topVer=74882201, >> time=1463402200675, >>>>>>>>>>>>>> order=1463402198604, nodeOrder=1], >>>>>>>>>>>>>> nodeId=46ef3b0a-dd48-434d-8151-d1af778fe180, threadId=78] >>>>>>>>>>>>>> >>>>>>>>>>>>>> Keys: >>>>>>>>>>>>>> >>>>>>>>>>>>>> K1 [key=1, cache=default] >>>>>>>>>>>>>> K2 [key=2, cache=default] >>>>>>>>>>>>>> >>>>>>>>>>>>>> I've created simple code example that creates deadlock and >>>>>>>>>>> demonstrates >>>>>>>>>>>>>> result of deadlock detection [1]. >>>>>>>>>>>>>> >>>>>>>>>>>>>> There are a couple of system properties that allows manage >>>>>>> deadlock >>>>>>>>>>>>>> detection: IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS and >>>>>>>>>>>>>> IGNITE_TX_DEADLOCK_DETECTION_TIMEOUT. See >> IgniteSystemProperties >>>>>>>>>>> class >>>>>>>>>>>>> for >>>>>>>>>>>>>> props javadocs. >>>>>>>>>>>>>> >>>>>>>>>>>>>> [1] >>>>>>> https://gist.github.com/agura/1e633b473188738aa3df7e1c6f9cc472 >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Fri, May 13, 2016 at 3:04 PM, Denis Magda < >>>>>> dma...@gridgain.com >>>>>>>> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Andrey, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> As I see you’ve implemented a deadlock detection mechanism >>>>>>>>>> recently >>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/IGNITE-2854 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Could you provide a basic example showing how to use it? I >>>>>> would >>>>>>>>>>> like >>>>>>>>>>>> to >>>>>>>>>>>>>>> add the example and some words on the feature to readme. io >> so >>>>>>>>>> that >>>>>>>>>>>> the >>>>>>>>>>>>>>> communicate can leverage from this. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> — >>>>>>>>>>>>>>> Denis >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Andrey Gura >>>>>>>>>>>>>> GridGain Systems, Inc. >>>>>>>>>>>>>> www.gridgain.com >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Andrey Gura >>>>>>>>>>>>> GridGain Systems, Inc. >>>>>>>>>>>>> www.gridgain.com >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Andrey Gura >>>>>>>>>>> GridGain Systems, Inc. >>>>>>>>>>> www.gridgain.com >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Andrey Gura >>>>>>>>> GridGain Systems, Inc. >>>>>>>>> www.gridgain.com >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Andrey Gura >>>>>>> GridGain Systems, Inc. >>>>>>> www.gridgain.com >>>>>>> >>>>>> >>>> >>>> >> >> > > > -- > Andrey Gura > GridGain Systems, Inc. > www.gridgain.com