3
3
import java .util .List ;
4
4
import java .util .Map ;
5
5
import java .util .UUID ;
6
- import java .util .concurrent .TimeUnit ;
7
- import java .util .concurrent .locks .Condition ;
8
6
9
7
import javax .inject .Singleton ;
10
8
@@ -22,7 +20,7 @@ public Lockable(String key) {
22
20
this .key = key ;
23
21
}
24
22
25
- synchronized InMemoryLockToken lock () {
23
+ synchronized InMemoryLockToken tryLock () {
26
24
if (!locks .isEmpty ()) {
27
25
return null ;
28
26
}
@@ -33,106 +31,122 @@ synchronized InMemoryLockToken lock() {
33
31
return lock ;
34
32
}
35
33
36
- synchronized InMemoryLockToken unlock (String lockToken ) {
34
+ synchronized boolean unlock (String lockToken ) {
37
35
for (int i = 0 ; i < locks .size (); i ++) {
38
36
InMemoryLockToken lock = locks .get (i );
39
- if (lockToken .equals (lock .getLockToken ())) {
37
+ if (lockToken .equals (lock .getTokenId ())) {
40
38
locks .remove (i );
41
- return lock ;
39
+ return true ;
42
40
}
43
41
}
44
- return null ;
42
+ return false ;
45
43
}
46
44
47
45
synchronized InMemoryLockToken find (String lockToken ) {
48
46
for (int i = 0 ; i < locks .size (); i ++) {
49
47
InMemoryLockToken lock = locks .get (i );
50
- if (lockToken .equals (lock .getLockToken ())) {
48
+ if (lockToken .equals (lock .getTokenId ())) {
51
49
return lock ;
52
50
}
53
51
}
54
52
return null ;
55
53
}
56
- }
57
-
58
- /**
59
- * The lock implements the Java Lock. It is a lockable, not a held lock!
60
- *
61
- */
62
- static class InMemoryLock implements CloudLock {
63
- final Lockable lockable ;
64
-
65
- public InMemoryLock (Lockable lockable ) {
66
- this .lockable = lockable ;
67
- }
68
-
69
- @ Override
70
- public void lock () {
71
- throw new UnsupportedOperationException ();
72
- }
73
-
74
- @ Override
75
- public void lockInterruptibly () throws InterruptedException {
76
- throw new UnsupportedOperationException ();
77
- }
78
-
79
- @ Override
80
- public boolean tryLock () {
81
- throw new UnsupportedOperationException ();
82
- }
83
-
84
- @ Override
85
- public boolean tryLock (long time , TimeUnit unit ) throws InterruptedException {
86
- throw new UnsupportedOperationException ();
87
- }
88
-
89
- @ Override
90
- public void unlock () {
91
- throw new UnsupportedOperationException ();
92
- }
93
-
94
- @ Override
95
- public Condition newCondition () {
96
- throw new UnsupportedOperationException ();
97
- }
98
54
99
55
}
100
56
57
+ // /**
58
+ // * The lock implements the Java Lock. It is a lockable, not a held lock!
59
+ // *
60
+ // */
61
+ // static class InMemoryLock implements CloudLock {
62
+ // final Lockable lockable;
63
+ //
64
+ // public InMemoryLock(Lockable lockable) {
65
+ // this.lockable = lockable;
66
+ // }
67
+ //
68
+ // @Override
69
+ // public void lock() {
70
+ // throw new UnsupportedOperationException();
71
+ // }
72
+ //
73
+ // @Override
74
+ // public void lockInterruptibly() throws InterruptedException {
75
+ // throw new UnsupportedOperationException();
76
+ // }
77
+ //
78
+ // @Override
79
+ // public boolean tryLock() {
80
+ // throw new UnsupportedOperationException();
81
+ // }
82
+ //
83
+ // @Override
84
+ // public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
85
+ // throw new UnsupportedOperationException();
86
+ // }
87
+ //
88
+ // @Override
89
+ // public void unlock() {
90
+ // throw new UnsupportedOperationException();
91
+ // }
92
+ //
93
+ // @Override
94
+ // public Condition newCondition() {
95
+ // throw new UnsupportedOperationException();
96
+ // }
97
+ //
98
+ // @Override
99
+ // public CloudLockToken getLockToken() {
100
+ // throw new UnsupportedOperationException();
101
+ // }
102
+ //
103
+ // }
104
+
101
105
/**
102
106
* A LockToken represents a hold on a lock.
103
107
*
104
108
*/
105
- static class InMemoryLockToken {
109
+ static class InMemoryLockToken implements CloudLockToken {
106
110
final Lockable lock ;
107
- final String token ;
111
+ final String tokenId ;
108
112
109
- public InMemoryLockToken (Lockable lock , String token ) {
113
+ public InMemoryLockToken (Lockable lock , String tokenId ) {
110
114
this .lock = lock ;
111
- this .token = token ;
115
+ this .tokenId = tokenId ;
112
116
}
113
117
114
- public String getLockToken () {
115
- return token ;
118
+ @ Override
119
+ public String getTokenId () {
120
+ return tokenId ;
116
121
}
117
122
}
118
123
119
- final Map <String , InMemoryLock > locks = Maps .newHashMap ();
124
+ final Map <String , Lockable > locks = Maps .newHashMap ();
120
125
121
- @ Override
122
- public InMemoryLock get (String key ) {
123
- InMemoryLock lockset ;
126
+ private Lockable getLockable (String key ) {
127
+ Lockable lockset ;
124
128
synchronized (locks ) {
125
129
lockset = locks .get (key );
126
130
127
131
if (lockset == null ) {
128
- lockset = new InMemoryLock ( new Lockable (key ) );
132
+ lockset = new Lockable (key );
129
133
locks .put (key , lockset );
130
134
}
131
135
}
132
136
133
137
return lockset ;
134
138
}
135
139
140
+ @ Override
141
+ public CloudLockToken tryLock (String key ) {
142
+ return getLockable (key ).tryLock ();
143
+ }
144
+
145
+ @ Override
146
+ public boolean unlock (String key , String lockToken ) {
147
+ return getLockable (key ).unlock (lockToken );
148
+ }
149
+
136
150
// @Override
137
151
// public InMemoryLockToken lock(String uri) {
138
152
// LockSet lockset;
0 commit comments