grpc/grpc-go · error
extproc: dialing external processor server not implemented
Error message
extproc: dialing external processor server not implemented
What it means
internal.CreateExtProcChannel is a package-level override point whose default returns 'dialing external processor server not implemented' (internal.go:48). It must be replaced with a real dialer before extproc can connect to a sidecar. Reaching the stub means no production channel-creation logic was registered.
Source
Thrown at internal/xds/httpfilter/extproc/internal/internal.go:49
var (
// RegisterForTesting registers the external processor HTTP Filter for testing
// purposes.
RegisterForTesting func()
// UnregisterForTesting unregisters the external processor HTTP Filter for
// testing purposes.
UnregisterForTesting func()
// ParseGRPCServiceConfig parses the gRPC service configuration from the given
// protobuf message.
ParseGRPCServiceConfig = func(*v3corepb.GrpcService) (xdsresource.GRPCServiceConfig, error) {
return xdsresource.GRPCServiceConfig{}, fmt.Errorf("extproc: ParseGRPCServiceConfig not implemented")
}
// CreateExtProcChannel creates a gRPC client channel to the external
// processing server.
CreateExtProcChannel = func(xdsresource.GRPCServiceConfig) (grpc.ClientConnInterface, func() error, error) {
return nil, nil, fmt.Errorf("extproc: dialing external processor server not implemented")
}
// TimeNowFunc returns the current time.Time, and can be overridden for
// testing purposes.
TimeNowFunc func() time.Time
// TimeSinceFunc returns the time elapsed, and can be overridden for testing
// purposes.
TimeSinceFunc func(t time.Time) time.Duration
)
View on GitHub (pinned to 03255a9237)
Solutions
- Import/link the package that assigns internal.CreateExtProcChannel so a real gRPC channel is dialed.
- Disable the extproc filter in the xDS config until the wiring is present in the binary.
- In tests, override internal.CreateExtProcChannel with a stub returning an in-memory connection.
Example fix
// before: extproc configured in xDS but no dialer wired -> not implemented // after: link the extproc production wiring (blank import / init that assigns internal.CreateExtProcChannel) import _ "google.golang.org/grpc/xds/httpfilter/extproc" // ensures the dialer override is installed
Defensive patterns
Strategy: validation
Validate before calling
// Verify the dialer override is installed before building extproc filters // (presence check: the default stub returns an error, so call it in a guarded init)
Prevention
- Link the extproc production dialer via blank import in binaries using extproc.
- Inject a fake channel in tests by overriding internal.CreateExtProcChannel.
- Disable extproc in xDS until the wiring is present.
When it happens
Trigger: The extproc filter tries to build a client channel to the external processor while internal.CreateExtProcChannel is still the default stub.
Common situations: Binary built without the extproc production dialer linked; extproc enabled via xDS but the wiring package is missing; test exercising extproc without injecting a fake channel.
Related errors
- extproc: ParseGRPCServiceConfig not implemented
- external processor unexpectedly sent duplicate response trai
- external processor returned unexpected status %v for body re
- external processor returned invalid body mutation in body re
- external processor returned compressed grpc message which is
AI-assisted analysis of grpc/grpc-go@03255a9237 (2026-08-07).
Data as JSON: /api/errors/5f2c0d4ef18cb890.
Report an issue: GitHub.