grpc/grpc-go · error

router: error parsing config %v: %v

Error message

router: error parsing config %v: %v

What it means

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.

Source

Thrown at internal/xds/httpfilter/router/router.go:63

type builder struct {
}

func (builder) TypeURLs() []string { return []string{TypeURL} }

func (builder) ParseFilterConfig(cfg proto.Message) (httpfilter.FilterConfig, error) {
	// The gRPC router filter does not currently use any fields from the
	// config.  Verify type only.
	if cfg == nil {
		return nil, fmt.Errorf("router: nil configuration message provided")
	}
	m, ok := cfg.(*anypb.Any)
	if !ok {
		return nil, fmt.Errorf("router: error parsing config %v: unknown type %T", cfg, cfg)
	}
	msg := new(pb.Router)
	if err := m.UnmarshalTo(msg); err != nil {
		return nil, fmt.Errorf("router: error parsing config %v: %v", cfg, err)
	}
	return config{}, nil
}

func (builder) ParseFilterConfigOverride(override proto.Message) (httpfilter.FilterConfig, error) {
	if override != nil {
		return nil, fmt.Errorf("router: unexpected config override specified: %v", override)
	}
	return config{}, nil
}

func (builder) IsTerminal() bool {
	return true
}

func (builder) BuildClientFilter(httpfilter.ClientFilterOptions) httpfilter.ClientFilter {
	return filter{}
}

View on GitHub (pinned to 03255a9237)

Solutions

  1. Confirm the Any TypeUrl is exactly type.googleapis.com/envoy.extensions.filters.http.router.v3.Router.
  2. Ensure proto-version compatibility between control plane and grpc-go.
  3. Re-fetch the LDS resource and inspect the raw Any payload.
Defensive patterns

Strategy: validation

Validate before calling

func checkRouterTypeURL(a *anypb.Any) error {
	want := "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router"
	if a.GetTypeUrl() != want {
		return fmt.Errorf("router type_url=%q want %q", a.GetTypeUrl(), want)
	}
	return nil
}

Prevention

When it happens

Trigger: The Any TypeUrl is for a different message or the bytes are corrupt/truncated.

Common situations: Control plane serving a different proto version; a TypeURL typo; corrupted resource; mislabeled filter entry.

Related errors


AI-assisted analysis of grpc/grpc-go@03255a9237 (2026-08-07). Data as JSON: /api/errors/747ce7d58ce8af48. Report an issue: GitHub.