Skip to content

Commit

Permalink
fix: adding reason, and removing stacktraces from errors
Browse files Browse the repository at this point in the history
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
  • Loading branch information
aepfli committed Sep 10, 2024
1 parent 7276acb commit 3d4b992
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 14 deletions.
10 changes: 7 additions & 3 deletions src/main/java/dev/openfeature/sdk/OpenFeatureClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private <T> FlagEvaluationDetails<T> evaluateFlag(FlagValueType type, String key
OpenFeatureError error = ExceptionUtils.instantiateErrorByErrorCode(
details.getErrorCode(),
details.getErrorMessage());
details.setValue(defaultValue);
enrichDetailsWithErrorDefaults(defaultValue, details);
hookSupport.errorHooks(type, afterHookContext, error, mergedHooks, hints);
} else {
hookSupport.afterHooks(type, afterHookContext, details, mergedHooks, hints);
Expand All @@ -150,8 +150,7 @@ private <T> FlagEvaluationDetails<T> evaluateFlag(FlagValueType type, String key
details.setErrorCode(ErrorCode.GENERAL);
}
details.setErrorMessage(e.getMessage());
details.setValue(defaultValue);
details.setReason(Reason.ERROR.toString());
enrichDetailsWithErrorDefaults(defaultValue, details);
hookSupport.errorHooks(type, afterHookContext, e, mergedHooks, hints);
} finally {
hookSupport.afterAllHooks(type, afterHookContext, mergedHooks, hints);
Expand All @@ -160,6 +159,11 @@ private <T> FlagEvaluationDetails<T> evaluateFlag(FlagValueType type, String key
return details;
}

private static <T> void enrichDetailsWithErrorDefaults(T defaultValue, FlagEvaluationDetails<T> details) {
details.setValue(defaultValue);
details.setReason(Reason.ERROR.toString());
}

/**
* Merge invocation contexts with API, transaction and client contexts.
* Does not merge before context.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,11 @@
import lombok.Getter;
import lombok.experimental.StandardException;

@SuppressWarnings("checkstyle:MissingJavadocType")
@SuppressWarnings({"checkstyle:MissingJavadocType", "squid:S110"})
@StandardException
public class FlagNotFoundError extends OpenFeatureError {
public class FlagNotFoundError extends OpenFeatureErrorWithoutStacktrace {
private static final long serialVersionUID = 1L;
@Getter private final ErrorCode errorCode = ErrorCode.FLAG_NOT_FOUND;
@Getter
private final ErrorCode errorCode = ErrorCode.FLAG_NOT_FOUND;

@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dev.openfeature.sdk.exceptions;

import lombok.experimental.StandardException;

@SuppressWarnings("checkstyle:MissingJavadocType")
@StandardException
public abstract class OpenFeatureErrorWithoutStacktrace extends OpenFeatureError {
private static final long serialVersionUID = 1L;

@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import lombok.Getter;
import lombok.experimental.StandardException;

@SuppressWarnings("checkstyle:MissingJavadocType")
@SuppressWarnings({"checkstyle:MissingJavadocType", "squid:S110"})
@StandardException
public class ProviderNotReadyError extends OpenFeatureError {
public class ProviderNotReadyError extends OpenFeatureErrorWithoutStacktrace {
private static final long serialVersionUID = 1L;
@Getter private final ErrorCode errorCode = ErrorCode.PROVIDER_NOT_READY;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
/**
* The type of the flag value does not match the expected type.
*/
@SuppressWarnings({"checkstyle:MissingJavadocType", "squid:S110"})
@StandardException
public class TypeMismatchError extends OpenFeatureError {
public class TypeMismatchError extends OpenFeatureErrorWithoutStacktrace {
private static final long serialVersionUID = 1L;

@Getter private final ErrorCode errorCode = ErrorCode.TYPE_MISMATCH;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,9 @@ public void initialize(EvaluationContext evaluationContext) throws Exception {
OpenFeatureAPI.getInstance().setProvider(providerName, provider);
assertThat(api.getProvider(providerName).getState()).isEqualTo(ProviderState.NOT_READY);
Client client = OpenFeatureAPI.getInstance().getClient(providerName);
assertEquals(ErrorCode.PROVIDER_NOT_READY, client.getBooleanDetails("return_error_when_not_initialized", false).getErrorCode());
FlagEvaluationDetails<Boolean> details = client.getBooleanDetails("return_error_when_not_initialized", false);
assertEquals(ErrorCode.PROVIDER_NOT_READY, details.getErrorCode());
assertEquals(Reason.ERROR.toString(), details.getReason());
}

@Specification(number="1.1.5", text="The API MUST provide a function for retrieving the metadata field of the configured provider.")
Expand Down Expand Up @@ -264,6 +266,7 @@ public void initialize(EvaluationContext evaluationContext) throws Exception {
FlagEvaluationDetails<Boolean> details = c.getBooleanDetails("key", defaultValue);
assertEquals(ErrorCode.FLAG_NOT_FOUND, details.getErrorCode());
assertEquals(TestConstants.BROKEN_MESSAGE, details.getErrorMessage());
assertEquals(Reason.ERROR.toString(), details.getReason());
assertEquals(defaultValue, details.getValue());
}

Expand All @@ -279,6 +282,7 @@ public void initialize(EvaluationContext evaluationContext) throws Exception {
FlagEvaluationDetails<Boolean> details = c.getBooleanDetails("key", defaultValue);
assertEquals(ErrorCode.FLAG_NOT_FOUND, details.getErrorCode());
assertEquals(TestConstants.BROKEN_MESSAGE, details.getErrorMessage());
assertEquals(Reason.ERROR.toString(), details.getReason());
assertEquals(defaultValue, details.getValue());
}

Expand Down

0 comments on commit 3d4b992

Please sign in to comment.