36
36
import io .grpc .Status .Code ;
37
37
import io .grpc .StatusRuntimeException ;
38
38
import java .util .Map ;
39
+ import java .util .concurrent .TimeUnit ;
39
40
import java .util .function .Consumer ;
40
41
import java .util .function .Function ;
41
42
@@ -50,6 +51,7 @@ public final class GrpcResolver implements Resolver {
50
51
private final GrpcConnector <ServiceGrpc .ServiceStub , ServiceGrpc .ServiceBlockingStub > connector ;
51
52
private final Cache cache ;
52
53
private final ResolveStrategy strategy ;
54
+ private final FlagdOptions options ;
53
55
54
56
/**
55
57
* Resolves flag values using https://buf.build/open-feature/flagd/docs/main:flagd.evaluation.v1.
@@ -63,6 +65,7 @@ public GrpcResolver(
63
65
final FlagdOptions options , final Cache cache , final Consumer <FlagdProviderEvent > onProviderEvent ) {
64
66
this .cache = cache ;
65
67
this .strategy = ResolveFactory .getStrategy (options );
68
+ this .options = options ;
66
69
this .connector = new GrpcConnector <>(
67
70
options ,
68
71
ServiceGrpc ::newStub ,
@@ -108,15 +111,15 @@ public void onError() {
108
111
public ProviderEvaluation <Boolean > booleanEvaluation (String key , Boolean defaultValue , EvaluationContext ctx ) {
109
112
ResolveBooleanRequest request = ResolveBooleanRequest .newBuilder ().buildPartial ();
110
113
111
- return resolve (key , ctx , request , connector . getResolver ()::resolveBoolean , null );
114
+ return resolve (key , ctx , request , getResolver ()::resolveBoolean , null );
112
115
}
113
116
114
117
/**
115
118
* String evaluation from grpc resolver.
116
119
*/
117
120
public ProviderEvaluation <String > stringEvaluation (String key , String defaultValue , EvaluationContext ctx ) {
118
121
ResolveStringRequest request = ResolveStringRequest .newBuilder ().buildPartial ();
119
- return resolve (key , ctx , request , connector . getResolver ()::resolveString , null );
122
+ return resolve (key , ctx , request , getResolver ()::resolveString , null );
120
123
}
121
124
122
125
/**
@@ -125,7 +128,7 @@ public ProviderEvaluation<String> stringEvaluation(String key, String defaultVal
125
128
public ProviderEvaluation <Double > doubleEvaluation (String key , Double defaultValue , EvaluationContext ctx ) {
126
129
ResolveFloatRequest request = ResolveFloatRequest .newBuilder ().buildPartial ();
127
130
128
- return resolve (key , ctx , request , connector . getResolver ()::resolveFloat , null );
131
+ return resolve (key , ctx , request , getResolver ()::resolveFloat , null );
129
132
}
130
133
131
134
/**
@@ -135,8 +138,11 @@ public ProviderEvaluation<Integer> integerEvaluation(String key, Integer default
135
138
136
139
ResolveIntRequest request = ResolveIntRequest .newBuilder ().buildPartial ();
137
140
138
- return resolve (
139
- key , ctx , request , connector .getResolver ()::resolveInt , (Object value ) -> ((Long ) value ).intValue ());
141
+ return resolve (key , ctx , request , getResolver ()::resolveInt , (Object value ) -> ((Long ) value ).intValue ());
142
+ }
143
+
144
+ private ServiceGrpc .ServiceBlockingStub getResolver () {
145
+ return connector .getResolver ().withDeadlineAfter (options .getDeadline (), TimeUnit .MILLISECONDS );
140
146
}
141
147
142
148
/**
@@ -150,7 +156,7 @@ public ProviderEvaluation<Value> objectEvaluation(String key, Value defaultValue
150
156
key ,
151
157
ctx ,
152
158
request ,
153
- connector . getResolver ()::resolveObject ,
159
+ getResolver ()::resolveObject ,
154
160
(Object value ) -> convertObjectResponse ((Struct ) value ));
155
161
}
156
162
0 commit comments