{"record":{"id":"4ffa2b4e385e2d8b","repo":"grpc/grpc-go","slug":"failed-to-push-new-configuration-v-to-child-q","errorCode":null,"errorMessage":"failed to push new configuration %v to child %q: %v","messagePattern":"failed to push new configuration (.+?) to child %q: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/xds/balancer/clustermanager/clustermanager.go","lineNumber":144,"sourceCode":"\t\t\t\t// new child policy.\n\t\t\t\tlbCfg, err = balancergroup.ParseConfig(cfgJSON)\n\t\t\t\tif err != nil {\n\t\t\t\t\tretErr = fmt.Errorf(\"failed to parse load balancing policy for child %q: %v\", childName, err)\n\t\t\t\t\tb.setErrorPickerForChild(childName, retErr)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err := b.bg.UpdateClientConnState(childName, balancer.ClientConnState{\n\t\t\tResolverState: resolver.State{\n\t\t\t\tEndpoints:     endpointsSplit[childName],\n\t\t\t\tServiceConfig: s.ResolverState.ServiceConfig,\n\t\t\t\tAttributes:    s.ResolverState.Attributes,\n\t\t\t},\n\t\t\tBalancerConfig: lbCfg,\n\t\t}); err != nil {\n\t\t\tretErr = fmt.Errorf(\"failed to push new configuration %v to child %q: %v\", childCfg.ChildPolicy.Config, childName, err)\n\t\t\tb.setErrorPickerForChild(childName, retErr)\n\t\t}\n\n\t\t// Picker update is sent to the parent ClientConn only after the\n\t\t// new child policy returns a picker. So, there is no need to\n\t\t// set needUpdateStateOnResume to true here.\n\t}\n\n\tb.children = newConfig.Children\n\n\t// If multiple sub-balancers run into errors, we will return only the last\n\t// one, which is still good enough, since the grpc channel will anyways\n\t// return this error as balancer.ErrBadResolver to the name resolver,\n\t// resulting in re-resolution attempts.\n\treturn retErr\n\n\t// Adding or removing a sub-balancer will result in the\n\t// needUpdateStateOnResume bit to true which results in a picker update once","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/grpc/grpc-go/blob/0c51461d27177d997e14c642fe18c11668fc09a3/internal/xds/balancer/clustermanager/clustermanager.go#L126-L162","documentation":"After building a ClientConnState for a child, cluster_manager calls bg.UpdateClientConnState (clustermanager.go:136-146). If the underlying child balancer returns a non-nil error, cluster_manager wraps it (including the original config that failed) and installs an error picker for that one child. Other children keep serving RPCs.","triggerScenarios":"The child balancer's UpdateClientConnState rejects the config (its own validation failure, bad resolver state, missing xDS client, etc.) while a new configuration is being applied.","commonSituations":"Child policy config that fails the child's own validation (e.g. weighted_round_robin rejecting a backend with no metadata); transient xDS client state issues; resolver state missing required attributes; version mismatch between parent expectations and child behavior.","solutions":["Read the wrapped error fully: it includes both the original config (first %v) and the underlying child error (last %v).","Fix the underlying child issue surfaced by the inner error.","Remember only RPCs routed to this child fail; isolate debugging to that child's config."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// cluster_manager returns the last child error; the inner error has the root cause.\nif err := cm.UpdateClientConnState(state); err != nil {\n    if strings.Contains(err.Error(), \"failed to push new configuration\") {\n        // extract child name from message, read inner %v for the actual cause\n    }\n}","preventionTips":["Pre-validate child configs against the child balancer's own ParseConfig.","Ensure resolver state carries required attributes for every child policy type.","Keep version compatibility between cluster_manager and its child balancers."],"tags":["go","grpc","xds","balancer","config","clustermanager"],"backgroundTag":null,"analyzedSha":"0c51461d27177d997e14c642fe18c11668fc09a3","analyzedAt":"2026-08-11T14:49:15.055Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}