Add self-service overrides to table feature toggles - #666
Merged
Conversation
cbb330
force-pushed
the
chbush/table-feature-override-gate
branch
2 times, most recently
from
July 31, 2026 04:34
88032e8 to
f17ae1f
Compare
cbb330
force-pushed
the
chbush/table-feature-override-gate
branch
6 times, most recently
from
July 31, 2026 05:09
bc4547b to
f16b5f7
Compare
cbb330
marked this pull request as ready for review
July 31, 2026 05:16
cbb330
force-pushed
the
chbush/table-feature-override-gate
branch
from
July 31, 2026 17:23
f16b5f7 to
dd7cb47
Compare
cbb330
force-pushed
the
chbush/table-feature-override-gate
branch
from
July 31, 2026 20:26
dd7cb47 to
fa28104
Compare
kamanavishnu
approved these changes
Jul 31, 2026
kamanavishnu
left a comment
Collaborator
There was a problem hiding this comment.
Re-reviewed after the latest commit. All three open threads are resolved:
- Wildcard matching now uses Spring
AntPathMatcher, fixing the mid-pattern*fallback and adding a pinning test. - Case-sensitivity is intentionally preserved (consistent with pre-existing behavior and HTS key matching), with a test locking it in.
- The authorization-gate safeguard is javadoc-only today; agreed this is fine for now given the proposed typed
TableFeature.capability()vs.rollout()follow-up.
LGTM.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Problem: I have a feature which I want to ramp on the server. but I also don't want to prevent table owners from self-serve opting in. A generic function to handle that overlap doesn't exist today.
Extend the existing
TableFeatureTogglewith self-service table overrides while preserving its server-managed targeting API.An explicit
<featureId>.enabled=true|falsetable property wins. When the property is absent, activation delegates to the server toggle. Server rules now support trailing-*prefix matching independently for database and table names.Changes
Adds a binary-compatible default method to
TableFeatureToggle:It is deliberately not an overload of
isFeatureActivated. The two carry different safety contracts, and a distinct name makes the difference visible at the call site: authorization gates such asenable_mordecide whether a user may write a preserved table property, so they must keep using the server-onlyisFeatureActivated(String, String, String). The override-honoring form reads a property the gated user can write.An override that is neither
truenorfalsefails closed: it is logged and the feature is treated as inactive. The gate is evaluated on the table-load path, so throwing would turn a typo likeread-bridge.enabled=flaseinto a400and make the table unloadable.Extends the existing toggle rule matcher while preserving exact and
*matching:tracking.eventsmatches exactly.tracking_*.events_*matches database and table prefixes.*.*matches every table.Testing Done
Ran:
All 12 focused tests passed, covering server fallback, explicit opt-in and opt-out, fail-closed handling of unparseable overrides, exact matching, wildcard matching, and paired database/table prefix matching.
Additional Information
This is an independent OSS foundation for the read-bridge stack in #645 and the corresponding
li-openhouseimplementation PRs. Feature-specific default derivation remains outside this PR.Note for reviewers: the matcher change widens any existing
table_toggle_rulerow whose pattern ends in*but is not exactly*. Those previously matched nothing. Worth auditing HTS before merge.