SigNoz/signoz · error · errors.base
internal
internal
Error message
error processing filter for signal: %s
What it means
GetSignalFilters loaded the stored quick filter for a single signal but NewSignalFilterFromStorableQuickFilter could not convert it. The stored row for that specific signal has a signal name or filter payload the current constructor rejects, and the error is wrapped with CodeInternal naming the failing signal.
Source
Thrown at pkg/modules/quickfilter/implquickfilter/module.go:59
// GetSignalFilters returns quick filters for a specific signal in an organization.
func (m *module) GetSignalFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal) (*quickfiltertypes.SignalFilters, error) {
storedFilter, err := m.store.GetBySignal(ctx, orgID, signal.StringValue())
if err != nil {
return nil, err
}
// If no filter exists for this signal, return empty filters with the requested signal
if storedFilter == nil {
return &quickfiltertypes.SignalFilters{
Signal: signal,
Filters: []v3.AttributeKey{},
}, nil
}
// Convert stored filter to signal filter
signalFilter, err := quickfiltertypes.NewSignalFilterFromStorableQuickFilter(storedFilter)
if err != nil {
return nil, errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error processing filter for signal: %s", storedFilter.Signal)
}
return signalFilter, nil
}
// UpdateQuickFilters updates quick filters for a specific signal in an organization.
func (module *module) UpdateQuickFilters(ctx context.Context, orgID valuer.UUID, signal quickfiltertypes.Signal, filters []v3.AttributeKey) error {
// Validate each filter
for _, filter := range filters {
if err := filter.Validate(); err != nil {
return errors.Newf(errors.TypeInvalidInput, errors.CodeInvalidInput, "invalid filter: %v", err)
}
}
// Marshal filters to JSON
filterJSON, err := json.Marshal(filters)
if err != nil {
return errors.Wrapf(err, errors.TypeInternal, errors.CodeInternal, "error marshalling filters")View on GitHub (pinned to 5069bf80b0)
Solutions
- Check the signal string you passed vs what is stored for that org (the error suffix names the stored signal)
- Inspect the stored filter JSON for that (org, signal) row and fix or delete it
- Align app versions so the writer's format matches the reader's constructor
- Reset the org's quick filters for that signal via UpdateQuickFilters to rewrite a clean row
Defensive patterns
Strategy: fallback
Try / catch
try { return await getSignalFilters(orgId, signal); } catch (e) { if (/error processing filter for signal/.test(e.message)) { await resetSignalFilters(orgId, signal); return getDefaultFilters(signal); } throw e; } Prevention
- Keep client and server versions aligned so signal vocabularies match
- Re-save (update) quick filters after major upgrades to rewrite rows in the current format
When it happens
Trigger: Calling GetSignalFilters(ctx, orgID, signal) where the stored row's Signal value or marshalled filter JSON does not match what NewSignalFilterFromStorableQuickFilter supports (renamed/removed signal, malformed JSON blob).
Common situations: Version upgrade that renamed signals or changed the storable filter format, rows written by an older release, corrupted payload after manual DB edits.
Related errors
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/c76067b7fe08d2cf.
Report an issue: GitHub.