Skip to content

Commit 2f4923c

Browse files
committed
core: SimpleLm: Use Opaque directly instead of Base64 string
The SimpleLm keeps all data in memory; there is no obvious need to store the keys as Base64 strings. Use Opaque directly, ensuring that only immutable Opaque keys are used for storing. Related: #149 Signed-off-by: Christian Kohlschütter <[email protected]>
1 parent 15bcff6 commit 2f4923c

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

core/src/main/java/org/dcache/nfs/v4/nlm/SimpleLm.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -58,62 +58,51 @@ public SimpleLm(int concurrency) {
5858
/**
5959
* Exclusive lock on objects locks.
6060
*/
61-
private final ConcurrentHashMap<String, List<NlmLock>> locks = new ConcurrentHashMap<>();
61+
private final ConcurrentHashMap<Opaque, List<NlmLock>> locks = new ConcurrentHashMap<>();
6262

6363
@Override
6464
protected Lock getObjectLock(Opaque objId) {
65-
String key = toKey(objId);
66-
return objLock.get(key);
65+
return objLock.get(objId);
6766
}
6867

6968
@Override
7069
protected Collection<NlmLock> getActiveLocks(Opaque objId) {
71-
String key = toKey(objId);
72-
return locks.getOrDefault(key, Collections.emptyList());
70+
return locks.getOrDefault(objId, Collections.emptyList());
7371
}
7472

7573
@Override
7674
protected void add(Opaque objId, NlmLock lock) {
77-
String key = toKey(objId);
78-
Collection<NlmLock> l = locks.computeIfAbsent(key, k -> new ArrayList<>());
75+
Collection<NlmLock> l = locks.computeIfAbsent(objId.toImmutableOpaque(), k -> new ArrayList<>());
7976
l.add(lock);
8077
}
8178

8279
@Override
8380
protected boolean remove(Opaque objId, NlmLock lock) {
84-
String key = toKey(objId);
85-
Collection<NlmLock> l = locks.get(key);
81+
Collection<NlmLock> l = locks.get(objId);
8682
boolean isRemoved = false;
8783
if (l != null) {
8884
isRemoved = l.remove(lock);
8985
if (l.isEmpty()) {
90-
locks.remove(key);
86+
locks.remove(objId);
9187
}
9288
}
9389
return isRemoved;
9490
}
9591

9692
@Override
9793
protected void addAll(Opaque objId, Collection<NlmLock> locks) {
98-
String key = toKey(objId);
99-
Collection<NlmLock> l = this.locks.computeIfAbsent(key, k -> new ArrayList<>());
94+
Collection<NlmLock> l = this.locks.computeIfAbsent(objId.toImmutableOpaque(), k -> new ArrayList<>());
10095
l.addAll(locks);
10196
}
10297

10398
@Override
10499
protected void removeAll(Opaque objId, Collection<NlmLock> locks) {
105-
String key = toKey(objId);
106-
Collection<NlmLock> l = this.locks.get(key);
100+
Collection<NlmLock> l = this.locks.get(objId);
107101
if (l != null) {
108102
l.removeAll(locks);
109103
if (l.isEmpty()) {
110-
this.locks.remove(key);
104+
this.locks.remove(objId);
111105
}
112106
}
113107
}
114-
115-
private final String toKey(Opaque objId) {
116-
return objId.toBase64();
117-
}
118-
119108
}

0 commit comments

Comments
 (0)