mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 21:47:20 +00:00
<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #42156 The core change: instead of loading AppConfig, HostFeatures, TeamMDMConfig, and rebuilding the detail query map **independently inside each call** to `directIngestDetailQuery` and `ingestDetailQuery` (so ~2N times per check-in with N detail results), we load everything **once** into a `hostDetailQueryConfig` struct and pass it through. ## Before ``` SubmitDistributedQueryResults loop: for each query result: → ingestQueryResults → directIngestDetailQuery: loads AppConfig, HostFeatures, TeamMDMConfig, builds detail query map → ingestDetailQuery: loads AppConfig, HostFeatures, TeamMDMConfig, builds detail query map after loop: loads AppConfig for labels/policies loads AppConfig AGAIN for deferred host save ``` ## After ``` SubmitDistributedQueryResults loop: on first detail query result: → loadHostDetailQueryConfig: loads AppConfig, HostFeatures, TeamMDMConfig, builds detail query map ONCE for each query result: → ingestQueryResults (receives pre-loaded config) → directIngestDetailQuery: just looks up the query in the cached map → ingestDetailQuery: just looks up the query in the cached map after loop: loads AppConfig once for labels/policies/deferred host save ``` The detail config is **lazy-loaded** — if a check-in only has label/policy results and no detail queries, the HostFeatures/TeamMDMConfig calls are skipped entirely. ## Other changes bundled in 1. **`serialUpdateHost`** now receives the request context and uses `context.WithoutCancel(ctx)` instead of `context.Background()`, so the background goroutine preserves OTEL traces and logging context without being subject to request cancellation. 2. **Deferred save host** at the end of `SubmitDistributedQueryResults` reuses the already-loaded AppConfig instead of loading it a third time. The old code silently skipped the host save if that third load failed. # Checklist for submitter If some of the following don't apply, delete the relevant line. - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. ## Testing - [x] QA'd all new/changed functionality manually - Ran a local load test with osquery perf <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Performance** * Optimized distributed query result processing by preloading configuration once per request instead of repeatedly per query result, reducing redundant database calls and improving overall query performance. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 line
233 B
Text
1 line
233 B
Text
* Reduced redundant database calls in the osquery distributed query results hot path by pre-loading configuration (AppConfig, HostFeatures, TeamMDMConfig, conditional access) once per request instead of once per detail query result.
|