Skip to content

Commit 151be66

Browse files
committed
Review comments and minimized complexity
1 parent 2971367 commit 151be66

File tree

3 files changed

+62
-37
lines changed

3 files changed

+62
-37
lines changed

osgp/platform/osgp-throttling-service/src/main/java/org/opensmartgridplatform/throttling/model/PermitRequest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// SPDX-FileCopyrightText: Copyright Contributors to the GXF project
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
15
package org.opensmartgridplatform.throttling.model;
26

37
import java.util.UUID;

osgp/platform/osgp-throttling-service/src/main/java/org/opensmartgridplatform/throttling/services/RedisPermitService.java

Lines changed: 53 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -62,42 +62,10 @@ public boolean createPermit(
6262

6363
try {
6464
if (lock.tryLock(this.tryLockTimeMs, TimeUnit.MILLISECONDS)) {
65-
6665
try {
67-
final RScoredSortedSet<Permit> permits =
68-
this.redisson.getScoredSortedSet(permitKey.key());
69-
final int numberOfRegisteredPermits = permits.size();
70-
71-
log.debug(
72-
"Trying to register a permit for request[{}] with permit key {}. (max-concurrent-requests: {}, number-of-registered-permits: {})",
73-
permitRequest.getRequestId(),
74-
permitKey.key(),
75-
maxConcurrentRequests,
76-
numberOfRegisteredPermits);
77-
78-
// get waiting room for key
79-
final RScoredSortedSet<PermitRequest> lobby =
80-
this.redisson.getScoredSortedSet(permitKey.lobby());
81-
82-
// if prio = default and waiting room size > 0 => EXIT (granted = false)
83-
if (highPrio || lobby.isEmpty()) {
84-
85-
if (maxConcurrentRequests < 0 || numberOfRegisteredPermits < maxConcurrentRequests) {
86-
granted =
87-
permits.add(
88-
Instant.now().toEpochMilli(), new Permit(networkSegment, permitRequest));
89-
}
90-
91-
if (highPrio) {
92-
if (granted) {
93-
// if granted = true and prio = high and in waiting room => remove from waiting room
94-
lobby.remove(permitRequest);
95-
} else {
96-
// if granted = false and prio = high and not in waiting room => add to waiting room
97-
lobby.addIfAbsent(Instant.now().toEpochMilli(), permitRequest);
98-
}
99-
}
100-
}
66+
granted =
67+
this.tryRegisterPermit(
68+
networkSegment, permitRequest, maxConcurrentRequests, highPrio, permitKey);
10169
} finally {
10270
lock.unlock();
10371
}
@@ -110,6 +78,56 @@ public boolean createPermit(
11078
return granted;
11179
}
11280

81+
private boolean tryRegisterPermit(
82+
final NetworkSegment networkSegment,
83+
final PermitRequest permitRequest,
84+
final int maxConcurrentRequests,
85+
final boolean highPrio,
86+
final PermitKey permitKey) {
87+
boolean granted = false;
88+
89+
final RScoredSortedSet<PermitRequest> lobby =
90+
this.redisson.getScoredSortedSet(permitKey.lobby());
91+
92+
if (highPrio || lobby.isEmpty()) {
93+
final RScoredSortedSet<Permit> permits = this.redisson.getScoredSortedSet(permitKey.key());
94+
final int numberOfRegisteredPermits = permits.size();
95+
96+
log.debug(
97+
"Trying to register a permit for request[{}] (max-concurrent-requests: {}, number-of-registered-permits: {})",
98+
permitRequest.getRequestId(),
99+
maxConcurrentRequests,
100+
numberOfRegisteredPermits);
101+
102+
if (this.permitsAvailable(maxConcurrentRequests, numberOfRegisteredPermits)) {
103+
granted =
104+
permits.add(Instant.now().toEpochMilli(), new Permit(networkSegment, permitRequest));
105+
}
106+
107+
if (highPrio) {
108+
this.updateLobby(permitRequest, granted, lobby);
109+
}
110+
}
111+
112+
return granted;
113+
}
114+
115+
private boolean permitsAvailable(
116+
final int maxConcurrentRequests, final int numberOfRegisteredPermits) {
117+
return maxConcurrentRequests < 0 || numberOfRegisteredPermits < maxConcurrentRequests;
118+
}
119+
120+
private void updateLobby(
121+
final PermitRequest permitRequest,
122+
final boolean granted,
123+
final RScoredSortedSet<PermitRequest> lobby) {
124+
if (granted) {
125+
lobby.remove(permitRequest);
126+
} else {
127+
lobby.addIfAbsent(Instant.now().toEpochMilli(), permitRequest);
128+
}
129+
}
130+
113131
@Override
114132
public boolean removePermit(
115133
final NetworkSegment networkSegment, final PermitRequest permitRequest) {

osgp/platform/osgp-throttling-service/src/test/java/org/opensmartgridplatform/throttling/services/RedisPermitServiceTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void testCreatePermitWhileHighPrioIsInLobby() {
109109

110110
final PermitKey permitKey = this.createPermitKey();
111111
this.prepareLock(permitKey);
112-
this.preparePermitsSet(permitKey, 0, false);
112+
this.preparePermitsSet(permitKey, -1, false);
113113
this.prepareLobby(permitKey, true);
114114

115115
final boolean created =
@@ -226,7 +226,10 @@ private void prepareLock(final PermitKey permitKey) {
226226
private void preparePermitsSet(final PermitKey permitKey, final int size, final boolean stubAdd) {
227227
when(this.redissonClient.getScoredSortedSet(permitKey.key()))
228228
.thenAnswer(invocation -> this.permits);
229-
when(this.permits.size()).thenReturn(size);
229+
230+
if (size >= 0) {
231+
when(this.permits.size()).thenReturn(size);
232+
}
230233

231234
if (stubAdd) {
232235
when(this.permits.add(anyDouble(), any(Permit.class))).thenReturn(true);

0 commit comments

Comments
 (0)