Skip to content

Commit 45a9822

Browse files
committed
fatal only on first connection
Signed-off-by: Konvalinka <lea.konvalinka@dynatrace.com>
1 parent 95a880c commit 45a9822

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class SyncStreamQueueSource implements QueueSource {
3838

3939
private final AtomicBoolean shutdown = new AtomicBoolean(false);
4040
private final AtomicBoolean shouldThrottle = new AtomicBoolean(false);
41+
private final AtomicBoolean successfulSync = new AtomicBoolean(false);
4142
private final int streamDeadline;
4243
private final int deadline;
4344
private final int maxBackoffMs;
@@ -137,7 +138,7 @@ private void observeSyncStream() {
137138
try {
138139
observer.metadata = getMetadata();
139140
} catch (StatusRuntimeException metaEx) {
140-
if (fatalStatusCodes.contains(metaEx.getStatus().getCode().name())) {
141+
if (fatalStatusCodes.contains(metaEx.getStatus().getCode().name()) && !successfulSync.get()) {
141142
log.debug("Fatal status code for metadata request: {}, not retrying", metaEx.getStatus().getCode());
142143
enqueueFatal(String.format("Fatal: Failed to connect for metadata request, not retrying for error %s", metaEx.getStatus().getCode()));
143144
} else {
@@ -152,8 +153,9 @@ private void observeSyncStream() {
152153

153154
try {
154155
syncFlags(observer);
156+
successfulSync.set(true);
155157
} catch (StatusRuntimeException ex) {
156-
if (fatalStatusCodes.contains(ex.getStatus().getCode().toString())) {
158+
if (fatalStatusCodes.contains(ex.getStatus().getCode().toString()) && !successfulSync.get()) {
157159
log.debug("Fatal status code during sync stream: {}, not retrying", ex.getStatus().getCode());
158160
enqueueFatal(String.format("Fatal: Failed to connect for metadata request, not retrying for error %s", ex.getStatus().getCode()));
159161
} else {

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
public final class RpcResolver implements Resolver {
6161
private static final int QUEUE_SIZE = 5;
6262
private final AtomicBoolean shutdown = new AtomicBoolean(false);
63+
private final AtomicBoolean successfulConnection = new AtomicBoolean(false);
6364
private final ChannelConnector connector;
6465
private final Cache cache;
6566
private final ResolveStrategy strategy;
@@ -351,18 +352,20 @@ private void observeEventStream() throws InterruptedException {
351352

352353
Throwable streamException = taken.getError();
353354
if (streamException != null) {
354-
log.debug(
355-
"Exception in event stream connection, streamException {}, will reconnect",
356-
streamException);
357355
if (streamException instanceof StatusRuntimeException && fatalStatusCodes.contains(
358-
((StatusRuntimeException) streamException).getStatus().getCode().name())) {
356+
((StatusRuntimeException) streamException).getStatus().getCode().name()) && !successfulConnection.get()) {
357+
log.debug("Fatal error code received: {}", ((StatusRuntimeException) streamException).getStatus().getCode());
359358
this.handleFatalError();
360359
} else {
360+
log.debug(
361+
"Exception in event stream connection, streamException {}, will reconnect",
362+
streamException);
361363
this.handleErrorOrComplete();
362364
}
363365
break;
364366
}
365367

368+
successfulConnection.set(true);
366369
final EventStreamResponse response = taken.getResponse();
367370
log.debug("Got stream response: {}", response);
368371

0 commit comments

Comments
 (0)