{"record":{"id":"4127e8a35e28817a","repo":"grpc/grpc-go","slug":"failed-to-push-config-to-child-policy-v","errorCode":null,"errorMessage":"failed to push config to child policy: %v","messagePattern":"failed to push config to child policy: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/xds/balancer/cdsbalancer/cdsbalancer.go","lineNumber":309,"sourceCode":"\t\tfor j := range endpoints[i].Addresses {\n\t\t\taddr := endpoints[i].Addresses[j]\n\t\t\taddr.BalancerAttributes = endpoints[i].Attributes\n\t\t\t// BalancerAttributes are used for the following:\n\t\t\t// * Authority Override.\n\t\t\t// * grpc.lb.backend_service metric label propagation.\n\t\t\t// See https://github.com/grpc/grpc-go/issues/6472\n\t\t\tendpoints[i].Addresses[j] = addr\n\t\t}\n\t}\n\tif err := b.childLB.UpdateClientConnState(balancer.ClientConnState{\n\t\tResolverState: resolver.State{\n\t\t\tEndpoints:     endpoints,\n\t\t\tServiceConfig: b.serviceConfig,\n\t\t\tAttributes:    b.attributes,\n\t\t},\n\t\tBalancerConfig: childCfg,\n\t}); err != nil {\n\t\treturn fmt.Errorf(\"failed to push config to child policy: %v\", err)\n\t}\n\treturn nil\n}\n\n// updatePriorityConfig updates the priority configuration for the specified EDS\n// or DNS cluster, creating it if it does not already exist.\nfunc (b *cdsBalancer) updatePriorityConfig(clusterName string, clusterConfig *xdsresource.ClusterConfig) *priorityConfig {\n\tname := hostName(clusterName, *clusterConfig.Cluster)\n\tpc, ok := b.priorityConfigs[name]\n\tif !ok {\n\t\tpc = &priorityConfig{\n\t\t\tchildNameGen: newNameGenerator(b.childNameGeneratorSeqID),\n\t\t}\n\t\tb.priorityConfigs[name] = pc\n\t\t// Increment the seq ID for the next new cluster. This is done to make\n\t\t// sure that the child policy names generated for different clusters\n\t\t// don't conflict with each other.\n\t\tb.childNameGeneratorSeqID++","sourceCodeStart":291,"sourceCodeEnd":327,"githubUrl":"https://github.com/grpc/grpc-go/blob/03255a9237b6eb32710f6bc4f2de9a675b99fe36/internal/xds/balancer/cdsbalancer/cdsbalancer.go#L291-L327","documentation":"The CDS balancer pushes the newly built configuration to its child balancer (cluster_resolver) via UpdateClientConnState(). This error wraps any rejection from the child. The child balancer validates the config, endpoints, and service config before accepting the update.","triggerScenarios":"Triggered in updateChildConfig() when childLB.UpdateClientConnState() returns a non-nil error. The child is the cluster_resolver balancer which further resolves EDS endpoints. The error propagates back through handleClusterUpdate and ultimately causes the gRPC channel to enter TRANSIENT_FAILURE.","commonSituations":"The cluster_resolver child balancer rejects the endpoint addresses or service config; a parse error in the child's config parsing; the child balancer encountered an internal inconsistency in the resolver state; the child balancer itself had a failure creating sub-balancers for locality-picking or endpoint-picking policies.","solutions":["Enable GRPC_GO_LOG_SEVERITY=info and GRPC_GO_LOG_SEVERITY_LEVEL=2 to see the child balancer's own error logs which explain why it rejected the config","Verify the endpoints and service config being passed to the child are valid","Check that all downstream balancers (weighted_round_robin, round_robin, etc.) are registered","If this occurs during an xDS config update, the previous good config should still be active — verify the management server's latest cluster resource is well-formed"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// No pre-validation possible — the child balancer validates internally\n// Ensure all downstream balancers are registered","typeGuard":null,"tryCatchPattern":"// The error propagates as TRANSIENT_FAILURE; previous good config may still be active\nif conn.GetState() == connectivity.TransientFailure {\n    // check child balancer logs via GRPC_GO_LOG_SEVERITY=info\n    // the previous working configuration may still serve requests\n}","preventionTips":["Ensure all required child balancers (round_robin, weighted_round_robin, etc.) are imported","Keep grpc-go and all xDS-related dependencies at compatible versions","Monitor channel connectivity and log analysis for child balancer rejections","Test endpoint configurations before deploying to production"],"tags":["xds","cds","child-balancer","config","transient-failure"],"analyzedSha":"03255a9237b6eb32710f6bc4f2de9a675b99fe36","analyzedAt":"2026-08-07T00:29:34.215Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}