Replies: 1 comment
|
Thanks for the detailed analysis and reproduction steps. We'll look into this and share an update soon. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
On a fresh distributed deploy of
openobserve-enterprise:v0.90.3via the official helm chartopenobserve 0.80.3, every enterprise feature (SSO button, Custom Logo Text, OpenFGA RBAC, Service Graph, Custom Hide Self Logo) is silently blocked byblock_feature_for_report_failure(). The block persists across restarts unless the router is rollout-restarted after ingester/querier are already online.Environment
openobserve/openobserve0.80.3 (latest in repo)o2cr.ai/openobserve/openobserve-enterprise:v0.90.3active=true,expires_at2027-06,no_usage_report_allowed_duration: 604800000000μs(7 days),validator_url: https://license-validator.openobserve.ailicense-validator.openobserve.ai(HTTP 307 from in-cluster curl)enterprise.openfga.enabled=trueSymptoms
GET /configreturns"sso_enabled": false,"custom_logo_text"shows chart default instead ofO2_CUSTOM_LOGO_TEXTvalueGET /config/dex_loginreturns{"code":500,"message":"feature blocked due to usage reporting failure"}GET /api/licensereturnsactive=true,expired=false,version=2,ingestion_used=46.3%_meta.usagestream contains 6.5M+ documents (self-reporting writes work fine)/dex/.well-known/openid-configuration200 from public + cluster-internallicense-validator.openobserve.aiconfirmed working (307 redirect from in-cluster curl)Reproduce
Manual workaround that proves it's a startup race (not a license / network / config issue):
The block returns whenever router is rolled out again while ingester is restarting (node drain, helm upgrade, image change).
What we observe in code
src/handler/http/request/status/mod.rs:335:block_features=block_feature_for_report_failure().awaitfrom the closed-sourceo2_enterprise::enterprise::licensecrate (introduced PR #11192).src/job/mod.rsinit_deferred():The router's earliest log lines on every fresh start:
The helm chart deployment ordering doesn't guarantee ingester is online before router calls
init_deferred(). The firststart_license_checkinvocation hits an empty ingester pool, and from then on/config/dex_loginreturns "feature blocked due to usage reporting failure" until the router is restarted while ingester is already up.Chart defaults that compound the issue
charts/openobserve/values.yaml0.80.3:templates/router-deployment.yamlonly renders a hard-codedcheck-natsinitContainer with no exposedextraInitContainersfield, so adding await-for-ingesterinitContainer via values requires forking the chart.Our workaround
Inject via component
extraEnv(router + ingester + querier + alertmanager + compactor):After every
helm install/helm upgrade, run a K8s Job (with RBAC) that:kubectl rollout status sts/o2-openobserve-ingester --timeout=600skubectl rollout status sts/o2-openobserve-querier --timeout=600ssleep 20(NATS cluster register settle)kubectl rollout restart deploy/o2-openobserve-routerkubectl rollout status deploy/o2-openobserve-routerThis unblocks reliably but adds ~5 min to every helm operation, and any subsequent router restart (node drain, image pull retry) re-races.
Additional observation
Once a v0.90 binary boots, it writes new rows to
seaql_migrations(m20260415_000001_create_model_pricing_table,m20260415_000002_add_source_to_model_pricing,m20260504_000001_add_anomaly_detection_config_folder_fk). After this, every enterprise pod started withv0.80.2panics on boot withMigration file of version '<...>' is missing, this migration has been applied but its file is missing. So a v0.90 → v0.80 image downgrade is not possible without DB surgery.All reactions