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 > >>> > >> > >