{"record":{"id":"bf5cc5e6a2da780b","repo":"thanos-io/thanos","slug":"endpoint-s","errorCode":null,"errorMessage":"endpoint %s","messagePattern":"endpoint (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/thanos/endpointset.go","lineNumber":221,"sourceCode":"\t\tcfg.Endpoints = append(cfg.Endpoints, endpointSettings{\n\t\t\tAddress: e,\n\t\t\tGroup:   true,\n\t\t\tStrict:  true,\n\t\t})\n\t}\n}\n\nfunc validateEndpointConfig(cfg *EndpointConfig) error {\n\tfor i := range cfg.Endpoints {\n\t\tecfg := &cfg.Endpoints[i]\n\t\tif dns.IsDynamicNode(ecfg.Address) && ecfg.Strict {\n\t\t\treturn errors.Newf(\"%s is a dynamically specified endpoint i.e. it uses SD and that is not permitted under strict mode.\", ecfg.Address)\n\t\t}\n\t\tif !ecfg.Group && len(ecfg.ServiceConfig) != 0 {\n\t\t\treturn errors.Newf(\"%s service_config is only valid for endpoint groups.\", ecfg.Address)\n\t\t}\n\t\tif err := ecfg.ClientConfig.validateCompression(); err != nil {\n\t\t\treturn errors.Wrapf(err, \"endpoint %s\", ecfg.Address)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc newEndpointConfigProvider(\n\tlogger log.Logger,\n\tconfigFile fileContent,\n\tconfigReloadInterval time.Duration,\n\tstaticEndpoints []string,\n\tstaticEndpointGroups []string,\n\tstaticStrictEndpoints []string,\n\tstaticStrictEndpointGroups []string,\n) (*endpointConfigProvider, error) {\n\tres := &endpointConfigProvider{\n\t\tendpoints:            staticEndpoints,\n\t\tendpointGroups:       staticEndpointGroups,\n\t\tstrictEndpoints:      staticStrictEndpoints,","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/cmd/thanos/endpointset.go#L203-L239","documentation":"Raised when an individual endpoint entry passes parsing but fails semantic validation — specifically when ClientConfig.validateCompression rejects the compression settings for that endpoint. The address is included in the wrapper so operators can find the bad entry. Validation runs at provider creation and on every config reload.","triggerScenarios":"An endpoint entry in the config has a client.compression (or compression_types) value combination that validateCompression rejects, e.g., enabling compression when the store API peer doesn't support it, or an invalid compression type name.","commonSituations":"Copy-pasting store client config with `compression: snappy` into endpoint config where it's disallowed; typo like `compressions: [gzip]`; enabling compression against older Thanos Store peers that lack support.","solutions":["Read the inner error from validateCompression and remove/correct the compression field on the endpoint entry with the reported address.","Use only supported compression values (e.g., empty or the enabled set for your Thanos version) and confirm peers advertise compression support.","Remove client_config compression entirely for endpoints whose remote store does not support it.","Re-run validation locally (unit call validateEndpointConfig or just restart) to confirm the config passes before deploying."],"exampleFix":"// before\n// endpoint_groups:\n//   - address: dns:///stores:10901\n//     client_config:\n//       compression: bad-algo\n// after\n// endpoint_groups:\n//   - address: dns:///stores:10901\n//     client_config:\n//       compression: \"\"","handlingStrategy":"validation","validationCode":"for _, e := range cfg.Endpoints { if e.ClientConfig != nil { if err := e.ClientConfig.validateCompression(); err != nil { return fmt.Errorf(\"endpoint %s: %w\", e.Address, err) } } }","typeGuard":null,"tryCatchPattern":"if err := validateEndpointConfig(&cfg); err != nil {\n    log.Fatalf(\"endpoint config rejected: %v\", err) // chained message names the address and rule\n}","preventionTips":["Keep compression settings only on endpoints whose peers advertise support.","Validate config in CI with the same validateEndpointConfig rules before rollout.","Avoid copy-pasting store client_config blocks between endpoint kinds.","Check strict-mode requirements when introducing SD-based addresses."],"tags":["config","validation","grpc","compression","thanos"],"backgroundTag":"invalid-config-value","analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}