Skip to content

broker: add opt-in delete-permission probe to FragmentStoreHealth - #489

Merged
williamhbaker merged 1 commit into
masterfrom
wb/health-check-delete-probe
Jul 22, 2026
Merged

broker: add opt-in delete-permission probe to FragmentStoreHealth#489
williamhbaker merged 1 commit into
masterfrom
wb/health-check-delete-probe

Conversation

@williamhbaker

@williamhbaker williamhbaker commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

The storage-mapping connection test never exercises a delete, so a bucket policy missing the delete action passes setup and only fails later, when recovery-log pruning hits AccessDenied and fires recurring alerts.

Add check_delete and check_delete_prefix to FragmentStoreHealthRequest. When check_delete is set, the broker writes and removes a throwaway probe object under the prefix (empty probes the store root) to verify delete permission at configuration time. The probe is on-demand and excluded from the periodic background check, so existing stores lacking delete permission keep reporting healthy. It uses the generic Store interface, so S3, GCS, and Azure are all covered.

Note: Manually tested locally against an S3 emulator.

@williamhbaker
williamhbaker force-pushed the wb/health-check-delete-probe branch from 5dd174d to 4d020e5 Compare July 15, 2026 22:06
The storage-mapping connection test never exercises a delete, so a
bucket policy missing the delete action passes setup, and the problem
only surfaces later during operations that require deletion, such as
recovery log pruning.

Add check_delete and check_delete_prefix to FragmentStoreHealthRequest.
When check_delete is set, the broker writes and removes a throwaway
probe object under the prefix (empty probes the store root) to verify
delete permission at configuration time. The probe is on-demand and
excluded from the periodic background check, and is intended to be
invoked as a user-initiated check when storage mappings change.
@williamhbaker
williamhbaker force-pushed the wb/health-check-delete-probe branch from 4d020e5 to ec74045 Compare July 15, 2026 22:13

@dgreer-dev dgreer-dev left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since check_delete makes the broker do a Put/Remove against the store, should this require more than Capability_READ?

@williamhbaker

Copy link
Copy Markdown
Contributor Author

I was thinking about that but we are already doing a PUT (write) as part of the normal health checks so it didn't seem like much more of a deviation than that.

@dgreer-dev dgreer-dev left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

williamhbaker added a commit to estuary/flow that referenced this pull request Jul 17, 2026
Storage-mapping health checks only exercised read/connect, so a bucket
lacking delete permission still passed. Set check_delete on the
FragmentStoreHealth requests from the storage-mapping mutations, probing
under "recovery/".

Bumps go.gazette.dev/core for the new request fields (gazette/core#489).
@williamhbaker
williamhbaker merged commit e54beb5 into master Jul 22, 2026
1 check passed
@williamhbaker
williamhbaker deleted the wb/health-check-delete-probe branch July 22, 2026 19:31
williamhbaker added a commit to estuary/flow that referenced this pull request Jul 22, 2026
Storage-mapping health checks only exercised read/connect, so a bucket
lacking delete permission still passed. Set check_delete on the
FragmentStoreHealth requests from the storage-mapping mutations, probing
under "recovery/".

Bumps go.gazette.dev/core for the new request fields (gazette/core#489).
williamhbaker added a commit to estuary/flow that referenced this pull request Jul 23, 2026
Storage-mapping health checks only exercised read/connect, so a bucket
lacking delete permission still passed. Set check_delete on the
FragmentStoreHealth requests from the storage-mapping mutations, probing
under "recovery/".

Bumps go.gazette.dev/core for the new request fields (gazette/core#489).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants