[ 
https://issues.apache.org/jira/browse/OAK-3924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15121014#comment-15121014
 ] 

Thomas Mueller edited comment on OAK-3924 at 1/28/16 8:28 AM:
--------------------------------------------------------------

As Tomek wrote above: To avoid deadlocks, it is usually sufficient to sort the 
data. For example, if you session 1 updates "c", "a", and "b", and session 2 
updates "b", "a", and "d", then it's best if both sessions first sorts the data 
(for example alphabetically). Unsorted, it can result in a deadlock because if 
"a" is already locked by session 1 and "b" is already locked by session 2 
before session 1 can get a lock on "b" and session 2 can get a lock on "a". If 
session 1 locks in order "a", "b", "c", and session 2 locks in order "a", "b", 
"d", then no deadlock occurs. See also 
[StackOverflow|http://stackoverflow.com/questions/7428578/proper-design-to-avoid-oracle-deadlocks].
 Ordering only works if you know the whole list before starting the 
transaction, but this is what we do, right?



was (Author: tmueller):
To avoid deadlocks, it is usually sufficient to sort the data. For example, if 
you session 1 updates "c", "a", and "b", and session 2 updates "b", "a", and 
"d", then it's best if both sessions first sorts the data (for example 
alphabetically). Unsorted, it can result in a deadlock because if "a" is 
already locked by session 1 and "b" is already locked by session 2 before 
session 1 can get a lock on "b" and session 2 can get a lock on "a". If session 
1 locks in order "a", "b", "c", and session 2 locks in order "a", "b", "d", 
then no deadlock occurs. See also 
[StackOverflow|http://stackoverflow.com/questions/7428578/proper-design-to-avoid-oracle-deadlocks].
 Ordering only works if you know the whole list before starting the 
transaction, but this is what we do, right?

> Fix database-level row deadlock during bulk updates in RDB
> ----------------------------------------------------------
>
>                 Key: OAK-3924
>                 URL: https://issues.apache.org/jira/browse/OAK-3924
>             Project: Jackrabbit Oak
>          Issue Type: Sub-task
>          Components: rdbmk
>            Reporter: Tomek Rękawek
>            Priority: Critical
>             Fix For: 1.4
>
>         Attachments: OAK-3924.patch
>
>
> It seems that the new bulk createOrUpdate() implementation in RDB is prone 
> for the deadlocks. It isn't a bug in the Oak code, but rather something 
> related to the database implementations. The bug can be observed if we have 
> multiple  simultaneous bulk updates and some of the rows repeat among them. 
> The attached patch contains an unit test {{testConcurrentWithConflict}} 
> presenting the issue.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to