grpc/grpc-go · error

filter missing name field

Error message

filter missing name field

What it means

Returned by processHTTPFilters (unmarshal_lds.go:218-219) when an HTTP filter in an LDS listener has an empty name. Every HTTP filter in the chain must be uniquely named (used for per-filter config overrides and ordering), so a blank name is rejected before any further validation. A duplicate-name check follows immediately after.

Source

Thrown at internal/xds/xdsclient/xdsresource/unmarshal_lds.go:219

		if err != nil {
			return nil, fmt.Errorf("filter override %q: %v", name, err)
		}
		if httpFilter == nil {
			// Optional configs are ignored.
			continue
		}
		m[name] = config
	}
	return m, nil
}

func processHTTPFilters(filters []*v3httppb.HttpFilter, server bool) ([]HTTPFilter, error) {
	ret := make([]HTTPFilter, 0, len(filters))
	seenNames := make(map[string]bool, len(filters))
	for _, filter := range filters {
		name := filter.GetName()
		if name == "" {
			return nil, errors.New("filter missing name field")
		}
		if seenNames[name] {
			return nil, fmt.Errorf("duplicate filter name %q", name)
		}
		seenNames[name] = true

		httpFilter, config, err := validateHTTPFilterConfig(filter.GetTypedConfig(), true, filter.GetIsOptional())
		if err != nil {
			return nil, err
		}
		if httpFilter == nil {
			// Optional configs are ignored.
			continue
		}
		if server {
			if _, ok := httpFilter.(httpfilter.ServerFilterBuilder); !ok {
				if filter.GetIsOptional() {
					continue

View on GitHub (pinned to 03255a9237)

Solutions

  1. Give every HTTP filter in the LDS config a unique non-empty name.
  2. If generating the listener config, assert each filter has a name before publishing.
  3. Audit the listener resource for empty-name filters and remove or name them.

Example fix

// before
//   http_filters: [ { typed_config: {...} } ]   // no name
// after
//   http_filters: [ { name: "rbac-filter", typed_config: {...} } ]
Defensive patterns

Strategy: validation

Validate before calling

func httpFiltersAllNamed(filters []*v3httppb.HttpFilter) error {
    seen := map[string]bool{}
    for _, f := range filters {
        if f.GetName() == "" {
            return errors.New("HTTP filter missing name")
        }
        if seen[f.GetName()] {
            return fmt.Errorf("duplicate HTTP filter name %q", f.GetName())
        }
        seen[f.GetName()] = true
    }
    return nil
}

Prevention

When it happens

Trigger: An LDS listener configuration lists an HttpFilter whose name field is unset/empty. processHTTPFilters iterates the filters, reads filter.GetName(), and on "" returns this error, NACKing the listener.

Common situations: Control-plane templating that left a filter unnamed; a copy-paste that dropped the name; a test fixture with an incomplete filter definition.

Related errors


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