{"record":{"id":"b5ae0c2da82e6cd3","repo":"grpc/grpc-go","slug":"error-in-serverrpcevent-method-v","errorCode":null,"errorMessage":"error in serverRPCEvent method: %v","messagePattern":"error in serverRPCEvent method: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"gcp/observability/config.go","lineNumber":102,"sourceCode":"\t\tif err := validateMethodString(method); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid method string: %v, err: %v\", method, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc validateLoggingEvents(config *config) error {\n\tif config.CloudLogging == nil {\n\t\treturn nil\n\t}\n\tfor _, clientRPCEvent := range config.CloudLogging.ClientRPCEvents {\n\t\tif err := validateLogEventMethod(clientRPCEvent.Methods, clientRPCEvent.Exclude); err != nil {\n\t\t\treturn fmt.Errorf(\"error in clientRPCEvent method: %v\", err)\n\t\t}\n\t}\n\tfor _, serverRPCEvent := range config.CloudLogging.ServerRPCEvents {\n\t\tif err := validateLogEventMethod(serverRPCEvent.Methods, serverRPCEvent.Exclude); err != nil {\n\t\t\treturn fmt.Errorf(\"error in serverRPCEvent method: %v\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// unmarshalAndVerifyConfig unmarshals a json string representing an\n// observability config into its internal go format, and also verifies the\n// configuration's fields for validity.\nfunc unmarshalAndVerifyConfig(rawJSON json.RawMessage) (*config, error) {\n\tvar config config\n\tif err := json.Unmarshal(rawJSON, &config); err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing observability config: %v\", err)\n\t}\n\tif err := validateLoggingEvents(&config); err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing observability config: %v\", err)\n\t}\n\tif config.CloudTrace != nil && (config.CloudTrace.SamplingRate > 1 || config.CloudTrace.SamplingRate < 0) {\n\t\treturn nil, fmt.Errorf(\"error parsing observability config: invalid cloud trace sampling rate %v\", config.CloudTrace.SamplingRate)","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/grpc/grpc-go/blob/03255a9237b6eb32710f6bc4f2de9a675b99fe36/gcp/observability/config.go#L84-L120","documentation":"Same validation as error 211 but for the config.CloudLogging.ServerRPCEvents slice. Any method string in a server event's Methods list that fails validateMethodString is wrapped as \"error in serverRPCEvent method: <cause>\". Root cause and remediation are identical to errors 210/211.","triggerScenarios":"A server_rpc_events entry in the observability config has an invalid method pattern (leading slash, no/extra slash, empty method, or service-position wildcard).","commonSituations":"Server-side logging config copy-pasted from the client side with a typo; same wire-format-vs-config-format confusion as 211.","solutions":["Apply the error-210 fixes to every entry under server_rpc_events.","Validate the whole cloud_logging block (both client and server arrays) before deploying.","Ensure Exclude + \"*\" is not combined in server events."],"exampleFix":"// before\n{ \"cloud_logging\": { \"server_rpc_events\": [{ \"methods\": [\"goo.Foo/\"] }] } }\n\n// after\n{ \"cloud_logging\": { \"server_rpc_events\": [{ \"methods\": [\"goo.Foo/Bar\"] }] } }","handlingStrategy":"validation","validationCode":"func validateServerRPCEvents(events []serverRPCEvents) error {\n    for _, e := range events {\n        if err := validateLogEventMethod(e.Methods, e.Exclude); err != nil {\n            return fmt.Errorf(\"server event: %w\", err)\n        }\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":"if err := validateLoggingEvents(cfg); err != nil {\n    return fmt.Errorf(\"observability config: %w\", err)\n}","preventionTips":["Apply the same pattern rules to server_rpc_events as client_rpc_events.","Validate the full cloud_logging block before deploy.","Forbid combining \"*\" with Exclude."],"tags":["grpc","observability","cloud-logging","config","validation","gcp"],"analyzedSha":"03255a9237b6eb32710f6bc4f2de9a675b99fe36","analyzedAt":"2026-08-07T00:29:34.215Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}