25
25
import org .polypheny .db .transaction .DeadlockDetectorType ;
26
26
import org .polypheny .db .transaction .Transaction ;
27
27
import org .polypheny .db .transaction .locking .Lockable ;
28
- import org .polypheny .db .transaction .locking .S2plLockingLevel ;
29
28
import org .polypheny .db .util .DeadlockException ;
30
29
31
30
public class DeadlockHandler {
@@ -36,8 +35,8 @@ public class DeadlockHandler {
36
35
private final DeadlockResolver deadlockResolver ;
37
36
38
37
private final ReentrantReadWriteLock concurrencyLock = new ReentrantReadWriteLock ();
39
- private final Lock sharedLock = concurrencyLock .readLock ();
40
- private final Lock exclusiveLock = concurrencyLock .writeLock ();
38
+ private final Lock readLock = concurrencyLock .readLock ();
39
+ private final Lock writeLock = concurrencyLock .writeLock ();
41
40
42
41
static {
43
42
DeadlockDetectorType deadlockDetectorType = (DeadlockDetectorType ) RuntimeConfig .S2PL_DEADLOCK_DETECTOR_TYPE .getEnum ();
@@ -56,33 +55,27 @@ private DeadlockHandler(DeadlockDetector deadlockDetector, DeadlockResolver dead
56
55
this .deadlockResolver = deadlockResolver ;
57
56
}
58
57
59
- public void addAndResolveDeadlock (@ NonNull Lockable lockable , @ NonNull Transaction transaction , @ NonNull Set <Transaction > owners ) {
60
- sharedLock .lock ();
58
+ public void addAndResolveDeadlock (@ NonNull Lockable lockable , @ NonNull Transaction transaction , @ NonNull Set <Transaction > owners ) {
59
+ writeLock .lock ();
61
60
try {
62
- deadlockDetector .add (lockable , transaction , owners );
63
- exclusiveLock .lock ();
61
+ deadlockDetector .add (lockable , transaction , owners );
64
62
List <Transaction > conflictingTransactions = deadlockDetector .getConflictingTransactions ();
65
- exclusiveLock .unlock ();
66
- // lock can be release here as concurrently adding or removing transactions does not affect the resolution process
67
- while ( !conflictingTransactions .isEmpty () ) {
68
- deadlockResolver .resolveDeadlock ( conflictingTransactions );
69
- exclusiveLock .lock ();
63
+ while (!conflictingTransactions .isEmpty ()) {
64
+ deadlockResolver .resolveDeadlock (conflictingTransactions );
70
65
conflictingTransactions = deadlockDetector .getConflictingTransactions ();
71
- exclusiveLock .unlock ();
72
- // lock can be release here as concurrently adding or removing transactions does not affect the resolution process
73
66
}
74
67
} finally {
75
- sharedLock .unlock ();
68
+ writeLock .unlock ();
76
69
}
77
70
}
78
71
79
72
80
73
public void remove (@ NonNull Lockable lockable , @ NonNull Transaction transaction ) {
81
- sharedLock .lock ();
74
+ readLock .lock ();
82
75
try {
83
76
deadlockDetector .remove (lockable , transaction );
84
77
} finally {
85
- sharedLock .unlock ();
78
+ readLock .unlock ();
86
79
}
87
80
}
88
81
0 commit comments