Skip to content

Commit 20284b9

Browse files
authored
fix: pass the account id together with the resolver state (#30)
1 parent 8fbd407 commit 20284b9

File tree

10 files changed

+46
-32
lines changed

10 files changed

+46
-32
lines changed

wasm/go-host/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func main() {
3838
defer api.Close(ctx)
3939

4040
// Set resolver state
41-
err = api.SetResolverState(resolverState)
41+
err = api.SetResolverState(resolverState, "confidence-demo-june")
4242
if err != nil {
4343
log.Fatalf("Failed to set resolver state: %v", err)
4444
}

wasm/go-host/resolver_api.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,17 +121,17 @@ func (r *ResolverApi) Close(ctx context.Context) {
121121
}
122122

123123
// SetResolverState sets the resolver state in the WASM module
124-
func (r *ResolverApi) SetResolverState(state []byte) error {
124+
func (r *ResolverApi) SetResolverState(state []byte, accountId string) error {
125125
ctx := context.Background()
126126

127-
// Create request wrapper
128-
request := &messages.Request{
129-
Data: state,
127+
// Create ResolverStateRequest message
128+
resolverStateRequest := &messages.SetResolverStateRequest{
129+
State: state,
130+
AccountId: accountId,
130131
}
131132

132133
// Transfer request to WASM memory
133-
req, _ := proto.Marshal(request)
134-
reqPtr := r.transfer(req)
134+
reqPtr := r.transferRequest(resolverStateRequest)
135135

136136
// Call the WASM function
137137
results, err := r.wasmMsgGuestSetResolverState.Call(ctx, uint64(reqPtr))

wasm/java-host/src/main/java/com/spotify/confidence/wasmresolvepoc/Main.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.dylibso.chicory.wasm.Parser;
44
import com.dylibso.chicory.wasm.WasmModule;
5+
import com.google.protobuf.ByteString;
56
import com.google.protobuf.Struct;
67
import com.google.protobuf.Value;
78
import com.spotify.confidence.flags.resolver.v1.ResolveFlagsRequest;
@@ -11,7 +12,7 @@
1112
import java.io.IOException;
1213
import java.nio.file.Files;
1314
import java.nio.file.Path;
14-
15+
import rust_guest.Messages.SetResolverStateRequest;
1516

1617
public class Main {
1718

@@ -31,7 +32,9 @@ public static void main(String[] args) throws IOException {
3132
Path resolveStatePath = Path.of("../resolver_state.pb");
3233
byte[] resolveState = Files.readAllBytes(resolveStatePath);
3334

34-
main.resolverApi.setResolverState(resolveState);
35+
main.resolverApi
36+
.setResolverState(SetResolverStateRequest.newBuilder()
37+
.setState(ByteString.copyFrom(resolveState)).setAccountId("confidence-demo-june").build());
3538

3639
// Verify RESOLVE_REASON_MATCH reason and non-empty variant for tutorial_visitor
3740
final ResolveFlagsResponse verifyResp = main.resolverApi.resolve(

wasm/java-host/src/main/java/com/spotify/confidence/wasmresolvepoc/ResolverApi.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.spotify.confidence.flags.resolver.v1.ResolveFlagsResponse;
1818
import com.spotify.confidence.flags.resolver.v1.ResolvedFlag;
1919

20+
import rust_guest.Messages.SetResolverStateRequest;
2021
import rust_guest.Messages;
2122
import rust_guest.Messages.ResolveSimpleRequest;
2223
import rust_guest.Types;
@@ -69,9 +70,9 @@ private Timestamp currentTime(Messages.Void unused) {
6970
return Timestamp.getDefaultInstance();
7071
}
7172

72-
public void setResolverState(byte[] state) {
73+
public void setResolverState(SetResolverStateRequest state) {
7374
final byte[] request = Messages.Request.newBuilder()
74-
.setData(ByteString.copyFrom(state))
75+
.setData(state.toByteString())
7576
.build().toByteArray();
7677
int addr = transfer(request);
7778
int respPtr = (int) wasmMsgGuestSetResolverState.apply(addr)[0];

wasm/node-host/src/index.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import fs from 'node:fs';
22
import path from 'node:path';
33
import { Void } from './proto/messages.ts';
4-
import { ResolveFlagsRequest, ResolveFlagsResponse, ResolveReason } from './proto/resolver/api.ts';
4+
import {
5+
ResolveFlagsRequest,
6+
ResolveFlagsResponse,
7+
ResolveReason
8+
} from './proto/resolver/api.ts';
9+
import { SetResolverStateRequest } from './proto/messages.js';
510
import { Timestamp } from './proto/google/protobuf/timestamp.ts';
611
import { ApiBuilder } from './wasm-msg.ts';
712

@@ -16,7 +21,7 @@ const resolverState = fs.readFileSync(path.join(dirname, '../../resolver_state.p
1621
const wasmModule = new WebAssembly.Module(wasmBuffer);
1722

1823
const api = new ApiBuilder()
19-
.guestRaw('set_resolver_state')
24+
.guest('set_resolver_state', SetResolverStateRequest, Void, false)
2025
.guest('resolve', ResolveFlagsRequest, ResolveFlagsResponse, false)
2126
.host('log_resolve', Void, Void, false, () => ({}))
2227
.host('log_assign', Void, Void, false, () => ({}))
@@ -26,7 +31,10 @@ const api = new ApiBuilder()
2631
})
2732
.build(wasmModule);
2833

29-
api.set_resolver_state(resolverState);
34+
api.set_resolver_state({
35+
state: resolverState,
36+
accountId: 'confidence-demo-june'
37+
});
3038

3139
// Verify MATCH reason and non-empty variant for tutorial_visitor
3240
{

wasm/proto/messages.proto

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ import "google/protobuf/struct.proto";
88

99
message Void {}
1010

11+
message SetResolverStateRequest {
12+
bytes state = 1;
13+
string account_id = 2;
14+
}
15+
1116
message ResolveSimpleRequest {
1217
string client_secret = 1;
1318
google.protobuf.Struct evaluation_context = 2;

wasm/proto/resolver/api.proto

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ message ResolvedFlag {
7979
ResolveReason reason = 5;
8080
}
8181

82-
8382
enum ResolveReason {
8483
// Unspecified enum.
8584
RESOLVE_REASON_UNSPECIFIED = 0;

wasm/python-host/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def main():
2929

3030
# Set resolver state
3131
try:
32-
api.set_resolver_state(resolver_state)
32+
api.set_resolver_state(resolver_state, "confidence-demo-june")
3333
except Exception as e:
3434
print(f"Failed to set resolver state: {e}")
3535
sys.exit(1)

wasm/python-host/resolver_api.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@ def current_thread_id() -> int:
9393
# Instantiate the module with imports
9494
self.instance = linker.instantiate(self.store, self.module)
9595

96-
def set_resolver_state(self, state: bytes) -> None:
96+
def set_resolver_state(self, state: bytes, account_id: str) -> None:
9797
"""Set the resolver state in the WASM module"""
98-
# Create request wrapper
99-
request = messages_pb2.Request()
100-
request.data = state
101-
# Transfer request to WASM memory - ensure it's a bytestring
102-
serialized_data: bytes = request.SerializeToString()
103-
req_ptr = self._transfer(serialized_data)
98+
# Create SetResolverStateRequest proto
99+
set_resolver_state_request = messages_pb2.SetResolverStateRequest()
100+
set_resolver_state_request.state = state
101+
set_resolver_state_request.account_id = account_id
102+
# Transfer request to WASM memory
103+
req_ptr = self._transfer_request(set_resolver_state_request)
104104
# Call the WASM function
105105
results = self.wasm_msg_guest_set_resolver_state(self.store, req_ptr)
106106
resp_ptr = results

wasm/rust-guest/src/lib.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use std::cell::RefCell;
22
use std::sync::Arc;
33
use std::sync::LazyLock;
4-
use std::sync::OnceLock;
54

65
use arc_swap::ArcSwapOption;
76
use bytes::Bytes;
7+
use prost::Message;
88

99
#[global_allocator]
1010
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
@@ -24,20 +24,18 @@ use wasm_msg::WasmResult;
2424
pub mod proto {
2525
include!(concat!(env!("OUT_DIR"), "/rust_guest.rs"));
2626
}
27-
use proto::{ResolveSimpleRequest, Void};
28-
29-
use crate::proto::{LogAssignRequest, LogResolveRequest, SdkId};
27+
use crate::proto::SetResolverStateRequest;
3028
use confidence_resolver::{
3129
proto::{
3230
confidence::flags::admin::v1::ResolverState as ResolverStatePb,
33-
confidence::flags::resolver::v1::resolve_token_v1::AssignedFlag,
3431
confidence::flags::resolver::v1::{
3532
ResolveFlagsRequest, ResolveFlagsResponse, ResolvedFlag, Sdk,
3633
},
3734
google::{Struct, Timestamp},
3835
},
3936
Client, FlagToApply, Host, ResolveReason, ResolvedValue, ResolverState,
4037
};
38+
use proto::{ResolveSimpleRequest, Void};
4139

4240
impl Into<proto::FallthroughAssignment>
4341
for confidence_resolver::proto::confidence::flags::resolver::v1::events::FallthroughAssignment
@@ -53,8 +51,6 @@ impl Into<proto::FallthroughAssignment>
5351
}
5452

5553
const VOID: Void = Void {};
56-
57-
const ACCOUNT_ID: &str = "confidence-test";
5854
const ENCRYPTION_KEY: Bytes = Bytes::from_static(&[0; 16]);
5955

6056
// TODO simplify by assuming single threaded?
@@ -180,8 +176,10 @@ fn get_resolver_state() -> Result<Arc<ResolverState>, String> {
180176
}
181177

182178
wasm_msg_guest! {
183-
fn set_resolver_state(request: ResolverStatePb) -> WasmResult<Void> {
184-
let new_state = ResolverState::from_proto(request, ACCOUNT_ID)?;
179+
fn set_resolver_state(request: SetResolverStateRequest) -> WasmResult<Void> {
180+
let state_pb = ResolverStatePb::decode(request.state.as_slice())
181+
.map_err(|e| format!("Failed to decode resolver state: {}", e))?;
182+
let new_state = ResolverState::from_proto(state_pb, request.account_id.as_str())?;
185183
RESOLVER_STATE.store(Some(Arc::new(new_state)));
186184
Ok(VOID)
187185
}

0 commit comments

Comments
 (0)