Add composite MySQL safety checks and stable recovery - #196
Open
pradeepkintali wants to merge 5 commits into
Open
pradeepkintali wants to merge 5 commits into
pradeepkintali wants to merge 5 commits into
Conversation
Allow replica-lag checks to require cached primary and ProxySQL safety metrics, fail closed for configured probes, and hold recovery until a cooling period completes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0fbc396f-32f9-449a-8537-6264e8665c31
Require a full healthy window after process or leader startup, expose the blocking metric in check responses, and publish recovery latch state. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0fbc396f-32f9-449a-8537-6264e8665c31
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0fbc396f-32f9-449a-8537-6264e8665c31
pradeepkintali
marked this pull request as ready for review
September 28, 2026 19:03
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Recovery semantics and direct-memcache behavior can bypass or inconsistently apply the new safety gates.
Review effort: Balanced
Findings: 1
Open (4)
What changed in this PR
Adds composite MySQL safety checks, recovery hysteresis, and configurable Vitess tablet discovery.
Changes:
- Composes replica checks with required primary and ProxySQL metrics.
- Adds fail-closed behavior, recovery thresholds, cooling periods, and metrics.
- Supports validated
REPLICA,MASTER, andPRIMARYVitess tablet configuration.
| File | Description |
|---|---|
pkg/base/throttle_metric.go |
Adds recovery-state metric errors. |
pkg/config/config_test.go |
Tests new configuration validation. |
pkg/config/mysql_config.go |
Adds composite and recovery settings. |
pkg/config/vitess_config.go |
Validates tablet types. |
pkg/throttle/check.go |
Evaluates required clusters. |
pkg/throttle/check_result.go |
Reports the blocking metric. |
pkg/throttle/throttler.go |
Implements recovery latching. |
pkg/throttle/throttler_test.go |
Tests composition and recovery. |
pkg/vitess/api_client.go |
Filters configured tablet types. |
pkg/vitess/api_client_test.go |
Tests primary discovery. |
doc/mysql.md |
Documents configuration and rollout scope. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Preserve the replica validation API, apply read overrides consistently, reset recovery state on leadership regain, and enforce required clusters for direct memcache consumers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0fbc396f-32f9-449a-8537-6264e8665c31
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0fbc396f-32f9-449a-8537-6264e8665c31
This branch has not been deployed
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
MASTER/PRIMARYVitess tablet discovery while preservingREPLICAas the defaultConfiguration model
A normal replica-lag cluster can list primary-load, connection-capacity, or other scalar safety metrics in
RequiredClusters. Each required metric is sampled centrally by the Freno leader and may opt into:FailOnNoHostsRecoveryThresholdRecoveryDurationMillisAll settings are opt-in, preserving existing behavior for current clusters.
Validation
go test -count=1 ./...go vet ./pkg/base ./pkg/config ./pkg/throttle ./pkg/http ./pkg/mysql ./pkg/proxysql ./pkg/vitessFull-repository
go vet ./...still reports pre-existingtesting.T.Fatalfcalls from non-test goroutines ininternal/rafttests.Scope boundaries
This PR provides reusable admission checks and recovery behavior. Deployment-specific metrics, thresholds, host discovery, operational alerting, and application concurrency or fallback controls remain the responsibility of each deployment.