...
1
18
19 package priority
20
21 import (
22 "encoding/json"
23 "fmt"
24
25 internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
26 "google.golang.org/grpc/serviceconfig"
27 )
28
29
30 type Child struct {
31 Config *internalserviceconfig.BalancerConfig `json:"config,omitempty"`
32 IgnoreReresolutionRequests bool `json:"ignoreReresolutionRequests,omitempty"`
33 }
34
35
36 type LBConfig struct {
37 serviceconfig.LoadBalancingConfig `json:"-"`
38
39
40
41 Children map[string]*Child `json:"children,omitempty"`
42
43
44
45 Priorities []string `json:"priorities,omitempty"`
46 }
47
48 func parseConfig(c json.RawMessage) (*LBConfig, error) {
49 var cfg LBConfig
50 if err := json.Unmarshal(c, &cfg); err != nil {
51 return nil, err
52 }
53
54 prioritiesSet := make(map[string]bool)
55 for _, name := range cfg.Priorities {
56 if _, ok := cfg.Children[name]; !ok {
57 return nil, fmt.Errorf("LB policy name %q found in Priorities field (%v) is not found in Children field (%+v)", name, cfg.Priorities, cfg.Children)
58 }
59 prioritiesSet[name] = true
60 }
61 for name := range cfg.Children {
62 if _, ok := prioritiesSet[name]; !ok {
63 return nil, fmt.Errorf("LB policy name %q found in Children field (%v) is not found in Priorities field (%+v)", name, cfg.Children, cfg.Priorities)
64 }
65 }
66 return &cfg, nil
67 }
68
View as plain text