Skip to content

Commit 4085dfb

Browse files
authored
Merge pull request #1127 from OSGP/feature/configurable_thottling_service
Configurable throttling service
2 parents bf77ea5 + 6b71b77 commit 4085dfb

30 files changed

+741
-393
lines changed

osgp/platform/osgp-secret-management/src/main/resources/logback-spring.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ SPDX-License-Identifier: Apache-2.0
3535
<!-- TRACE, DEBUG, INFO, WARN, ERROR -->
3636
<logger name="org.opensmartgridplatform.secretmanagement.application" level="DEBUG"/>
3737
<logger name="org.opensmartgridplatform.adapter.protocol.dlms.application.services.SecretManagementService" level="TRACE"/>
38-
<logger name="org.opensmartgridplatform.adapter.protocol.dlms.application.services.ThrottlingService" level="WARN"/>
3938
<logger name="org.opensmartgridplatform.shared.security.providers" level="DEBUG"/>
4039

4140
<logger name="org.opensmartgridplatform.adapter.ws.endpointinterceptors" level="TRACE"/>

osgp/protocol-adapter-dlms/osgp-protocol-adapter-dlms/src/main/java/org/opensmartgridplatform/adapter/protocol/dlms/application/config/DlmsConfig.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.opensmartgridplatform.adapter.protocol.dlms.application.services.DeviceKeyProcessingService;
2222
import org.opensmartgridplatform.adapter.protocol.dlms.application.services.DomainHelperService;
2323
import org.opensmartgridplatform.adapter.protocol.dlms.application.services.SecretManagementService;
24-
import org.opensmartgridplatform.adapter.protocol.dlms.application.services.ThrottlingService;
2524
import org.opensmartgridplatform.adapter.protocol.dlms.application.threads.RecoverKeyProcess;
2625
import org.opensmartgridplatform.adapter.protocol.dlms.application.threads.RecoverKeyProcessInitiator;
26+
import org.opensmartgridplatform.adapter.protocol.dlms.application.throttling.ThrottlingService;
2727
import org.opensmartgridplatform.adapter.protocol.dlms.domain.factories.DlmsDeviceAssociation;
2828
import org.opensmartgridplatform.adapter.protocol.dlms.domain.factories.Hls5Connector;
2929
import org.opensmartgridplatform.adapter.protocol.dlms.domain.factories.Lls0Connector;
@@ -37,7 +37,6 @@
3737
import org.opensmartgridplatform.shared.infra.networking.DisposableNioEventLoopGroup;
3838
import org.slf4j.Logger;
3939
import org.slf4j.LoggerFactory;
40-
import org.springframework.beans.factory.annotation.Autowired;
4140
import org.springframework.beans.factory.annotation.Qualifier;
4241
import org.springframework.beans.factory.annotation.Value;
4342
import org.springframework.context.annotation.Bean;
@@ -167,16 +166,16 @@ public RecoverKeyProcess recoverKeyProcess(
167166
final DomainHelperService domainHelperService,
168167
final Hls5Connector hls5Connector,
169168
final SecretManagementService secretManagementService,
170-
@Autowired(required = false) final ThrottlingService throttlingService,
171-
final ThrottlingClientConfig throttlingClientConfig,
169+
final ThrottlingService throttlingService,
170+
final ThrottlingConfig throttlingConfig,
172171
final DlmsDeviceRepository deviceRepository,
173172
final DeviceKeyProcessingService deviceKeyProcessingService) {
174173
return new RecoverKeyProcess(
175174
domainHelperService,
176175
hls5Connector,
177176
secretManagementService,
178177
throttlingService,
179-
throttlingClientConfig,
178+
throttlingConfig,
180179
deviceRepository,
181180
deviceKeyProcessingService);
182181
}

osgp/protocol-adapter-dlms/osgp-protocol-adapter-dlms/src/main/java/org/opensmartgridplatform/adapter/protocol/dlms/application/config/ThrottlingClientConfig.java

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44

55
package org.opensmartgridplatform.adapter.protocol.dlms.application.config;
66

7-
import java.security.SecureRandom;
87
import java.time.Duration;
9-
import org.opensmartgridplatform.shared.wsheaderattribute.priority.MessagePriorityEnum;
8+
import org.opensmartgridplatform.adapter.protocol.dlms.application.config.annotation.SharedThrottlingServiceCondition;
109
import org.opensmartgridplatform.throttling.ThrottlingClient;
1110
import org.opensmartgridplatform.throttling.api.ThrottlingConfig;
1211
import org.springframework.beans.factory.annotation.Value;
@@ -16,7 +15,6 @@
1615

1716
@Configuration
1817
public class ThrottlingClientConfig {
19-
private static final SecureRandom random = new SecureRandom();
2018

2119
@Value("${throttling.client.enabled:false}")
2220
private boolean clientEnabled;
@@ -39,15 +37,6 @@ public class ThrottlingClientConfig {
3937
@Value("#{T(java.time.Duration).parse('${throttling.service.timeout:PT30S}')}")
4038
private Duration timeout;
4139

42-
@Value("#{T(java.time.Duration).parse('${throttling.rejected.min.delay:PT50S}')}")
43-
private Duration permitRejectedMinDelay;
44-
45-
@Value("#{T(java.time.Duration).parse('${throttling.rejected.max.delay:PT70S}')}")
46-
private Duration permitRejectedMaxDelay;
47-
48-
@Value("#{T(java.time.Duration).parse('${throttling.rejected.high.prio.delay:PT2S}')}")
49-
private Duration permitRejectedHighPrioDelay;
50-
5140
public boolean clientEnabled() {
5241
return this.clientEnabled;
5342
}
@@ -57,7 +46,7 @@ public String configurationName() {
5746
}
5847

5948
@Bean(destroyMethod = "unregister")
60-
@Conditional(ThrottlingClientEnabledCondition.class)
49+
@Conditional(SharedThrottlingServiceCondition.class)
6150
public ThrottlingClient throttlingClient() {
6251
return new ThrottlingClient(
6352
new ThrottlingConfig(this.configurationName, this.configurationMaxConcurrency),
@@ -66,20 +55,4 @@ public ThrottlingClient throttlingClient() {
6655
this.maxConnPerRoute,
6756
this.maxConnTotal);
6857
}
69-
70-
/**
71-
* Delay to be applied before retrying some action when a requested permit was not granted.
72-
*
73-
* @return delay
74-
*/
75-
public Duration permitRejectedDelay(final int messagePriority) {
76-
if (messagePriority > MessagePriorityEnum.DEFAULT.getPriority()) {
77-
return this.permitRejectedHighPrioDelay;
78-
}
79-
final long minMillis =
80-
Math.min(this.permitRejectedMinDelay.toMillis(), this.permitRejectedMaxDelay.toMillis());
81-
final long maxMillis =
82-
Math.max(this.permitRejectedMinDelay.toMillis(), this.permitRejectedMaxDelay.toMillis());
83-
return Duration.ofMillis(this.random.nextLong(minMillis, maxMillis));
84-
}
8558
}

osgp/protocol-adapter-dlms/osgp-protocol-adapter-dlms/src/main/java/org/opensmartgridplatform/adapter/protocol/dlms/application/config/ThrottlingClientEnabledCondition.java

Lines changed: 0 additions & 18 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// SPDX-FileCopyrightText: Copyright Contributors to the GXF project
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.opensmartgridplatform.adapter.protocol.dlms.application.config;
6+
7+
import java.security.SecureRandom;
8+
import java.time.Duration;
9+
import org.opensmartgridplatform.shared.wsheaderattribute.priority.MessagePriorityEnum;
10+
import org.springframework.beans.factory.annotation.Value;
11+
import org.springframework.context.annotation.Configuration;
12+
13+
@Configuration
14+
public class ThrottlingConfig {
15+
private static final SecureRandom RANDOM = new SecureRandom();
16+
17+
@Value("#{T(java.time.Duration).parse('${throttling.rejected.min.delay:PT50S}')}")
18+
private Duration permitRejectedMinDelay;
19+
20+
@Value("#{T(java.time.Duration).parse('${throttling.rejected.max.delay:PT70S}')}")
21+
private Duration permitRejectedMaxDelay;
22+
23+
@Value("#{T(java.time.Duration).parse('${throttling.rejected.high.prio.delay:PT2S}')}")
24+
private Duration permitRejectedHighPrioDelay;
25+
26+
/**
27+
* Delay to be applied before retrying some action when a requested permit was not granted.
28+
*
29+
* @return delay
30+
*/
31+
public Duration permitRejectedDelay(final int messagePriority) {
32+
if (messagePriority > MessagePriorityEnum.DEFAULT.getPriority()) {
33+
return this.permitRejectedHighPrioDelay;
34+
}
35+
final long minMillis =
36+
Math.min(this.permitRejectedMinDelay.toMillis(), this.permitRejectedMaxDelay.toMillis());
37+
final long maxMillis =
38+
Math.max(this.permitRejectedMinDelay.toMillis(), this.permitRejectedMaxDelay.toMillis());
39+
return Duration.ofMillis(RANDOM.nextLong(minMillis, maxMillis));
40+
}
41+
}

osgp/protocol-adapter-dlms/osgp-protocol-adapter-dlms/src/main/java/org/opensmartgridplatform/adapter/protocol/dlms/application/config/ThrottlingServiceEnabledCondition.java

Lines changed: 0 additions & 18 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// SPDX-FileCopyrightText: Copyright Contributors to the GXF project
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.opensmartgridplatform.adapter.protocol.dlms.application.config.annotation;
6+
7+
public class DisabledThrottlingServiceCondition extends ThrottlingTypeCondition {
8+
public DisabledThrottlingServiceCondition() {
9+
super("disabled");
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// SPDX-FileCopyrightText: Copyright Contributors to the GXF project
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.opensmartgridplatform.adapter.protocol.dlms.application.config.annotation;
6+
7+
public class LocalThrottlingServiceCondition extends ThrottlingTypeCondition {
8+
public LocalThrottlingServiceCondition() {
9+
super("local");
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// SPDX-FileCopyrightText: Copyright Contributors to the GXF project
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.opensmartgridplatform.adapter.protocol.dlms.application.config.annotation;
6+
7+
public class SharedThrottlingServiceCondition extends ThrottlingTypeCondition {
8+
public SharedThrottlingServiceCondition() {
9+
super("shared");
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* SPDX-FileCopyrightText: Copyright Contributors to the GXF project
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package org.opensmartgridplatform.adapter.protocol.dlms.application.config.annotation;
8+
9+
import org.springframework.context.annotation.Condition;
10+
import org.springframework.context.annotation.ConditionContext;
11+
import org.springframework.core.type.AnnotatedTypeMetadata;
12+
13+
public abstract class ThrottlingTypeCondition implements Condition {
14+
15+
private final String throttlingType;
16+
17+
protected ThrottlingTypeCondition(final String throttlingType) {
18+
this.throttlingType = throttlingType;
19+
}
20+
21+
@Override
22+
public boolean matches(final ConditionContext context, final AnnotatedTypeMetadata metadata) {
23+
return this.throttlingType.equalsIgnoreCase(
24+
context.getEnvironment().getProperty("throttling.type"));
25+
}
26+
}

0 commit comments

Comments
 (0)