Skip to content

Commit 101c158

Browse files
committed
fix HttpPostSink initialization race condition
1 parent 750852b commit 101c158

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

src/main/java/com/arpnetworking/tsdcore/sinks/HttpPostSink.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.asynchttpclient.RequestBuilder;
4646
import org.asynchttpclient.uri.Uri;
4747

48+
import java.io.Serial;
4849
import java.net.URI;
4950
import java.time.Duration;
5051
import java.util.Collection;
@@ -206,6 +207,12 @@ protected HttpPostSink(final Builder<?, ?> builder) {
206207
_uri = builder._uri;
207208
_aysncHttpClientUri = Uri.create(_uri.toString());
208209

210+
_maximumAttempts = builder._maximumAttempts;
211+
_baseBackoff = builder._baseBackoff;
212+
_maximumDelay = builder._maximumDelay;
213+
_acceptedStatusCodes = builder._acceptedStatusCodes;
214+
_retryableStatusCodes = builder._retryableStatusCodes;
215+
209216
_sinkActor = builder._actorSystem.actorOf(
210217
HttpSinkActor.props(
211218
CLIENT,
@@ -214,12 +221,6 @@ protected HttpPostSink(final Builder<?, ?> builder) {
214221
builder._maximumQueueSize,
215222
builder._spreadPeriod,
216223
builder._periodicMetrics));
217-
218-
_maximumAttempts = builder._maximumAttempts;
219-
_baseBackoff = builder._baseBackoff;
220-
_maximumDelay = builder._maximumDelay;
221-
_acceptedStatusCodes = builder._acceptedStatusCodes;
222-
_retryableStatusCodes = builder._retryableStatusCodes;
223224
}
224225

225226
private final URI _uri;
@@ -441,6 +442,7 @@ protected Builder(final Function<B, S> targetConstructor) {
441442

442443
private static final class CheckPeriod implements CheckWithCheck.SimpleCheck {
443444

445+
@Serial
444446
private static final long serialVersionUID = -6924010227680984149L;
445447

446448
@Override

src/main/java/com/arpnetworking/tsdcore/sinks/HttpSinkActor.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -430,18 +430,30 @@ private void fireRequest(final RequestEntry request, final int attempt) {
430430
final long requestStartTime = System.currentTimeMillis();
431431
final CompletionStage<Object> responsePromise = promise
432432
.handle((result, err) -> {
433-
_periodicMetrics.recordTimer(
434-
_requestLatencyName,
435-
System.currentTimeMillis() - requestStartTime,
436-
Optional.of(TimeUnit.MILLISECONDS));
437-
if (err == null) {
438-
if (_acceptedStatusCodes.contains(result.getStatusCode())) {
439-
return new PostSuccess(attempt, request, result);
433+
try {
434+
_periodicMetrics.recordTimer(
435+
_requestLatencyName,
436+
System.currentTimeMillis() - requestStartTime,
437+
Optional.of(TimeUnit.MILLISECONDS));
438+
if (err == null) {
439+
if (_acceptedStatusCodes.contains(result.getStatusCode())) {
440+
return new PostSuccess(attempt, request, result);
441+
} else {
442+
return new PostRejected(attempt, request, result);
443+
}
440444
} else {
441-
return new PostRejected(attempt, request, result);
445+
return new PostFailure(attempt, request, err);
442446
}
443-
} else {
444-
return new PostFailure(attempt, request, err);
447+
// CHECKSTYLE.OFF: IllegalCatch - We need to catch everything here
448+
} catch (final Exception e) {
449+
// CHECKSTYLE.ON: IllegalCatch
450+
POST_ERROR_LOGGER.error()
451+
.setMessage("Error while handling POST response")
452+
.setThrowable(e)
453+
.addData("sink", _sink)
454+
.addContext("actor", self())
455+
.log();
456+
return new PostFailure(attempt, request, e);
445457
}
446458
});
447459
Patterns.pipe(responsePromise, context().dispatcher()).to(self());

0 commit comments

Comments
 (0)