Skip to content

Commit 60a3c0f

Browse files
authored
Merge pull request #262 from faststats-dev/fix/feature-flag-fetching
Fix featureflag fetching
2 parents 6e4948c + 7cff78f commit 60a3c0f

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

‎core/src/main/java/dev/faststats/SimpleFeatureFlagService.java‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,15 @@ final class SimpleFeatureFlagService extends SubmissionService implements Featur
4545

4646
@SuppressWarnings("unchecked")
4747
<T> CompletableFuture<T> fetch(final SimpleFeatureFlag<T> flag) {
48-
return (CompletableFuture<T>) fetchesInProgress.computeIfAbsent(flag.getId(), ignored -> createFetch(flag));
48+
final var future = new CompletableFuture<T>();
49+
final var existing = fetchesInProgress.putIfAbsent(flag.getId(), future);
50+
if (existing != null) return (CompletableFuture<T>) existing;
51+
createFetch(flag).whenComplete((value, throwable) -> {
52+
fetchesInProgress.remove(flag.getId(), future);
53+
if (throwable != null) future.completeExceptionally(throwable);
54+
else future.complete(value);
55+
});
56+
return future;
4957
}
5058

5159
<T> CompletableFuture<T> optIn(final SimpleFeatureFlag<T> flag) {
@@ -72,8 +80,7 @@ private <T> CompletableFuture<T> createFetch(final SimpleFeatureFlag<T> flag) {
7280
final var request = createRequest(CHECK_PATH, requestBody);
7381
logger.info("Fetching %s: %s", request.uri(), requestBody.toString());
7482
return HTTP_CLIENT.sendAsync(request, HttpResponse.BodyHandlers.ofString())
75-
.thenApply(response -> handleFetchResponse(flag, response))
76-
.whenComplete((ignored, throwable) -> fetchesInProgress.remove(flag.getId()));
83+
.thenApply(response -> handleFetchResponse(flag, response));
7784
}
7885

7986
private JsonObject createRequestBody(final SimpleFeatureFlag<?> flag) {

‎core/src/test/java/dev/faststats/FeatureFlagTest.java‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,7 @@ private void handle(final Socket client) {
265265
}
266266

267267
final var body = new String(bodyChars, 0, read);
268-
final var e = new Request(path, headers, body.isEmpty() ? new JsonObject() : JsonParser.parseString(body).getAsJsonObject());
269-
System.out.println("parsed body: " + body + ", " + e.body);
270-
requests.add(e);
268+
requests.add(new Request(path, headers, body.isEmpty() ? new JsonObject() : JsonParser.parseString(body).getAsJsonObject()));
271269

272270
final var response = responses.poll(1, TimeUnit.SECONDS);
273271
if (response == null) throw new AssertionError("No response enqueued");

0 commit comments

Comments
 (0)