mirror of https://github.com/grpc/grpc-go.git
rls: LB config cleanup (#3443)
1. Store the RLS server name (lookupService field) as a string instead of as a resolver.Target as this is passed to grpc.Dial when creating the control channel. 2. Store the default target specified in the ServiceConfig in a field in the lbConfig struct. 3. Move some constants defined in builder.go to config.go because they are only used in the latter.
This commit is contained in:
parent
6d849d5cd9
commit
47c04d199d
|
|
@ -21,23 +21,7 @@
|
||||||
// Package rls implements the RLS LB policy.
|
// Package rls implements the RLS LB policy.
|
||||||
package rls
|
package rls
|
||||||
|
|
||||||
import (
|
const rlsBalancerName = "rls"
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
rlsBalancerName = "rls"
|
|
||||||
// This is max duration that we are willing to cache RLS responses. If the
|
|
||||||
// service config doesn't specify a value for max_age or if it specified a
|
|
||||||
// value greater that this, we will use this value instead.
|
|
||||||
maxMaxAge = 5 * time.Minute
|
|
||||||
// If lookup_service_timeout is not specified in the service config, we use
|
|
||||||
// a default of 10 seconds.
|
|
||||||
defaultLookupServiceTimeout = 10 * time.Second
|
|
||||||
// This is set to the targetNameField in the child policy config during
|
|
||||||
// service config validation.
|
|
||||||
dummyChildPolicyTarget = "target_name_to_be_filled_in_later"
|
|
||||||
)
|
|
||||||
|
|
||||||
// rlsBB helps build RLS load balancers and parse the service config to be
|
// rlsBB helps build RLS load balancers and parse the service config to be
|
||||||
// passed to the RLS load balancer.
|
// passed to the RLS load balancer.
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,19 @@ import (
|
||||||
"google.golang.org/grpc/serviceconfig"
|
"google.golang.org/grpc/serviceconfig"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// This is max duration that we are willing to cache RLS responses. If the
|
||||||
|
// service config doesn't specify a value for max_age or if it specified a
|
||||||
|
// value greater that this, we will use this value instead.
|
||||||
|
maxMaxAge = 5 * time.Minute
|
||||||
|
// If lookup_service_timeout is not specified in the service config, we use
|
||||||
|
// a default of 10 seconds.
|
||||||
|
defaultLookupServiceTimeout = 10 * time.Second
|
||||||
|
// This is set to the targetNameField in the child policy config during
|
||||||
|
// service config validation.
|
||||||
|
dummyChildPolicyTarget = "target_name_to_be_filled_in_later"
|
||||||
|
)
|
||||||
|
|
||||||
// lbConfig contains the parsed and validated contents of the
|
// lbConfig contains the parsed and validated contents of the
|
||||||
// loadBalancingConfig section of the service config. The RLS LB policy will
|
// loadBalancingConfig section of the service config. The RLS LB policy will
|
||||||
// use this to directly access config data instead of ploughing through proto
|
// use this to directly access config data instead of ploughing through proto
|
||||||
|
|
@ -46,12 +59,13 @@ type lbConfig struct {
|
||||||
serviceconfig.LoadBalancingConfig
|
serviceconfig.LoadBalancingConfig
|
||||||
|
|
||||||
kbMap keys.BuilderMap
|
kbMap keys.BuilderMap
|
||||||
lookupService resolver.Target
|
lookupService string
|
||||||
lookupServiceTimeout time.Duration
|
lookupServiceTimeout time.Duration
|
||||||
maxAge time.Duration
|
maxAge time.Duration
|
||||||
staleAge time.Duration
|
staleAge time.Duration
|
||||||
cacheSizeBytes int64
|
cacheSizeBytes int64
|
||||||
rpStrategy rlspb.RouteLookupConfig_RequestProcessingStrategy
|
rpStrategy rlspb.RouteLookupConfig_RequestProcessingStrategy
|
||||||
|
defaultTarget string
|
||||||
cpName string
|
cpName string
|
||||||
cpTargetField string
|
cpTargetField string
|
||||||
cpConfig map[string]json.RawMessage
|
cpConfig map[string]json.RawMessage
|
||||||
|
|
@ -233,12 +247,13 @@ func (*rlsBB) ParseConfig(c json.RawMessage) (serviceconfig.LoadBalancingConfig,
|
||||||
|
|
||||||
return &lbConfig{
|
return &lbConfig{
|
||||||
kbMap: kbMap,
|
kbMap: kbMap,
|
||||||
lookupService: parsedTarget,
|
lookupService: lookupService,
|
||||||
lookupServiceTimeout: lookupServiceTimeout,
|
lookupServiceTimeout: lookupServiceTimeout,
|
||||||
maxAge: maxAge,
|
maxAge: maxAge,
|
||||||
staleAge: staleAge,
|
staleAge: staleAge,
|
||||||
cacheSizeBytes: cacheSizeBytes,
|
cacheSizeBytes: cacheSizeBytes,
|
||||||
rpStrategy: rpStrategy,
|
rpStrategy: rpStrategy,
|
||||||
|
defaultTarget: defaultTarget,
|
||||||
// TODO(easwars): Once we refactor validateChildPolicyConfig and make
|
// TODO(easwars): Once we refactor validateChildPolicyConfig and make
|
||||||
// it a method on the lbConfig object, we could directly store the
|
// it a method on the lbConfig object, we could directly store the
|
||||||
// balancer.Builder and/or balancer.ConfigParser here instead of the
|
// balancer.Builder and/or balancer.ConfigParser here instead of the
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,8 @@ import (
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
|
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
|
_ "google.golang.org/grpc/balancer/grpclb" // grpclb for config parsing.
|
||||||
rlspb "google.golang.org/grpc/balancer/rls/internal/proto/grpc_lookup_v1"
|
rlspb "google.golang.org/grpc/balancer/rls/internal/proto/grpc_lookup_v1"
|
||||||
"google.golang.org/grpc/resolver"
|
|
||||||
|
|
||||||
_ "google.golang.org/grpc/balancer/grpclb" // grpclb for config parsing.
|
|
||||||
_ "google.golang.org/grpc/internal/resolver/passthrough" // passthrough resolver.
|
_ "google.golang.org/grpc/internal/resolver/passthrough" // passthrough resolver.
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -61,6 +59,7 @@ func (lbCfg *lbConfig) Equal(other *lbConfig) bool {
|
||||||
lbCfg.staleAge == other.staleAge &&
|
lbCfg.staleAge == other.staleAge &&
|
||||||
lbCfg.cacheSizeBytes == other.cacheSizeBytes &&
|
lbCfg.cacheSizeBytes == other.cacheSizeBytes &&
|
||||||
lbCfg.rpStrategy == other.rpStrategy &&
|
lbCfg.rpStrategy == other.rpStrategy &&
|
||||||
|
lbCfg.defaultTarget == other.defaultTarget &&
|
||||||
lbCfg.cpName == other.cpName &&
|
lbCfg.cpName == other.cpName &&
|
||||||
lbCfg.cpTargetField == other.cpTargetField &&
|
lbCfg.cpTargetField == other.cpTargetField &&
|
||||||
cmp.Equal(lbCfg.cpConfig, other.cpConfig)
|
cmp.Equal(lbCfg.cpConfig, other.cpConfig)
|
||||||
|
|
@ -103,12 +102,13 @@ func TestParseConfig(t *testing.T) {
|
||||||
"childPolicyConfigTargetFieldName": "service_name"
|
"childPolicyConfigTargetFieldName": "service_name"
|
||||||
}`),
|
}`),
|
||||||
wantCfg: &lbConfig{
|
wantCfg: &lbConfig{
|
||||||
lookupService: resolver.Target{Scheme: "passthrough", Endpoint: "target"},
|
lookupService: "passthrough:///target",
|
||||||
lookupServiceTimeout: 10 * time.Second, // This is the default value.
|
lookupServiceTimeout: 10 * time.Second, // This is the default value.
|
||||||
maxAge: 5 * time.Minute, // This is max maxAge.
|
maxAge: 5 * time.Minute, // This is max maxAge.
|
||||||
staleAge: time.Duration(0), // StaleAge is ignore because it was higher than maxAge.
|
staleAge: time.Duration(0), // StaleAge is ignore because it was higher than maxAge.
|
||||||
cacheSizeBytes: 1000,
|
cacheSizeBytes: 1000,
|
||||||
rpStrategy: rlspb.RouteLookupConfig_ASYNC_LOOKUP_DEFAULT_TARGET_ON_MISS,
|
rpStrategy: rlspb.RouteLookupConfig_ASYNC_LOOKUP_DEFAULT_TARGET_ON_MISS,
|
||||||
|
defaultTarget: "passthrough:///default",
|
||||||
cpName: "grpclb",
|
cpName: "grpclb",
|
||||||
cpTargetField: "service_name",
|
cpTargetField: "service_name",
|
||||||
cpConfig: map[string]json.RawMessage{"childPolicy": json.RawMessage(`[{"pickfirst": {}}]`)},
|
cpConfig: map[string]json.RawMessage{"childPolicy": json.RawMessage(`[{"pickfirst": {}}]`)},
|
||||||
|
|
@ -134,12 +134,13 @@ func TestParseConfig(t *testing.T) {
|
||||||
"childPolicyConfigTargetFieldName": "service_name"
|
"childPolicyConfigTargetFieldName": "service_name"
|
||||||
}`),
|
}`),
|
||||||
wantCfg: &lbConfig{
|
wantCfg: &lbConfig{
|
||||||
lookupService: resolver.Target{Scheme: "passthrough", Endpoint: "target"},
|
lookupService: "passthrough:///target",
|
||||||
lookupServiceTimeout: 100 * time.Second,
|
lookupServiceTimeout: 100 * time.Second,
|
||||||
maxAge: 60 * time.Second,
|
maxAge: 60 * time.Second,
|
||||||
staleAge: 50 * time.Second,
|
staleAge: 50 * time.Second,
|
||||||
cacheSizeBytes: 1000,
|
cacheSizeBytes: 1000,
|
||||||
rpStrategy: rlspb.RouteLookupConfig_ASYNC_LOOKUP_DEFAULT_TARGET_ON_MISS,
|
rpStrategy: rlspb.RouteLookupConfig_ASYNC_LOOKUP_DEFAULT_TARGET_ON_MISS,
|
||||||
|
defaultTarget: "passthrough:///default",
|
||||||
cpName: "grpclb",
|
cpName: "grpclb",
|
||||||
cpTargetField: "service_name",
|
cpTargetField: "service_name",
|
||||||
cpConfig: map[string]json.RawMessage{"childPolicy": json.RawMessage(`[{"pickfirst": {}}]`)},
|
cpConfig: map[string]json.RawMessage{"childPolicy": json.RawMessage(`[{"pickfirst": {}}]`)},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue