MCPcopy
hub / github.com/grpc/grpc-go / parseRLSProto

Function parseRLSProto

balancer/rls/config.go:186–280  ·  view source on GitHub ↗
(rlsProto *rlspb.RouteLookupConfig)

Source from the content-addressed store, hash-verified

184}
185
186func parseRLSProto(rlsProto *rlspb.RouteLookupConfig) (*lbConfig, error) {
187 // Validations specified on the `grpc_keybuilders` field are performed here.
188 kbMap, err := keys.MakeBuilderMap(rlsProto)
189 if err != nil {
190 return nil, err
191 }
192
193 // `lookup_service` field must be set and must parse as a target URI.
194 lookupService := rlsProto.GetLookupService()
195 if lookupService == "" {
196 return nil, fmt.Errorf("rls: empty lookup_service in route lookup config %+v", rlsProto)
197 }
198 parsedTarget, err := url.Parse(lookupService)
199 if err != nil {
200 // url.Parse() fails if scheme is missing. Retry with default scheme.
201 parsedTarget, err = url.Parse(resolver.GetDefaultScheme() + ":///" + lookupService)
202 if err != nil {
203 return nil, fmt.Errorf("rls: invalid target URI in lookup_service %s", lookupService)
204 }
205 }
206 if parsedTarget.Scheme == "" {
207 parsedTarget.Scheme = resolver.GetDefaultScheme()
208 }
209 if resolver.Get(parsedTarget.Scheme) == nil {
210 return nil, fmt.Errorf("rls: unregistered scheme in lookup_service %s", lookupService)
211 }
212
213 lookupServiceTimeout, err := convertDuration(rlsProto.GetLookupServiceTimeout())
214 if err != nil {
215 return nil, fmt.Errorf("rls: failed to parse lookup_service_timeout in route lookup config %+v: %v", rlsProto, err)
216 }
217 if lookupServiceTimeout == 0 {
218 lookupServiceTimeout = defaultLookupServiceTimeout
219 }
220
221 // Validations performed here:
222 // - if `max_age` > 5m, it should be set to 5 minutes
223 // only if stale age is not set
224 // - if `stale_age` > `max_age`, ignore it
225 // - if `stale_age` is set, then `max_age` must also be set
226 maxAgeSet := false
227 maxAge, err := convertDuration(rlsProto.GetMaxAge())
228 if err != nil {
229 return nil, fmt.Errorf("rls: failed to parse max_age in route lookup config %+v: %v", rlsProto, err)
230 }
231 if maxAge == 0 {
232 maxAge = maxMaxAge
233 } else {
234 maxAgeSet = true
235 }
236
237 staleAgeSet := false
238 staleAge, err := convertDuration(rlsProto.GetStaleAge())
239 if err != nil {
240 return nil, fmt.Errorf("rls: failed to parse staleAge in route lookup config %+v: %v", rlsProto, err)
241 }
242 if staleAge == 0 {
243 staleAge = maxMaxAge

Callers 1

ParseConfigMethod · 0.85

Calls 13

MakeBuilderMapFunction · 0.92
GetDefaultSchemeFunction · 0.92
GetFunction · 0.92
GetLookupServiceMethod · 0.80
GetMaxAgeMethod · 0.80
GetStaleAgeMethod · 0.80
GetCacheSizeBytesMethod · 0.80
GetDefaultTargetMethod · 0.80
convertDurationFunction · 0.70
ErrorfMethod · 0.65
ParseMethod · 0.65

Tested by

no test coverage detected