Skip to content

Commit 07195a7

Browse files
committed
adjust rpc resolver
Signed-off-by: lea konvalinka <lea.konvalinka@dynatrace.com>
1 parent 654c8da commit 07195a7

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ EvaluationContext getEnrichedContext() {
194194

195195
@SuppressWarnings("checkstyle:fallthrough")
196196
private void onProviderEvent(FlagdProviderEvent flagdProviderEvent) {
197-
log.info("FlagdProviderEvent event {} ", flagdProviderEvent.getEvent());
197+
log.debug("FlagdProviderEvent event {} ", flagdProviderEvent.getEvent());
198198
synchronized (syncResources) {
199199
/*
200200
* We only use Error and Ready as previous states.
@@ -240,7 +240,6 @@ private void onProviderEvent(FlagdProviderEvent flagdProviderEvent) {
240240

241241
private void onError() {
242242
this.emitProviderError(ProviderEventDetails.builder().errorCode(ErrorCode.PROVIDER_FATAL).build());
243-
shutdown();
244243
}
245244

246245
private void onConfigurationChanged(FlagdProviderEvent flagdProviderEvent) {

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSource.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ private void observeSyncStream() {
143143
if (fatalStatusCodes.contains(metaEx.getStatus().getCode().name())) {
144144
//throw new FatalError("Failed to connect for metadata request, not retrying for error " + metaEx.getStatus());
145145
enqueueFatal("Fatal: Failed to connect for metadata request, not retrying for error " + metaEx.getStatus().getCode());
146-
return;
147146
}
148147
// retry for other status codes
149148
String message = metaEx.getMessage();

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/rpc/RpcResolver.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public final class RpcResolver implements Resolver {
6868
private final Consumer<FlagdProviderEvent> onProviderEvent;
6969
private final ServiceStub stub;
7070
private final ServiceBlockingStub blockingStub;
71+
private final List<String> fatalStatusCodes;
7172

7273
/**
7374
* Resolves flag values using
@@ -89,6 +90,7 @@ public RpcResolver(
8990
this.stub = ServiceGrpc.newStub(this.connector.getChannel()).withWaitForReady();
9091
this.blockingStub =
9192
ServiceGrpc.newBlockingStub(this.connector.getChannel()).withWaitForReady();
93+
this.fatalStatusCodes = options.getFatalStatusCodes();
9294
}
9395

9496
// testing only
@@ -107,6 +109,7 @@ protected RpcResolver(
107109
this.onProviderEvent = onProviderEvent;
108110
this.stub = mockStub;
109111
this.blockingStub = mockBlockingStub;
112+
this.fatalStatusCodes = options.getFatalStatusCodes();
110113
}
111114

112115
/**
@@ -353,7 +356,12 @@ private void observeEventStream() throws InterruptedException {
353356
log.debug(
354357
"Exception in event stream connection, streamException {}, will reconnect",
355358
streamException);
356-
this.handleErrorOrComplete();
359+
if (streamException instanceof StatusRuntimeException && fatalStatusCodes.contains(
360+
((StatusRuntimeException) streamException).getStatus().getCode().name())) {
361+
this.handleFatalError();
362+
} else {
363+
this.handleErrorOrComplete();
364+
}
357365
break;
358366
}
359367

@@ -412,9 +420,15 @@ private void handleProviderReadyEvent() {
412420
* Handles provider error events by clearing the cache (if enabled) and notifying listeners of the error.
413421
*/
414422
private void handleErrorOrComplete() {
415-
log.debug("Emitting provider error event");
423+
log.debug("Emitting provider stale event");
416424

417425
// complete is an error, logically...even if the server went down gracefully we need to reconnect.
426+
onProviderEvent.accept(new FlagdProviderEvent(ProviderEvent.PROVIDER_STALE));
427+
}
428+
429+
private void handleFatalError() {
430+
log.debug("Emitting provider error event");
431+
418432
onProviderEvent.accept(new FlagdProviderEvent(ProviderEvent.PROVIDER_ERROR));
419433
}
420434
}

0 commit comments

Comments
 (0)