3636import io .grpc .Status .Code ;
3737import io .grpc .StatusRuntimeException ;
3838import java .util .Map ;
39+ import java .util .concurrent .TimeUnit ;
3940import java .util .function .Consumer ;
4041import java .util .function .Function ;
4142
@@ -50,6 +51,7 @@ public final class GrpcResolver implements Resolver {
5051 private final GrpcConnector <ServiceGrpc .ServiceStub , ServiceGrpc .ServiceBlockingStub > connector ;
5152 private final Cache cache ;
5253 private final ResolveStrategy strategy ;
54+ private final FlagdOptions options ;
5355
5456 /**
5557 * Resolves flag values using https://buf.build/open-feature/flagd/docs/main:flagd.evaluation.v1.
@@ -63,6 +65,7 @@ public GrpcResolver(
6365 final FlagdOptions options , final Cache cache , final Consumer <FlagdProviderEvent > onProviderEvent ) {
6466 this .cache = cache ;
6567 this .strategy = ResolveFactory .getStrategy (options );
68+ this .options = options ;
6669 this .connector = new GrpcConnector <>(
6770 options ,
6871 ServiceGrpc ::newStub ,
@@ -108,15 +111,15 @@ public void onError() {
108111 public ProviderEvaluation <Boolean > booleanEvaluation (String key , Boolean defaultValue , EvaluationContext ctx ) {
109112 ResolveBooleanRequest request = ResolveBooleanRequest .newBuilder ().buildPartial ();
110113
111- return resolve (key , ctx , request , connector . getResolver ()::resolveBoolean , null );
114+ return resolve (key , ctx , request , getResolver ()::resolveBoolean , null );
112115 }
113116
114117 /**
115118 * String evaluation from grpc resolver.
116119 */
117120 public ProviderEvaluation <String > stringEvaluation (String key , String defaultValue , EvaluationContext ctx ) {
118121 ResolveStringRequest request = ResolveStringRequest .newBuilder ().buildPartial ();
119- return resolve (key , ctx , request , connector . getResolver ()::resolveString , null );
122+ return resolve (key , ctx , request , getResolver ()::resolveString , null );
120123 }
121124
122125 /**
@@ -125,7 +128,7 @@ public ProviderEvaluation<String> stringEvaluation(String key, String defaultVal
125128 public ProviderEvaluation <Double > doubleEvaluation (String key , Double defaultValue , EvaluationContext ctx ) {
126129 ResolveFloatRequest request = ResolveFloatRequest .newBuilder ().buildPartial ();
127130
128- return resolve (key , ctx , request , connector . getResolver ()::resolveFloat , null );
131+ return resolve (key , ctx , request , getResolver ()::resolveFloat , null );
129132 }
130133
131134 /**
@@ -135,8 +138,11 @@ public ProviderEvaluation<Integer> integerEvaluation(String key, Integer default
135138
136139 ResolveIntRequest request = ResolveIntRequest .newBuilder ().buildPartial ();
137140
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 );
140146 }
141147
142148 /**
@@ -150,7 +156,7 @@ public ProviderEvaluation<Value> objectEvaluation(String key, Value defaultValue
150156 key ,
151157 ctx ,
152158 request ,
153- connector . getResolver ()::resolveObject ,
159+ getResolver ()::resolveObject ,
154160 (Object value ) -> convertObjectResponse ((Struct ) value ));
155161 }
156162
0 commit comments