Skip to content

Commit 94c667d

Browse files
committed
update to refactor buildAggregateMessage in ProviderError
Signed-off-by: Parth Suthar <parth.suthar@dynatrace.com>
1 parent 2cd1b9b commit 94c667d

4 files changed

Lines changed: 29 additions & 29 deletions

File tree

src/main/java/dev/openfeature/sdk/multiprovider/FirstMatchStrategy.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.List;
1212
import java.util.Map;
1313
import java.util.function.Function;
14-
import java.util.stream.Collectors;
1514
import lombok.NoArgsConstructor;
1615
import lombok.extern.slf4j.Slf4j;
1716

@@ -65,19 +64,11 @@ public <T> ProviderEvaluation<T> evaluate(
6564
}
6665

6766
// All providers either threw or returned FLAG_NOT_FOUND
68-
String aggregateMessage = buildAggregateMessage(collectedErrors);
6967
return MultiProviderEvaluation.<T>multiProviderBuilder()
70-
.errorMessage(aggregateMessage)
68+
.errorMessage(
69+
ProviderError.buildAggregateMessage("Flag not found in any provider", collectedErrors))
7170
.errorCode(FLAG_NOT_FOUND)
7271
.providerErrors(collectedErrors)
7372
.build();
7473
}
75-
76-
private static String buildAggregateMessage(List<ProviderError> errors) {
77-
if (errors.isEmpty()) {
78-
return "Flag not found in any provider";
79-
}
80-
String details = errors.stream().map(ProviderError::toString).collect(Collectors.joining(", "));
81-
return "Flag not found in any provider. Provider errors: [" + details + "]";
82-
}
8374
}

src/main/java/dev/openfeature/sdk/multiprovider/FirstSuccessfulStrategy.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.util.List;
99
import java.util.Map;
1010
import java.util.function.Function;
11-
import java.util.stream.Collectors;
1211
import lombok.NoArgsConstructor;
1312
import lombok.extern.slf4j.Slf4j;
1413

@@ -50,19 +49,11 @@ public <T> ProviderEvaluation<T> evaluate(
5049
}
5150
}
5251

53-
String aggregateMessage = buildAggregateMessage(collectedErrors);
5452
return MultiProviderEvaluation.<T>multiProviderBuilder()
55-
.errorMessage(aggregateMessage)
53+
.errorMessage(
54+
ProviderError.buildAggregateMessage("No provider successfully responded", collectedErrors))
5655
.errorCode(ErrorCode.GENERAL)
5756
.providerErrors(collectedErrors)
5857
.build();
5958
}
60-
61-
private static String buildAggregateMessage(List<ProviderError> errors) {
62-
if (errors.isEmpty()) {
63-
return "No provider successfully responded";
64-
}
65-
String details = errors.stream().map(ProviderError::toString).collect(Collectors.joining(", "));
66-
return "No provider successfully responded. Provider errors: [" + details + "]";
67-
}
6859
}

src/main/java/dev/openfeature/sdk/multiprovider/MultiProviderEvaluation.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
import java.util.List;
88

99
/**
10-
* A {@link ProviderEvaluation} subtype returned by multi-provider strategies when all providers
11-
* fail to produce a successful result.
10+
* A {@link ProviderEvaluation} subtype returned by multi-provider strategies that carries
11+
* per-provider error details.
1212
*
13-
* <p>This type carries per-provider error details so that callers can inspect why each individual
14-
* provider failed. It is only returned in error scenarios; successful evaluations always return
15-
* a plain {@link ProviderEvaluation}.
13+
* <p>This type can represent both successful and failed evaluations. When a strategy exhausts
14+
* all providers without a successful result, the per-provider errors describe why each provider
15+
* failed. Custom strategies may also use this type for successful results to surface information
16+
* about providers that were skipped or failed before the successful one.
1617
*
1718
* <p>Usage:
1819
* <pre>{@code
@@ -40,8 +41,9 @@ private MultiProviderEvaluation(
4041
ImmutableMetadata flagMetadata,
4142
List<ProviderError> providerErrors) {
4243
super(value, variant, reason, errorCode, errorMessage, flagMetadata);
43-
this.providerErrors =
44-
providerErrors != null ? Collections.unmodifiableList(providerErrors) : Collections.emptyList();
44+
this.providerErrors = providerErrors != null
45+
? Collections.unmodifiableList(providerErrors)
46+
: Collections.emptyList();
4547
}
4648

4749
/**

src/main/java/dev/openfeature/sdk/multiprovider/ProviderError.java

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

33
import dev.openfeature.sdk.ErrorCode;
44
import dev.openfeature.sdk.exceptions.OpenFeatureError;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
57
import lombok.AllArgsConstructor;
68
import lombok.Builder;
79
import lombok.Data;
@@ -49,6 +51,20 @@ public static ProviderError fromException(String providerName, Exception excepti
4951
return new ProviderError(providerName, code, exception.getMessage(), exception);
5052
}
5153

54+
/**
55+
* Build an aggregate error message from a list of provider errors.
56+
*
57+
* @param baseMessage the base message to use (e.g. "No provider successfully responded")
58+
* @param errors the list of per-provider errors
59+
* @return an aggregate message including per-provider details
60+
*/
61+
public static String buildAggregateMessage(String baseMessage, List<ProviderError> errors) {
62+
String details = errors.stream()
63+
.map(ProviderError::toString)
64+
.collect(Collectors.joining(", "));
65+
return baseMessage + ". Provider errors: [" + details + "]";
66+
}
67+
5268
@Override
5369
public String toString() {
5470
return providerName + ": " + errorCode + " (" + (errorMessage != null ? errorMessage : "unknown") + ")";

0 commit comments

Comments
 (0)