{"record":{"id":"85650824be44ce9e","repo":"SigNoz/signoz","slug":"codelicenseunavailable-856508","errorCode":"CodeLicenseUnavailable","errorMessage":"a valid license is not available","messagePattern":"a valid license is not available","errorType":"error_code","errorClass":"errors.Error","httpStatus":null,"severity":"error","filePath":"ee/authn/callbackauthn/samlcallbackauthn/authn.go","lineNumber":69,"sourceCode":"\t}\n\n\treturn url, nil\n}\n\nfunc (a *AuthN) HandleCallback(ctx context.Context, formValues url.Values) (*authtypes.CallbackIdentity, error) {\n\tstate, err := authtypes.NewStateFromString(formValues.Get(\"RelayState\"))\n\tif err != nil {\n\t\treturn nil, errors.New(errors.TypeInvalidInput, authtypes.ErrCodeInvalidState, \"saml: invalid state\").WithAdditional(err.Error())\n\t}\n\n\tauthDomain, err := a.store.GetAuthDomainFromID(ctx, state.DomainID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t_, err = a.licensing.GetActive(ctx, authDomain.StorableAuthDomain().OrgID)\n\tif err != nil {\n\t\treturn nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, \"a valid license is not available\").WithAdditional(\"this feature requires a valid license\").WithAdditional(err.Error())\n\t}\n\n\tsamlConfig, err := authDomain.Config().SamlConfig()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsp, err := a.serviceProvider(state.URL, authDomain)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tassertionInfo, err := sp.RetrieveAssertionInfo(formValues.Get(\"SAMLResponse\"))\n\tif err != nil {\n\t\tif errors.As(err, &saml2.ErrVerification{}) {\n\t\t\treturn nil, errors.New(errors.TypeForbidden, errors.CodeForbidden, err.Error())\n\t\t}\n","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/ee/authn/callbackauthn/samlcallbackauthn/authn.go#L51-L87","documentation":"Default branch of the filter-operator switch in PrepareTimeseriesFilterQueryV3 (SigNoz metrics v4 helpers building v3-compatible sub-queries). It fires when a filter item's operator has no corresponding ClickHouse condition emitted by this function, unlike its siblings like/nlike/exists/nexists handled just above the default.","triggerScenarios":"A v3-format metrics query executed through the v4 optimized path (buildMetricQueryForTable / buildDeltaMetricQuery / buildDeltaMetricQueryForTable / buildMetricQuery) with a filters entry whose operator is not implemented — typo'd operator string, numeric comparator on a label, or an operator added elsewhere only.","commonSituations":"Dashboards built on older SigNoz versions replayed against a newer v4 code path with a narrower operator set; API clients copying filter JSON from traces (v3.FilterOperator vocabulary) into metrics queries; fork customizations adding operators to only one builder.","solutions":["Inspect each item.Operator in qp.Filters and map it to a supported one (=, !=, in, nin, like, nlike, ilike, nlike-ci variants, exists, nexists)","Pin or align SigNoz versions so the v4-compat builder covers the operators your dashboards use","Pre-validate filters against an allowlist before calling the builder and surface a field-level error to users"],"exampleFix":"// before\n{\"key\":\"service.name\",\"operator\":\"regex\",\"value\":\"web.*\"}\n\n// after\n{\"key\":\"service.name\",\"operator\":\"contains\",\"value\":\"web\"} // or 'like' with a ClickHouse-compatible pattern","handlingStrategy":"validation","validationCode":"for _, f := range qp.Filters {\n\tswitch f.Operator {\n\tcase v3.FilterOperatorEqual, v3.FilterOperatorNotEqual, v3.FilterOperatorIn, v3.FilterOperatorNotIn, v3.FilterOperatorLike, v3.FilterOperatorNotLike, v3.FilterOperatorExists, v3.FilterOperatorNotExists, v3.FilterOperatorRegex:\n\tdefault:\n\t\treturn fmt.Errorf(\"filter %s uses unsupported operator %s\", f.Key.Key, f.Operator)\n\t}\n}","typeGuard":"null","tryCatchPattern":"if _, err := helpers.PrepareTimeseriesFilterQueryV3(...); err != nil && strings.Contains(err.Error(), \"unsupported filter operator\") {\n\t// log the filter item and drop it, then retry the build\n}","preventionTips":["Keep a single filter-operator allowlist in your client","Validate dashboards after SigNoz upgrades","Never reuse enums from unrelated packages for operators"],"tags":["signoz","metrics","v4","query-builder","filter-operator","clickhouse"],"backgroundTag":"unsupported-filter-operator","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}