[automatic failover] Add support for initialization policy for multidb connection#4427
Merged
atakavci merged 7 commits intoredis:masterfrom Feb 13, 2026
Merged
Conversation
- fix all_available in case of zero total
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a configurable initialization policy to determine when MultiDbConnectionProvider considers itself ready during startup, based on how many DB endpoints are available/failed/pending.
Changes:
- Introduces
InitializationPolicy(with built-in policies) andConnectionInitializationContextfor policy evaluation. - Extends
MultiDbConfigto configureinitializationPolicy(default intended to beMAJORITY_AVAILABLE). - Refactors provider initialization to wait for policy satisfaction and select the best available DB by weight; adds/updates unit tests.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java | Refactors startup wait logic to policy-based evaluation and adds best-DB selection by weight. |
| src/main/java/redis/clients/jedis/mcf/InitializationPolicy.java | Adds initialization policy interface + built-in policies (all/majority/one). |
| src/main/java/redis/clients/jedis/mcf/ConnectionInitializationContext.java | Adds context object for counting available/failed/pending endpoints and evaluating policies. |
| src/main/java/redis/clients/jedis/MultiDbConfig.java | Adds initializationPolicy to configuration + builder setter/default. |
| src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderInitializationTest.java | Adds initialization-policy-focused provider initialization tests and adjusts endpoints for mocking. |
| src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderHelper.java | Exposes provider policy-wait method for tests. |
| src/test/java/redis/clients/jedis/mcf/InitializationPolicyTest.java | Adds unit tests for built-in policy decision logic. |
| src/test/java/redis/clients/jedis/mcf/ConnectionInitializationContextTest.java | Adds unit tests for context construction and policy evaluation. |
| src/test/java/redis/clients/jedis/mcf/DefaultValuesTest.java | Asserts default initialization policy value. |
| src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderFailoverAttemptsConfigTest.java | Adjusts a timing constant used in a test. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
src/test/java/redis/clients/jedis/mcf/InitializationPolicyTest.java
Outdated
Show resolved
Hide resolved
ggivo
previously approved these changes
Feb 12, 2026
Collaborator
There was a problem hiding this comment.
Nice!
LGTM!
I suggest reducing the log level (moving info->debug). Mostly those are expected states, and I think we should not clutter the application log's.
src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java
Outdated
Show resolved
Hide resolved
src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java
Outdated
Show resolved
Hide resolved
src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java
Outdated
Show resolved
Hide resolved
src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java
Outdated
Show resolved
Hide resolved
ggivo
previously approved these changes
Feb 12, 2026
ggivo
approved these changes
Feb 13, 2026
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.
Add Initialization Policy for Multi-Database Connection Provider
Summary
Introduces a configurable
InitializationPolicythat determines when theMultiDbConnectionProvideris ready based on database connection availability during initialization.Changes
New Classes
InitializationPolicy- Interface for defining initialization policies with three built-in implementations:ALL_AVAILABLE- Requires all databases to be healthy before initialization succeedsMAJORITY_AVAILABLE- Requires a majority of databases to be healthy (default)ONE_AVAILABLE- Requires at least one database to be healthyConnectionInitializationContext- Tracks connection initialization status (available, failed, pending counts) and evaluates policiesConfiguration
initializationPolicyfield toMultiDbConfigwith builder supportMAJORITY_AVAILABLEProvider Updates
waitForInitialHealthyDatabase()→waitForInitializationPolicy()to use policy-based evaluationselectBestAvailableDatabase()for selecting the highest-weighted healthy database after policy successUsage
Tests
InitializationPolicyTest- Unit tests for all built-in policy decision logicConnectionInitializationContextTest- Unit tests for context construction and policy evaluationDefaultValuesTestandMultiDbConnectionProviderInitializationTestwith policy tests