Skip to content

Commit 1b8cf1c

Browse files
authored
Unifying circuit breaker abstractions (#553)
* setup resilience4j * specifying circuit breaker strategy name * creating agnostic interface to support multiple circuit breaker strategy types * fixme * sppliting circuit breaker factory * refactoring is done * test is passing * test is passing * test is passing * refactoring package * [Gradle Release Plugin] - new version commit: '3.25.11-snapshot'. * release notes * [Gradle Release Plugin] - new version commit: '3.25.12-snapshot'. * release notes * fixme note * fixme note * refactoring to support multiple delegates * refactoring name * refactoring * implementing non resilient strategy * refactoring and test * removing unnecessary test * refactoring and fixing test * release notes * [Gradle Release Plugin] - new version commit: '3.25.13-snapshot'.
1 parent 3fa61af commit 1b8cf1c

30 files changed

+299
-211
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.13
2+
* Unifying circuit breaker abstractions #553
3+
14
## 3.25.12
25
* Creating an abstraction of circuit breaker implementation #533
36

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=3.25.12-snapshot
1+
version=3.25.13-snapshot

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

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.mageddo.dnsproxyserver.config;
2+
3+
import com.mageddo.dnsproxyserver.solver.remote.circuitbreaker.application.CircuitBreakerDelegateNonResilient;
4+
import com.mageddo.dnsproxyserver.solver.remote.circuitbreaker.application.CircuitBreakerDelegateStaticThresholdFailsafe;
5+
6+
public interface CircuitBreakerStrategyConfig {
7+
8+
Name name();
9+
10+
enum Name {
11+
/**
12+
* @see CircuitBreakerDelegateStaticThresholdFailsafe
13+
*/
14+
STATIC_THRESHOLD,
15+
16+
CANARY_RATE_THRESHOLD,
17+
18+
/**
19+
* @see CircuitBreakerDelegateNonResilient
20+
*/
21+
NON_RESILIENT,
22+
}
23+
}

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 CircuitBreakerStrategy getSolverRemoteCircuitBreakerStrategy() {
93+
public CircuitBreakerStrategyConfig getSolverRemoteCircuitBreakerStrategy() {
9494
if (this.solverRemote == null) {
9595
return null;
9696
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.mageddo.dnsproxyserver.config;
2+
3+
public class NonResilientCircuitBreakerStrategyConfig implements CircuitBreakerStrategyConfig {
4+
@Override
5+
public Name name() {
6+
return Name.NON_RESILIENT;
7+
}
8+
}

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 CircuitBreakerStrategy circuitBreaker;
12+
private CircuitBreakerStrategyConfig circuitBreaker;
1313
}

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

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

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

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

29-
public static StaticThresholdCircuitBreakerStrategy empty() {
30-
return StaticThresholdCircuitBreakerStrategy.builder().build();
29+
public static StaticThresholdCircuitBreakerStrategyConfig empty() {
30+
return StaticThresholdCircuitBreakerStrategyConfig.builder().build();
3131
}
3232

3333
@Override
34-
public Name type() {
34+
public Name name() {
3535
return Name.STATIC_THRESHOLD;
3636
}
3737
}

src/main/java/com/mageddo/dnsproxyserver/config/application/ConfigService.java

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

3+
import com.mageddo.dnsproxyserver.config.CircuitBreakerStrategyConfig;
34
import com.mageddo.dnsproxyserver.config.Config;
5+
import com.mageddo.dnsproxyserver.config.SolverRemote;
46
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigDAO;
57
import com.mageddo.dnsproxyserver.config.mapper.ConfigMapper;
68
import org.apache.commons.lang3.ClassUtils;
@@ -29,6 +31,12 @@ public Config findCurrentConfig() {
2931
return ConfigMapper.mapFrom(this.findConfigs());
3032
}
3133

34+
public SolverRemote findCurrentConfigRemote(){
35+
return this.findCurrentConfig()
36+
.getSolverRemote()
37+
;
38+
}
39+
3240
List<Config> findConfigs() {
3341
return this.findConfigDaos()
3442
.map(ConfigDAO::find)
@@ -46,4 +54,9 @@ public List<String> findConfigNames(){
4654
.map(ClassUtils::getSimpleName)
4755
.toList();
4856
}
57+
58+
public CircuitBreakerStrategyConfig findCurrentConfigCircuitBreaker() {
59+
return this.findCurrentConfigRemote()
60+
.getCircuitBreaker();
61+
}
4962
}

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

Lines changed: 2 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.StaticThresholdCircuitBreakerStrategy;
3+
import com.mageddo.dnsproxyserver.config.StaticThresholdCircuitBreakerStrategyConfig;
44
import com.mageddo.dnsproxyserver.config.Config;
55
import com.mageddo.dnsproxyserver.config.SolverRemote;
66
import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigJson;
@@ -65,7 +65,7 @@ static SolverRemote buildCompleteSolverRemote(ConfigJson json, ConfigJsonV2.Circ
6565
.active(Booleans.reverseWhenNotNull(json.getNoRemoteServers()))
6666
// fixme #533 need to create a dynamic json parser for different strategies,
6767
// then a dynamic mapper to the solver remote
68-
.circuitBreaker(StaticThresholdCircuitBreakerStrategy
68+
.circuitBreaker(StaticThresholdCircuitBreakerStrategyConfig
6969
.builder()
7070
.failureThreshold(circuitBreaker.getFailureThreshold())
7171
.failureThresholdCapacity(circuitBreaker.getFailureThresholdCapacity())

0 commit comments

Comments
 (0)