20
20
package org .dcache .nfs .v4 .nlm ;
21
21
22
22
import java .util .ArrayList ;
23
- import java .util .Base64 ;
24
23
import java .util .Collection ;
25
24
import java .util .Collections ;
26
25
import java .util .List ;
27
26
import java .util .concurrent .ConcurrentHashMap ;
28
27
import java .util .concurrent .locks .Lock ;
29
28
29
+ import org .dcache .nfs .util .Opaque ;
30
+
30
31
import com .google .common .util .concurrent .Striped ;
31
32
32
33
/**
33
34
* Simple non-distributed implementation of {@link LockManager}.
34
35
*
35
36
* @since 0.14
36
37
*/
37
- public class SimpleLm extends AbstractLockManager {
38
+ public class SimpleLm extends AbstractLockManager2 {
38
39
39
40
/*
40
41
* Use {@link Striped} here to split synchronized block on file locks into multiple partitions to increase
@@ -60,26 +61,26 @@ public SimpleLm(int concurrency) {
60
61
private final ConcurrentHashMap <String , List <NlmLock >> locks = new ConcurrentHashMap <>();
61
62
62
63
@ Override
63
- protected Lock getObjectLock (byte [] objId ) {
64
+ protected Lock getObjectLock (Opaque objId ) {
64
65
String key = toKey (objId );
65
66
return objLock .get (key );
66
67
}
67
68
68
69
@ Override
69
- protected Collection <NlmLock > getActiveLocks (byte [] objId ) {
70
+ protected Collection <NlmLock > getActiveLocks (Opaque objId ) {
70
71
String key = toKey (objId );
71
72
return locks .getOrDefault (key , Collections .emptyList ());
72
73
}
73
74
74
75
@ Override
75
- protected void add (byte [] objId , NlmLock lock ) {
76
+ protected void add (Opaque objId , NlmLock lock ) {
76
77
String key = toKey (objId );
77
78
Collection <NlmLock > l = locks .computeIfAbsent (key , k -> new ArrayList <>());
78
79
l .add (lock );
79
80
}
80
81
81
82
@ Override
82
- protected boolean remove (byte [] objId , NlmLock lock ) {
83
+ protected boolean remove (Opaque objId , NlmLock lock ) {
83
84
String key = toKey (objId );
84
85
Collection <NlmLock > l = locks .get (key );
85
86
boolean isRemoved = false ;
@@ -93,14 +94,14 @@ protected boolean remove(byte[] objId, NlmLock lock) {
93
94
}
94
95
95
96
@ Override
96
- protected void addAll (byte [] objId , Collection <NlmLock > locks ) {
97
+ protected void addAll (Opaque objId , Collection <NlmLock > locks ) {
97
98
String key = toKey (objId );
98
99
Collection <NlmLock > l = this .locks .computeIfAbsent (key , k -> new ArrayList <>());
99
100
l .addAll (locks );
100
101
}
101
102
102
103
@ Override
103
- protected void removeAll (byte [] objId , Collection <NlmLock > locks ) {
104
+ protected void removeAll (Opaque objId , Collection <NlmLock > locks ) {
104
105
String key = toKey (objId );
105
106
Collection <NlmLock > l = this .locks .get (key );
106
107
if (l != null ) {
@@ -111,8 +112,8 @@ protected void removeAll(byte[] objId, Collection<NlmLock> locks) {
111
112
}
112
113
}
113
114
114
- private final String toKey (byte [] objId ) {
115
- return Base64 . getEncoder (). encodeToString ( objId );
115
+ private final String toKey (Opaque objId ) {
116
+ return objId . getBase64 ( );
116
117
}
117
118
118
119
}
0 commit comments