<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #46399 When a label's query errors on a host (e.g. the extension socket is unavailable) instead of returning zero rows, Fleet was recording that error the same as a definitive "no match," clearing the host's existing label membership. This could unintentionally remove configuration profiles or other automations scoped to that label. The fix leaves existing label membership untouched when a label query errors. # Checklist for submitter - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually **Setup:** macOS VM enrolled as a Fleet host, with a dynamic label whose query targets a real, always-present table but with a deliberately invalid `WHERE` clause, so the query fails deterministically (a `no such column` SQL error). ```sql -- working version (label matches) SELECT * FROM os_version; -- broken version (query errors on every run) SELECT * FROM os_version WHERE this_column_does_not_exist = 1; ``` ### Before (bug reproduced on unpatched code) 1. Set the label's query to the working version and refetched the host — confirmed it shows up under the host's Labels. 2. Edited the label's query to the broken version. 3. Clicked **Refetch** on the host. 4. **Result:** the label disappeared from the host's Labels list — a query error incorrectly cleared existing membership. ### After (fix verified) 1. Reset the label's query to the working version and refetched — confirmed membership was restored. 2. Edited the label's query to the broken version again. 3. Clicked **Refetch** on the host. 4. **Result:** the label remained on the host's Labels list — a query error now correctly leaves existing membership untouched. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Preserved existing dynamic label memberships when label queries fail or yield unknown results. * Avoided treating unknown/failed evaluations as label removals. * Ensured label updates/removals are applied only when a definite match or non-match is returned. * **Tests** * Expanded coverage for label query errors across datastore, async processing, and distributed execution to confirm memberships remain unchanged. * Updated expectations for queued async updates to skip errored labels. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
236 B
236 B
- Fixed label membership being incorrectly cleared when a label's query errors out on a host (e.g. the extension socket is unavailable) instead of returning zero rows; existing membership is now left unchanged when a label query fails.