{"record":{"id":"747ce7d58ce8af48","repo":"grpc/grpc-go","slug":"router-error-parsing-config-v-v","errorCode":null,"errorMessage":"router: error parsing config %v: %v","messagePattern":"router: error parsing config (.+?): (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/xds/httpfilter/router/router.go","lineNumber":63,"sourceCode":"\ntype builder struct {\n}\n\nfunc (builder) TypeURLs() []string { return []string{TypeURL} }\n\nfunc (builder) ParseFilterConfig(cfg proto.Message) (httpfilter.FilterConfig, error) {\n\t// The gRPC router filter does not currently use any fields from the\n\t// config.  Verify type only.\n\tif cfg == nil {\n\t\treturn nil, fmt.Errorf(\"router: nil configuration message provided\")\n\t}\n\tm, ok := cfg.(*anypb.Any)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"router: error parsing config %v: unknown type %T\", cfg, cfg)\n\t}\n\tmsg := new(pb.Router)\n\tif err := m.UnmarshalTo(msg); err != nil {\n\t\treturn nil, fmt.Errorf(\"router: error parsing config %v: %v\", cfg, err)\n\t}\n\treturn config{}, nil\n}\n\nfunc (builder) ParseFilterConfigOverride(override proto.Message) (httpfilter.FilterConfig, error) {\n\tif override != nil {\n\t\treturn nil, fmt.Errorf(\"router: unexpected config override specified: %v\", override)\n\t}\n\treturn config{}, nil\n}\n\nfunc (builder) IsTerminal() bool {\n\treturn true\n}\n\nfunc (builder) BuildClientFilter(httpfilter.ClientFilterOptions) httpfilter.ClientFilter {\n\treturn filter{}\n}","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/grpc/grpc-go/blob/03255a9237b6eb32710f6bc4f2de9a675b99fe36/internal/xds/httpfilter/router/router.go#L45-L81","documentation":"The provided *anypb.Any failed to unmarshal into the Router proto. The wrapped proto.Unmarshal error means the Any's type URL or payload does not correspond to envoy.extensions.filters.http.router.v3.Router.","triggerScenarios":"The Any TypeUrl is for a different message or the bytes are corrupt/truncated.","commonSituations":"Control plane serving a different proto version; a TypeURL typo; corrupted resource; mislabeled filter entry.","solutions":["Confirm the Any TypeUrl is exactly type.googleapis.com/envoy.extensions.filters.http.router.v3.Router.","Ensure proto-version compatibility between control plane and grpc-go.","Re-fetch the LDS resource and inspect the raw Any payload."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"func checkRouterTypeURL(a *anypb.Any) error {\n\twant := \"type.googleapis.com/envoy.extensions.filters.http.router.v3.Router\"\n\tif a.GetTypeUrl() != want {\n\t\treturn fmt.Errorf(\"router type_url=%q want %q\", a.GetTypeUrl(), want)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin control-plane Envoy API version to grpc-go's supported version.","Round-trip-test router Any payloads before serving."],"tags":["router","xds","grpc","protobuf","version-skew"],"analyzedSha":"03255a9237b6eb32710f6bc4f2de9a675b99fe36","analyzedAt":"2026-08-07T00:29:34.215Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}