Skip to content

Commit c170592

Browse files
authored
Agnostic interface to support multiple circuit breaker strategies config (#550)
* setup resilience4j * specifying circuit breaker strategy name * creating agnostic interface to support multiple circuit breaker strategy types * fixme * [Gradle Release Plugin] - new version commit: '3.25.11-snapshot'. * release notes
1 parent 734e533 commit c170592

File tree

13 files changed

+47
-21
lines changed

13 files changed

+47
-21
lines changed

RELEASE-NOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 3.25.11
2+
* Agnostic interface to support multiple circuit breaker strategies config #533
3+
14
## 3.25.10
25
* Create `IntTests` suite, they are comp tests which can be run within native image, see the docs #480
36
* Upgrading necessary deps

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ dependencies {
6565
implementation('org.apache.commons:commons-compress:1.22')
6666
implementation('org.rauschig:jarchivelib:1.2.0')
6767
implementation('dev.failsafe:failsafe:3.3.1')
68+
implementation("io.github.resilience4j:resilience4j-circuitbreaker:2.2.0")
6869

6970
implementation('com.github.docker-java:docker-java-core:3.3.4')
7071
implementation('com.github.docker-java:docker-java-transport-httpclient5:3.3.4')

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=3.25.10-snapshot
1+
version=3.25.11-snapshot
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.mageddo.dnsproxyserver.config;
2+
3+
public interface CircuitBreakerStrategy {
4+
5+
Name type();
6+
7+
enum Name {
8+
STATIC_THRESHOLD,
9+
CANARY_RATE_THRESHOLD,
10+
}
11+
}

src/main/java/com/mageddo/dnsproxyserver/config/Config.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public void resetConfigFile() {
9090
}
9191

9292
@JsonIgnore
93-
public CircuitBreaker getSolverRemoteCircuitBreaker() {
93+
public CircuitBreakerStrategy getSolverRemoteCircuitBreaker() {
9494
if (this.solverRemote == null) {
9595
return null;
9696
}

src/main/java/com/mageddo/dnsproxyserver/config/SolverRemote.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ public class SolverRemote {
99

1010
private Boolean active;
1111

12-
private CircuitBreaker circuitBreaker;
12+
private CircuitBreakerStrategy circuitBreaker;
1313
}

src/main/java/com/mageddo/dnsproxyserver/config/CircuitBreaker.java renamed to src/main/java/com/mageddo/dnsproxyserver/config/StaticThresholdCircuitBreakerStrategy.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
@Value
1010
@Builder
11-
public class CircuitBreaker {
11+
public class StaticThresholdCircuitBreakerStrategy implements CircuitBreakerStrategy {
1212

1313
/**
1414
* See {@link dev.failsafe.CircuitBreakerBuilder#withFailureThreshold(int, int)}
@@ -26,7 +26,12 @@ public class CircuitBreaker {
2626
*/
2727
private Duration testDelay;
2828

29-
public static CircuitBreaker empty() {
30-
return CircuitBreaker.builder().build();
29+
public static StaticThresholdCircuitBreakerStrategy empty() {
30+
return StaticThresholdCircuitBreakerStrategy.builder().build();
31+
}
32+
33+
@Override
34+
public Name type() {
35+
return Name.STATIC_THRESHOLD;
3136
}
3237
}

src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/mapper/ConfigJsonV2Mapper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.mageddo.dnsproxyserver.config.dataprovider.mapper;
22

3-
import com.mageddo.dnsproxyserver.config.CircuitBreaker;
3+
import com.mageddo.dnsproxyserver.config.StaticThresholdCircuitBreakerStrategy;
44
import com.mageddo.dnsproxyserver.config.Config;
55
import com.mageddo.dnsproxyserver.config.SolverRemote;
66
import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigJson;
@@ -63,7 +63,9 @@ static SolverRemote buildCompleteSolverRemote(ConfigJson json, ConfigJsonV2.Circ
6363
return SolverRemote
6464
.builder()
6565
.active(Booleans.reverseWhenNotNull(json.getNoRemoteServers()))
66-
.circuitBreaker(CircuitBreaker
66+
// fixme #533 need to create a dynamic json parser for different strategies,
67+
// then a dynamic mapper to the solver remote
68+
.circuitBreaker(StaticThresholdCircuitBreakerStrategy
6769
.builder()
6870
.failureThreshold(circuitBreaker.getFailureThreshold())
6971
.failureThresholdCapacity(circuitBreaker.getFailureThresholdCapacity())

src/main/java/com/mageddo/dnsproxyserver/config/mapper/ConfigMapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.mageddo.dnsproxyserver.config.mapper;
22

3-
import com.mageddo.dnsproxyserver.config.CircuitBreaker;
3+
import com.mageddo.dnsproxyserver.config.StaticThresholdCircuitBreakerStrategy;
44
import com.mageddo.dnsproxyserver.config.Config;
55
import com.mageddo.dnsproxyserver.config.SolverRemote;
66
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigPropDAO;
@@ -74,8 +74,8 @@ private static Config buildDefault() {
7474
.build();
7575
}
7676

77-
public static CircuitBreaker defaultCircuitBreaker() {
78-
return CircuitBreaker
77+
public static StaticThresholdCircuitBreakerStrategy defaultCircuitBreaker() {
78+
return StaticThresholdCircuitBreakerStrategy
7979
.builder()
8080
.failureThreshold(3)
8181
.failureThresholdCapacity(10)

src/main/java/com/mageddo/dnsproxyserver/config/validator/CircuitBreakerValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.mageddo.dnsproxyserver.config.validator;
22

3-
import com.mageddo.dnsproxyserver.config.CircuitBreaker;
3+
import com.mageddo.dnsproxyserver.config.StaticThresholdCircuitBreakerStrategy;
44
import org.apache.commons.lang3.Validate;
55

66
import static com.mageddo.dnsproxyserver.utils.Numbers.positiveOrNull;
77

88
public class CircuitBreakerValidator {
9-
public static void validate(CircuitBreaker circuit) {
9+
public static void validate(StaticThresholdCircuitBreakerStrategy circuit) {
1010
Validate.notNull(positiveOrNull(circuit.getFailureThreshold()), genMsg("failure theshold must be a positive number"));
1111
Validate.notNull(positiveOrNull(circuit.getSuccessThreshold()), genMsg("success theshold must be positive number"));
1212
Validate.notNull(positiveOrNull(circuit.getFailureThresholdCapacity()), genMsg("success theshold capacity must be positive number"));

0 commit comments

Comments
 (0)