Skip to content

Commit 28416bf

Browse files
committed
Removed circuit breaker wrapper entirely.
1 parent 00eff37 commit 28416bf

8 files changed

Lines changed: 37 additions & 284 deletions

File tree

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
package org.prebid.server.geolocation;
22

3+
import io.vertx.circuitbreaker.CircuitBreaker;
4+
import io.vertx.circuitbreaker.CircuitBreakerOptions;
5+
import io.vertx.circuitbreaker.CircuitBreakerState;
36
import io.vertx.core.Future;
47
import io.vertx.core.Vertx;
58
import org.prebid.server.execution.timeout.Timeout;
69
import org.prebid.server.geolocation.model.GeoInfo;
7-
import org.prebid.server.log.ConditionalLogger;
810
import org.prebid.server.log.Logger;
911
import org.prebid.server.log.LoggerFactory;
1012
import org.prebid.server.metric.Metrics;
11-
import org.prebid.server.vertx.CircuitBreaker;
1213

1314
import java.util.Objects;
14-
import java.util.concurrent.TimeUnit;
1515

1616
/**
1717
* Wrapper for geolocation service with circuit breaker.
1818
*/
1919
public class CircuitBreakerSecuredGeoLocationService implements GeoLocationService {
2020

2121
private static final Logger logger = LoggerFactory.getLogger(CircuitBreakerSecuredGeoLocationService.class);
22-
private static final ConditionalLogger conditionalLogger = new ConditionalLogger(logger);
23-
private static final int LOG_PERIOD_SECONDS = 5;
2422

2523
private final GeoLocationService geoLocationService;
2624
private final CircuitBreaker breaker;
@@ -34,17 +32,16 @@ public CircuitBreakerSecuredGeoLocationService(Vertx vertx,
3432

3533
this.geoLocationService = Objects.requireNonNull(geoLocationService);
3634

37-
breaker = new CircuitBreaker(
35+
breaker = CircuitBreaker.create(
3836
"geo_cb",
3937
Objects.requireNonNull(vertx),
40-
openingThreshold,
41-
openingIntervalMs,
42-
closingIntervalMs)
43-
.openHandler(ignored -> circuitOpened())
44-
.halfOpenHandler(ignored -> circuitHalfOpened())
45-
.closeHandler(ignored -> circuitClosed());
38+
new CircuitBreakerOptions()
39+
.setNotificationPeriod(0)
40+
.setMaxFailures(openingThreshold)
41+
.setFailuresRollingWindow(openingIntervalMs)
42+
.setResetTimeout(closingIntervalMs));
4643

47-
metrics.createGeoLocationCircuitBreakerGauge(breaker::isOpen);
44+
metrics.createGeoLocationCircuitBreakerGauge(() -> breaker.state() != CircuitBreakerState.CLOSED);
4845

4946
logger.info("Initialized GeoLocation service with Circuit Breaker");
5047
}
@@ -53,19 +50,4 @@ public CircuitBreakerSecuredGeoLocationService(Vertx vertx,
5350
public Future<GeoInfo> lookup(String ip, Timeout timeout) {
5451
return breaker.execute(() -> geoLocationService.lookup(ip, timeout));
5552
}
56-
57-
private void circuitOpened() {
58-
conditionalLogger.warn(
59-
"GeoLocation service is unavailable, circuit opened.",
60-
LOG_PERIOD_SECONDS,
61-
TimeUnit.SECONDS);
62-
}
63-
64-
private void circuitHalfOpened() {
65-
logger.warn("GeoLocation service is ready to try again, circuit half-opened.");
66-
}
67-
68-
private void circuitClosed() {
69-
logger.warn("GeoLocation service becomes working, circuit closed.");
70-
}
7153
}

src/main/java/org/prebid/server/vertx/CircuitBreaker.java

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,27 @@
11
package org.prebid.server.vertx.database;
22

3+
import io.vertx.circuitbreaker.CircuitBreaker;
4+
import io.vertx.circuitbreaker.CircuitBreakerOptions;
5+
import io.vertx.circuitbreaker.CircuitBreakerState;
36
import io.vertx.core.Future;
47
import io.vertx.core.Vertx;
58
import io.vertx.sqlclient.Row;
69
import io.vertx.sqlclient.RowSet;
710
import org.prebid.server.execution.timeout.Timeout;
8-
import org.prebid.server.log.ConditionalLogger;
911
import org.prebid.server.log.Logger;
1012
import org.prebid.server.log.LoggerFactory;
1113
import org.prebid.server.metric.Metrics;
12-
import org.prebid.server.vertx.CircuitBreaker;
1314

1415
import java.util.List;
1516
import java.util.Objects;
16-
import java.util.concurrent.TimeUnit;
1717
import java.util.function.Function;
1818

1919
/**
20-
* Database Client wrapped by {@link CircuitBreaker} to achieve robust operating.
20+
* Database Client wrapped by CircuitBreaker to achieve robust operating.
2121
*/
2222
public class CircuitBreakerSecuredDatabaseClient implements DatabaseClient {
2323

2424
private static final Logger logger = LoggerFactory.getLogger(CircuitBreakerSecuredDatabaseClient.class);
25-
private static final ConditionalLogger conditionalLogger = new ConditionalLogger(logger);
26-
private static final int LOG_PERIOD_SECONDS = 5;
2725

2826
private final DatabaseClient databaseClient;
2927
private final CircuitBreaker breaker;
@@ -37,17 +35,16 @@ public CircuitBreakerSecuredDatabaseClient(Vertx vertx,
3735

3836
this.databaseClient = Objects.requireNonNull(databaseClient);
3937

40-
breaker = new CircuitBreaker(
38+
breaker = CircuitBreaker.create(
4139
"db_cb",
4240
Objects.requireNonNull(vertx),
43-
openingThreshold,
44-
openingIntervalMs,
45-
closingIntervalMs)
46-
.openHandler(ignored -> circuitOpened())
47-
.halfOpenHandler(ignored -> circuitHalfOpened())
48-
.closeHandler(ignored -> circuitClosed());
41+
new CircuitBreakerOptions()
42+
.setNotificationPeriod(0)
43+
.setMaxFailures(openingThreshold)
44+
.setFailuresRollingWindow(openingIntervalMs)
45+
.setResetTimeout(closingIntervalMs));
4946

50-
metrics.createDatabaseCircuitBreakerGauge(breaker::isOpen);
47+
metrics.createDatabaseCircuitBreakerGauge(() -> breaker.state() != CircuitBreakerState.CLOSED);
5148

5249
logger.info("Initialized database client with Circuit Breaker");
5350
}
@@ -60,16 +57,4 @@ public <T> Future<T> executeQuery(String query,
6057

6158
return breaker.execute(() -> databaseClient.executeQuery(query, params, mapper, timeout));
6259
}
63-
64-
private void circuitOpened() {
65-
conditionalLogger.warn("Database is unavailable, circuit opened.", LOG_PERIOD_SECONDS, TimeUnit.SECONDS);
66-
}
67-
68-
private void circuitHalfOpened() {
69-
logger.warn("Database is ready to try again, circuit half-opened.");
70-
}
71-
72-
private void circuitClosed() {
73-
logger.warn("Database becomes working, circuit closed.");
74-
}
7560
}

src/main/java/org/prebid/server/vertx/httpclient/CircuitBreakerSecuredHttpClient.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package org.prebid.server.vertx.httpclient;
22

33
import com.github.benmanes.caffeine.cache.Caffeine;
4+
import io.vertx.circuitbreaker.CircuitBreaker;
5+
import io.vertx.circuitbreaker.CircuitBreakerOptions;
6+
import io.vertx.circuitbreaker.CircuitBreakerState;
47
import io.vertx.core.Future;
58
import io.vertx.core.MultiMap;
69
import io.vertx.core.Vertx;
@@ -10,7 +13,6 @@
1013
import org.prebid.server.log.Logger;
1114
import org.prebid.server.log.LoggerFactory;
1215
import org.prebid.server.metric.Metrics;
13-
import org.prebid.server.vertx.CircuitBreaker;
1416
import org.prebid.server.vertx.httpclient.model.HttpClientResponse;
1517

1618
import java.net.MalformedURLException;
@@ -88,12 +90,14 @@ private CircuitBreaker createCircuitBreaker(String name,
8890
long closingIntervalMs,
8991
Metrics metrics) {
9092

91-
final CircuitBreaker circuitBreaker = new CircuitBreaker(
92-
"http_cb_" + name,
93-
Objects.requireNonNull(vertx),
94-
openingThreshold,
95-
openingIntervalMs,
96-
closingIntervalMs)
93+
final CircuitBreakerOptions options = new CircuitBreakerOptions()
94+
.setNotificationPeriod(0)
95+
.setMaxFailures(openingThreshold)
96+
.setFailuresRollingWindow(openingIntervalMs)
97+
.setResetTimeout(closingIntervalMs);
98+
99+
final CircuitBreaker circuitBreaker = CircuitBreaker.create(
100+
"http_cb_" + name, Objects.requireNonNull(vertx), options)
97101
.openHandler(ignored -> circuitOpened(name))
98102
.halfOpenHandler(ignored -> circuitHalfOpened(name))
99103
.closeHandler(ignored -> circuitClosed(name));
@@ -104,7 +108,8 @@ private CircuitBreaker createCircuitBreaker(String name,
104108
}
105109

106110
private void createCircuitBreakerGauge(String name, CircuitBreaker circuitBreaker, Metrics metrics) {
107-
metrics.createHttpClientCircuitBreakerGauge(idFrom(name), circuitBreaker::isOpen);
111+
metrics.createHttpClientCircuitBreakerGauge(
112+
idFrom(name), () -> circuitBreaker.state() != CircuitBreakerState.CLOSED);
108113
}
109114

110115
private void removeCircuitBreakerGauge(String name, Metrics metrics) {

src/test/java/org/prebid/server/handler/SetuidHandlerTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,9 @@ public void shouldThrowExceptionInCaseOfBaseBidderCookieFamilyNameDuplicates() {
853853
}
854854

855855
private static Cookie equalToUidsCookie(UidsCookie uidsCookie) throws JsonProcessingException {
856-
final String value = Base64.getUrlEncoder().encodeToString(mapper.writeValueAsBytes(uidsCookie.getCookieUids()));
856+
final String value = Base64.getUrlEncoder()
857+
.encodeToString(mapper.writeValueAsBytes(uidsCookie.getCookieUids()));
858+
857859
return cookieEqualTo("uids", value);
858860
}
859861

src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VendorListServiceTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import io.vertx.core.Future;
5-
import io.vertx.core.Handler;
65
import io.vertx.core.Vertx;
76
import io.vertx.core.buffer.Buffer;
87
import io.vertx.core.file.FileSystem;
@@ -12,7 +11,6 @@
1211
import org.junit.jupiter.api.extension.ExtendWith;
1312
import org.mockito.Mock;
1413
import org.mockito.junit.jupiter.MockitoExtension;
15-
import org.mockito.stubbing.Answer;
1614
import org.prebid.server.VertxTest;
1715
import org.prebid.server.bidder.BidderCatalog;
1816
import org.prebid.server.exception.PreBidException;

0 commit comments

Comments
 (0)