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

  1. Check the signal string you passed vs what is stored for that org (the error suffix names the stored signal)
  2. Inspect the stored filter JSON for that (org, signal) row and fix or delete it
  3. Align app versions so the writer's format matches the reader's constructor
  4. 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

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.