Skip to content

Commit 9b6a9f1

Browse files
RomehRobWin
authored andcommitted
Issue ReactiveX#469: Fixed registerHealthIndicator bug (ReactiveX#492)
1 parent 7304894 commit 9b6a9f1

File tree

13 files changed

+360
-102
lines changed

13 files changed

+360
-102
lines changed

resilience4j-framework-common/src/main/java/io/github/resilience4j/common/bulkhead/configuration/BulkheadConfigurationProperties.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
*/
1616
package io.github.resilience4j.common.bulkhead.configuration;
1717

18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
import javax.validation.constraints.Min;
22+
23+
import io.github.resilience4j.common.utils.ConfigUtils;
1824
import io.github.resilience4j.core.ConfigurationNotFoundException;
1925
import io.github.resilience4j.core.StringUtils;
2026
import io.github.resilience4j.core.lang.Nullable;
2127

22-
import javax.validation.constraints.Min;
23-
import java.util.HashMap;
24-
import java.util.Map;
25-
2628
public class BulkheadConfigurationProperties {
2729

2830
private Map<String, InstanceProperties> instances = new HashMap<>();
@@ -40,6 +42,7 @@ public io.github.resilience4j.bulkhead.BulkheadConfig createBulkheadConfig(Insta
4042
}
4143

4244
private io.github.resilience4j.bulkhead.BulkheadConfig buildConfigFromBaseConfig(InstanceProperties baseProperties, InstanceProperties instanceProperties) {
45+
ConfigUtils.mergePropertiesIfAny(baseProperties, instanceProperties);
4346
io.github.resilience4j.bulkhead.BulkheadConfig baseConfig = buildBulkheadConfig(io.github.resilience4j.bulkhead.BulkheadConfig.custom(), baseProperties);
4447
return buildBulkheadConfig(io.github.resilience4j.bulkhead.BulkheadConfig.from(baseConfig), instanceProperties);
4548
}
@@ -87,7 +90,8 @@ public static class InstanceProperties {
8790
@Nullable
8891
private String baseConfig;
8992
@Min(1)
90-
private Integer eventConsumerBufferSize = 100;
93+
@Nullable
94+
private Integer eventConsumerBufferSize;
9195

9296
public InstanceProperties setMaxConcurrentCalls(Integer maxConcurrentCalls) {
9397
this.maxConcurrentCalls = maxConcurrentCalls;

resilience4j-framework-common/src/main/java/io/github/resilience4j/common/bulkhead/configuration/ThreadPoolBulkheadConfigurationProperties.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,17 @@
1515
*/
1616
package io.github.resilience4j.common.bulkhead.configuration;
1717

18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
import javax.validation.constraints.Min;
22+
1823
import io.github.resilience4j.bulkhead.Bulkhead;
1924
import io.github.resilience4j.bulkhead.ThreadPoolBulkheadConfig;
2025
import io.github.resilience4j.core.ConfigurationNotFoundException;
2126
import io.github.resilience4j.core.StringUtils;
2227
import io.github.resilience4j.core.lang.Nullable;
2328

24-
import javax.validation.constraints.Min;
25-
import java.util.HashMap;
26-
import java.util.Map;
27-
2829
public class ThreadPoolBulkheadConfigurationProperties {
2930

3031
private Map<String, InstanceProperties> instances = new HashMap<>();
@@ -99,16 +100,15 @@ public ThreadPoolBulkheadConfig buildThreadPoolBulkheadConfig(ThreadPoolBulkhead
99100
public static class InstanceProperties {
100101

101102
@Min(1)
102-
private Integer eventConsumerBufferSize = 100;
103+
@Nullable
104+
private Integer eventConsumerBufferSize;
103105

104106
@Nullable
105107
private String baseConfig;
106108

107-
108109
@Nullable
109110
private ThreadPoolProperties threadPoolProperties;
110111

111-
112112
@Nullable
113113
public ThreadPoolProperties getThreadPoolProperties() {
114114
return threadPoolProperties;

resilience4j-framework-common/src/main/java/io/github/resilience4j/common/circuitbreaker/configuration/CircuitBreakerConfigurationProperties.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,24 @@
1616
package io.github.resilience4j.common.circuitbreaker.configuration;
1717

1818

19+
import java.time.Duration;
20+
import java.util.HashMap;
21+
import java.util.Map;
22+
import java.util.Optional;
23+
import java.util.function.Predicate;
24+
25+
import javax.validation.constraints.Max;
26+
import javax.validation.constraints.Min;
27+
28+
import org.hibernate.validator.constraints.time.DurationMin;
29+
1930
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
2031
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig.Builder;
32+
import io.github.resilience4j.common.utils.ConfigUtils;
2133
import io.github.resilience4j.core.ClassUtils;
2234
import io.github.resilience4j.core.ConfigurationNotFoundException;
2335
import io.github.resilience4j.core.StringUtils;
2436
import io.github.resilience4j.core.lang.Nullable;
25-
import org.hibernate.validator.constraints.time.DurationMin;
26-
27-
import javax.validation.constraints.Max;
28-
import javax.validation.constraints.Min;
29-
import javax.validation.constraints.NotNull;
30-
import java.time.Duration;
31-
import java.util.HashMap;
32-
import java.util.Map;
33-
import java.util.Optional;
34-
import java.util.function.Predicate;
3537

3638
public class CircuitBreakerConfigurationProperties {
3739

@@ -54,11 +56,15 @@ public CircuitBreakerConfig createCircuitBreakerConfig(InstanceProperties instan
5456
}
5557

5658
private CircuitBreakerConfig buildConfigFromBaseConfig(InstanceProperties instanceProperties, InstanceProperties baseProperties) {
59+
ConfigUtils.mergePropertiesIfAny(instanceProperties, baseProperties);
5760
CircuitBreakerConfig baseConfig = buildConfig(CircuitBreakerConfig.custom(), baseProperties);
5861
return buildConfig(CircuitBreakerConfig.from(baseConfig), instanceProperties);
5962
}
6063

6164
private CircuitBreakerConfig buildConfig(Builder builder, InstanceProperties properties) {
65+
if (properties == null) {
66+
return builder.build();
67+
}
6268

6369
if (properties.getWaitDurationInOpenStateMillis() != null) {
6470
builder.waitDurationInOpenState(Duration.ofMillis(properties.getWaitDurationInOpenStateMillis()));
@@ -150,10 +156,11 @@ public static class InstanceProperties {
150156
private Boolean automaticTransitionFromOpenToHalfOpenEnabled;
151157

152158
@Min(1)
153-
private Integer eventConsumerBufferSize = 100;
159+
@Nullable
160+
private Integer eventConsumerBufferSize;
154161

155-
@NotNull
156-
private Boolean registerHealthIndicator = true;
162+
@Nullable
163+
private Boolean registerHealthIndicator;
157164

158165
@Nullable
159166
private Class<Predicate<Throwable>> recordFailurePredicate;

resilience4j-framework-common/src/main/java/io/github/resilience4j/common/ratelimiter/configuration/RateLimiterConfigurationProperties.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,18 @@
1515
*/
1616
package io.github.resilience4j.common.ratelimiter.configuration;
1717

18+
import java.time.Duration;
19+
import java.util.HashMap;
20+
import java.util.Map;
21+
22+
import javax.validation.constraints.Min;
23+
24+
import io.github.resilience4j.common.utils.ConfigUtils;
1825
import io.github.resilience4j.core.ConfigurationNotFoundException;
1926
import io.github.resilience4j.core.StringUtils;
2027
import io.github.resilience4j.core.lang.Nullable;
2128
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
2229

23-
import javax.validation.constraints.Min;
24-
import java.time.Duration;
25-
import java.util.HashMap;
26-
import java.util.Map;
27-
2830
public class RateLimiterConfigurationProperties {
2931

3032
private Map<String, InstanceProperties> instances = new HashMap<>();
@@ -45,13 +47,14 @@ public RateLimiterConfig createRateLimiterConfig(@Nullable InstanceProperties in
4547
}
4648

4749
private RateLimiterConfig buildConfigFromBaseConfig(InstanceProperties baseProperties, InstanceProperties instanceProperties) {
50+
ConfigUtils.mergePropertiesIfAny(baseProperties, instanceProperties);
4851
RateLimiterConfig baseConfig = buildRateLimiterConfig(RateLimiterConfig.custom(), baseProperties);
4952
return buildRateLimiterConfig(RateLimiterConfig.from(baseConfig), instanceProperties);
5053
}
5154

5255
private RateLimiterConfig buildRateLimiterConfig(RateLimiterConfig.Builder builder, @Nullable InstanceProperties instanceProperties) {
53-
if (instanceProperties == null) {
54-
return RateLimiterConfig.ofDefaults();
56+
if (instanceProperties == null && builder != null) {
57+
return builder.build();
5558
}
5659

5760
if (instanceProperties.getLimitForPeriod() != null) {
@@ -105,10 +108,13 @@ public static class InstanceProperties {
105108
private Integer limitForPeriod;
106109
private Integer limitRefreshPeriodInNanos;
107110
private Integer timeoutInMillis;
108-
private Boolean subscribeForEvents = false;
109-
private Boolean registerHealthIndicator = false;
111+
@Nullable
112+
private Boolean subscribeForEvents;
113+
@Nullable
114+
private Boolean registerHealthIndicator;
110115
@Min(1)
111-
private Integer eventConsumerBufferSize = 100;
116+
@Nullable
117+
private Integer eventConsumerBufferSize;
112118
@Nullable
113119
private String baseConfig;
114120

resilience4j-framework-common/src/main/java/io/github/resilience4j/common/retry/configuration/RetryConfigurationProperties.java

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,21 @@
1515
* limitations under the License.
1616
*/
1717

18+
import java.time.Duration;
19+
import java.util.HashMap;
20+
import java.util.Map;
21+
import java.util.function.Predicate;
22+
23+
import javax.validation.constraints.Min;
24+
25+
import io.github.resilience4j.common.utils.ConfigUtils;
1826
import io.github.resilience4j.core.ClassUtils;
1927
import io.github.resilience4j.core.ConfigurationNotFoundException;
2028
import io.github.resilience4j.core.StringUtils;
2129
import io.github.resilience4j.core.lang.Nullable;
2230
import io.github.resilience4j.retry.IntervalFunction;
2331
import io.github.resilience4j.retry.RetryConfig;
2432

25-
import javax.validation.constraints.Min;
26-
import javax.validation.constraints.NotNull;
27-
import java.time.Duration;
28-
import java.util.HashMap;
29-
import java.util.Map;
30-
import java.util.function.Predicate;
31-
3233
/**
3334
* Main spring properties for retry configuration
3435
*/
@@ -92,6 +93,7 @@ public RetryConfig createRetryConfig(InstanceProperties instanceProperties) {
9293

9394
private RetryConfig buildConfigFromBaseConfig(InstanceProperties baseProperties, InstanceProperties instanceProperties) {
9495
RetryConfig baseConfig = buildRetryConfig(RetryConfig.custom(), baseProperties);
96+
ConfigUtils.mergePropertiesIfAny(baseProperties, instanceProperties);
9597
return buildRetryConfig(RetryConfig.from(baseConfig), instanceProperties);
9698
}
9799

@@ -105,7 +107,8 @@ private RetryConfig buildRetryConfig(RetryConfig.Builder builder, InstanceProper
105107
return builder.build();
106108
}
107109

108-
if (properties.enableExponentialBackoff && properties.enableRandomizedWait) {
110+
if (properties.enableExponentialBackoff != null && properties.enableExponentialBackoff
111+
&& properties.enableRandomizedWait != null && properties.enableRandomizedWait) {
109112
throw new IllegalStateException("you can not enable Exponential backoff policy and randomized delay at the same time , please enable only one of them");
110113
}
111114

@@ -153,14 +156,14 @@ private RetryConfig buildRetryConfig(RetryConfig.Builder builder, InstanceProper
153156
private void configureRetryIntervalFunction(InstanceProperties properties, RetryConfig.Builder<Object> builder) {
154157
if (properties.getWaitDurationMillis() != null && properties.getWaitDurationMillis() != 0) {
155158
long waitDuration = properties.getWaitDurationMillis();
156-
if (properties.getEnableExponentialBackoff()) {
157-
if (properties.getExponentialBackoffMultiplier() != 0) {
159+
if (properties.getEnableExponentialBackoff() != null && properties.getEnableExponentialBackoff()) {
160+
if (properties.getExponentialBackoffMultiplier() != null) {
158161
builder.intervalFunction(IntervalFunction.ofExponentialBackoff(waitDuration, properties.getExponentialBackoffMultiplier()));
159162
} else {
160163
builder.intervalFunction(IntervalFunction.ofExponentialBackoff(properties.getWaitDurationMillis()));
161164
}
162-
} else if (properties.getEnableRandomizedWait()) {
163-
if (properties.getRandomizedWaitFactor() != 0) {
165+
} else if (properties.getEnableRandomizedWait() != null && properties.getEnableRandomizedWait()) {
166+
if (properties.getRandomizedWaitFactor() != null) {
164167
builder.intervalFunction(IntervalFunction.ofRandomized(waitDuration, properties.getRandomizedWaitFactor()));
165168
} else {
166169
builder.intervalFunction(IntervalFunction.ofRandomized(waitDuration));
@@ -213,25 +216,27 @@ public static class InstanceProperties {
213216
* event buffer size for generated retry events
214217
*/
215218
@Min(1)
216-
private Integer eventConsumerBufferSize = 100;
219+
@Nullable
220+
private Integer eventConsumerBufferSize;
217221
/*
218222
* flag to enable Exponential backoff policy or not for retry policy delay
219223
*/
220-
@NotNull
221-
private Boolean enableExponentialBackoff = false;
224+
@Nullable
225+
private Boolean enableExponentialBackoff;
222226
/*
223227
* exponential backoff multiplier value
224228
*/
225-
private double exponentialBackoffMultiplier;
226-
@NotNull
229+
private Double exponentialBackoffMultiplier;
230+
227231
/*
228232
* flag to enable randomized delay policy or not for retry policy delay
229233
*/
230-
private Boolean enableRandomizedWait = false;
234+
@Nullable
235+
private Boolean enableRandomizedWait;
231236
/*
232237
* randomized delay factor value
233238
*/
234-
private double randomizedWaitFactor;
239+
private Double randomizedWaitFactor;
235240

236241
@Nullable
237242
private String baseConfig;
@@ -315,11 +320,11 @@ public InstanceProperties setEnableExponentialBackoff(Boolean enableExponentialB
315320
}
316321

317322
@Nullable
318-
public double getExponentialBackoffMultiplier() {
323+
public Double getExponentialBackoffMultiplier() {
319324
return exponentialBackoffMultiplier;
320325
}
321326

322-
public InstanceProperties setExponentialBackoffMultiplier(double exponentialBackoffMultiplier) {
327+
public InstanceProperties setExponentialBackoffMultiplier(Double exponentialBackoffMultiplier) {
323328
this.exponentialBackoffMultiplier = exponentialBackoffMultiplier;
324329
return this;
325330
}
@@ -335,11 +340,11 @@ public InstanceProperties setEnableRandomizedWait(Boolean enableRandomizedWait)
335340
}
336341

337342
@Nullable
338-
public double getRandomizedWaitFactor() {
343+
public Double getRandomizedWaitFactor() {
339344
return randomizedWaitFactor;
340345
}
341346

342-
public InstanceProperties setRandomizedWaitFactor(double randomizedWaitFactor) {
347+
public InstanceProperties setRandomizedWaitFactor(Double randomizedWaitFactor) {
343348
this.randomizedWaitFactor = randomizedWaitFactor;
344349
return this;
345350
}

0 commit comments

Comments
 (0)