Repository navigation
Add composite MySQL safety checks and stable recovery - #196
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
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
|
The Why was this labeled incident-repair?
This isn't a repair item. How do I stop this from being tracked?If this issue is not a repair item, you can stop the bot from auto-labeling by removing it from the list of action items in the associated availability review. Then the Service Catalog TrackingThis repair item is being tracked under the Service Catalog service freno. Related Links 🔗 Please reach out to the incident-lifecycle team if you have any questions. 🤖 This comment was created automatically by the SRE bot. Any bugs or feedback please open a bug report issue in |


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.