{"record":{"id":"88e5bb64849ce7e6","repo":"grpc/grpc-go","slug":"parsegrpcserviceconfig-not-implemented","errorCode":null,"errorMessage":"parseGRPCServiceConfig not implemented","messagePattern":"parseGRPCServiceConfig not implemented","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/xds/httpfilter/ext_authz/ext_authz.go","lineNumber":49,"sourceCode":"\t\"google.golang.org/grpc/internal/xds/xdsclient/xdsresource\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/types/known/anypb\"\n\n\tv3corepb \"github.com/envoyproxy/go-control-plane/envoy/config/core/v3\"\n\tv3extauthzpb \"github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/ext_authz/v3\"\n\tv3typepb \"github.com/envoyproxy/go-control-plane/envoy/type/v3\"\n)\n\nfunc init() {\n\tif envconfig.XDSClientExtAuthzEnabled {\n\t\thttpfilter.Register(builder{})\n\t}\n}\n\nvar (\n\t// TODO: Remove this once gRFC A102 is implemented.\n\tparseGRPCServiceConfig = func(*v3corepb.GrpcService) (xdsresource.GRPCServiceConfig, error) {\n\t\treturn xdsresource.GRPCServiceConfig{}, fmt.Errorf(\"parseGRPCServiceConfig not implemented\")\n\t}\n)\n\ntype builder struct{}\n\nfunc (builder) TypeURLs() []string {\n\treturn []string{\n\t\t\"type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz\",\n\t\t\"type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute\",\n\t}\n}\n\nfunc parseFilterEnabled(fp *v3corepb.RuntimeFractionalPercent) (fraction, error) {\n\tif fp == nil {\n\t\treturn fraction{numerator: 100, denominator: 100}, nil\n\t}\n\tfracPercent := fp.GetDefaultValue()\n\tif fracPercent == nil {","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/grpc/grpc-go/blob/03255a9237b6eb32710f6bc4f2de9a675b99fe36/internal/xds/httpfilter/ext_authz/ext_authz.go#L31-L67","documentation":"Returned by the package-level parseGRPCServiceConfig variable in the ext_authz filter, which is a TODO stub (pending gRFC A102) that always errors. The ext_authz filter calls it whenever a config carries a grpc_service, so enabling the filter with a gRPC authorization server always produces this error today.","triggerScenarios":"XDSClientExtAuthzEnabled is set (filter registered) and the xDS server sends an ExtAuthz config whose grpc_service is populated; ParseFilterConfig calls parseGRPCServiceConfig and gets this not-implemented error.","commonSituations":"Turning on the external authorization HTTP filter with a gRPC-based authorization service before A102 lands; an Envoy/Traffic Director config that specifies a grpc_service for ext_authz.","solutions":["Until A102 is implemented, configure the ext_authz filter with an http_service instead of a grpc_service where possible.","Disable the ext_authz filter (unset the env flag / do not register it) if gRPC authorization is required.","Track the gRFC A102 implementation and upgrade grpc-go once parseGRPCServiceConfig is populated."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Avoid wiring ext_authz with a grpc_service until A102 ships.\nfunc extAuthzSafe(cfg *v3extauthzpb.ExtAuthz) error {\n    if cfg.GetGrpcService() != nil {\n        return errors.New(\"ext_authz grpc_service not supported until gRFC A102\")\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use http_service instead of grpc_service for ext_authz until A102 lands.","Do not enable the ext_authz filter (unset the env flag) if you require gRPC authorization.","Track A102 and upgrade grpc-go once parseGRPCServiceConfig is implemented."],"tags":["grpc","xds","ext-authz","not-implemented","filter"],"analyzedSha":"03255a9237b6eb32710f6bc4f2de9a675b99fe36","analyzedAt":"2026-08-07T00:29:34.215Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}