Skip to content

Commit d00a909

Browse files
committed
move flush out
1 parent 4d95d8a commit d00a909

3 files changed

Lines changed: 15 additions & 17 deletions

File tree

‎openfeature-provider-local/src/main/java/com/spotify/confidence/LocalResolverServiceFactory.java‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class LocalResolverServiceFactory implements ResolverServiceFactory {
4646
Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().setDaemon(true).build());
4747
private static final Duration RESOLVE_INFO_LOG_INTERVAL = Duration.ofMinutes(1);
4848
private final StickyResolveStrategy stickyResolveStrategy;
49+
private static final ScheduledExecutorService logPollExecutor =
50+
Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().setDaemon(true).build());
4951

5052
private static ManagedChannel createConfidenceChannel() {
5153
final String confidenceDomain =
@@ -111,9 +113,14 @@ private static FlagResolverService createFlagResolverService(
111113
sidecarFlagsAdminFetcher.accountId,
112114
stickyResolveStrategy);
113115
flagsFetcherExecutor.scheduleAtFixedRate(
116+
sidecarFlagsAdminFetcher::reload,
117+
pollIntervalSeconds,
118+
pollIntervalSeconds,
119+
TimeUnit.SECONDS);
120+
121+
logPollExecutor.scheduleAtFixedRate(
114122
() -> {
115-
sidecarFlagsAdminFetcher.reload();
116-
wasmResolverApi.updateState(
123+
wasmResolverApi.checkpoint(
117124
sidecarFlagsAdminFetcher.rawStateHolder().get().toByteArray(),
118125
sidecarFlagsAdminFetcher.accountId);
119126
},
@@ -176,7 +183,7 @@ private static FlagResolverService createFlagResolverService(
176183
flagLogger, resolverStateProtobuf, accountId, stickyResolveStrategy);
177184
flagsFetcherExecutor.scheduleAtFixedRate(
178185
() -> {
179-
wasmResolverApi.updateState(accountStateProvider.provide(), accountId);
186+
wasmResolverApi.checkpoint(accountStateProvider.provide(), accountId);
180187
},
181188
pollIntervalSeconds,
182189
pollIntervalSeconds,
@@ -236,7 +243,7 @@ private static FlagResolverService createFlagResolverService(
236243
@VisibleForTesting
237244
public void setState(byte[] state, String accountId) {
238245
if (this.wasmResolveApi != null) {
239-
wasmResolveApi.updateState(state, accountId);
246+
wasmResolveApi.checkpoint(state, accountId);
240247
}
241248
}
242249

‎openfeature-provider-local/src/main/java/com/spotify/confidence/SwapWasmResolverApi.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ public SwapWasmResolverApi(
3434
this.wasmResolverApiRef.set(primaryWasmResolverApi);
3535
}
3636

37-
public void updateState(byte[] state, String accountId) {
37+
public void checkpoint(byte[] state, String accountId) {
3838
if (isPrimary) {
3939
this.secondaryWasmResolverApi.setResolverState(state, accountId);
4040
this.wasmResolverApiRef.set(secondaryWasmResolverApi);
41+
this.primaryWasmResolverApi.flushLogs();
4142
} else {
4243
this.primaryWasmResolverApi.setResolverState(state, accountId);
4344
this.wasmResolverApiRef.set(primaryWasmResolverApi);
45+
this.secondaryWasmResolverApi.flushLogs();
4446
}
4547
isPrimary = !isPrimary;
4648
}

‎openfeature-provider-local/src/main/java/com/spotify/confidence/WasmResolveApi.java‎

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.dylibso.chicory.wasm.WasmModule;
1111
import com.dylibso.chicory.wasm.types.FunctionType;
1212
import com.dylibso.chicory.wasm.types.ValType;
13-
import com.google.common.util.concurrent.ThreadFactoryBuilder;
1413
import com.google.protobuf.ByteString;
1514
import com.google.protobuf.BytesValue;
1615
import com.google.protobuf.GeneratedMessageV3;
@@ -29,8 +28,6 @@
2928
import java.security.SecureRandom;
3029
import java.time.Instant;
3130
import java.util.List;
32-
import java.util.concurrent.Executors;
33-
import java.util.concurrent.ScheduledExecutorService;
3431
import java.util.function.Function;
3532
import javax.crypto.Cipher;
3633
import javax.crypto.spec.IvParameterSpec;
@@ -57,14 +54,10 @@ class WasmResolveApi {
5754
private final ExportFunction wasmMsgGuestSetResolverState;
5855
private final ExportFunction wasmMsgFlushLogs;
5956
private final ExportFunction wasmMsgGuestResolve;
60-
private static final ScheduledExecutorService logPollExecutor =
61-
Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().setDaemon(true).build());
6257
private final ExportFunction wasmMsgGuestResolveWithSticky;
6358

6459
public WasmResolveApi(WasmFlagLogger flagLogger) {
6560
this.writeFlagLogs = flagLogger;
66-
logPollExecutor.scheduleAtFixedRate(
67-
this::flushLogs, 10, 10, java.util.concurrent.TimeUnit.SECONDS);
6861
try (InputStream wasmStream =
6962
getClass().getClassLoader().getResourceAsStream("wasm/confidence_resolver.wasm")) {
7063
if (wasmStream == null) {
@@ -145,10 +138,6 @@ private Timestamp currentTime(Messages.Void unused) {
145138
return Timestamp.newBuilder().setSeconds(Instant.now().getEpochSecond()).build();
146139
}
147140

148-
public void close() {
149-
logPollExecutor.shutdownNow();
150-
}
151-
152141
public void setResolverState(byte[] state, String accountId) {
153142
final var resolverStateRequest =
154143
Messages.SetResolverStateRequest.newBuilder()
@@ -165,7 +154,7 @@ public void setResolverState(byte[] state, String accountId) {
165154
consumeResponse(respPtr, Messages.Void::parseFrom);
166155
}
167156

168-
private void flushLogs() {
157+
public void flushLogs() {
169158
final var voidRequest = Messages.Void.getDefaultInstance();
170159
final var reqPtr = transferRequest(voidRequest);
171160
final var respPtr = (int) wasmMsgFlushLogs.apply(reqPtr)[0];

0 commit comments

Comments
 (0)