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() {
continueView on GitHub (pinned to 03255a9237)
Solutions
- Give every HTTP filter in the LDS config a unique non-empty name.
- If generating the listener config, assert each filter has a name before publishing.
- 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
- Name every HTTP filter uniquely in LDS configs.
- Lint listener configs for empty/duplicate filter names before publishing.
- Use stable, descriptive filter names for easier per-filter overrides.
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
- empty prefix is not allowed in StringMatcher
- empty suffix is not allowed in StringMatcher
- empty contains is not allowed in StringMatcher
- rbac: Policy.condition is present
- rbac: policy.CheckedCondition is present
AI-assisted analysis of grpc/grpc-go@03255a9237 (2026-08-07).
Data as JSON: /api/errors/6dadf6a586a396e8.
Report an issue: GitHub.