Skip to content

Conversation

ggivo
Copy link
Collaborator

@ggivo ggivo commented Oct 3, 2025

Summary

This PR renames classes from "Cluster" terminology to "MultiDb/Database" terminology to reflect the actual functionality better and improve API clarity. The changes align the naming convention across the entire multi-database failover feature.

Changes

Package Original Class Name New Class Name
redis.clients.jedis ResilientClient MultiDbClient
redis.clients.jedis MultiClusterClientConfig MultiDbConfig
redis.clients.jedis MultiClusterClientConfig.ClusterConfig MultiDbConfig.DatabaseConfig
redis.clients.jedis MultiClusterClientConfig.ClusterConfig.Builder MultiDbConfig.DatabaseConfig.Builder
redis.clients.jedis MultiClusterClientConfig.Builder MultiDbConfig.Builder
redis.clients.jedis MultiClusterClientConfig.StrategySupplier MultiDbConfig.StrategySupplier
redis.clients.jedis.builders ResilientClientBuilder MultiDbClientBuilder
redis.clients.jedis.builders ResilientClient.Builder MultiDbClient.Builder
redis.clients.jedis.mcf MultiClusterPooledConnectionProvider MultiDbConnectionProvider
redis.clients.jedis.mcf MultiClusterPooledConnectionProvider.Cluster MultiDbConnectionProvider.Database
redis.clients.jedis.mcf MultiClusterPipeline MultiDbPipeline
redis.clients.jedis.mcf MultiClusterTransaction MultiDbTransaction
redis.clients.jedis.mcf ClusterSwitchEventArgs DatabaseSwitchEvent

Impact

⚠️ Breaking Change: This is a breaking API change for users of the multi-database failover feature.

Testing

  • ✅ All existing tests updated and passing
  • ✅ Code compiles successfully
  • ✅ Maven formatter validation passes

Copy link

github-actions bot commented Oct 3, 2025

Test Results

   283 files  ±0    283 suites  ±0   11m 34s ⏱️ +19s
10 076 tests ±0  9 020 ✅ ±0  1 056 💤 ±0  0 ❌ ±0 
 2 714 runs  ±0  2 714 ✅ ±0      0 💤 ±0  0 ❌ ±0 

Results for commit 53f96f2. ± Comparison against base commit 38cb8b4.

♻️ This comment has been updated with latest results.

accidentally running only unit test locally after merge conflict resolved in commit f8de2fe
@ggivo ggivo changed the title [automatic failover] Mass rename of classes related to Automatic Failover [automatic failover] Refactor: Rename Multi-Cluster Classes to Multi-Database Terminology Oct 6, 2025
@ggivo ggivo changed the base branch from feature/automatic-failover-3 to master October 6, 2025 15:43
atakavci and others added 16 commits October 6, 2025 18:47
…components (#4298)

* - set & test default values

* - format

* - fix tests failing due to changing defaults
…ure rate) capabililty to circuit breaker (#4295)

* [automatic failover] Remove the check for 'GenericObjectPool.getNumWaiters()' in 'TrackingConnectionPool' (#4270)

- remove the check for number of waitiers in TrackingConnectionPool

* [automatic failover] Configure max total connections for EchoStrategy (#4268)

- set maxtotal connections for echoStrategy

* [automatic failover] Replace 'CircuitBreaker' with 'Cluster' for 'CircuitBreakerFailoverBase.clusterFailover' (#4275)

* - replace CircuitBreaker with Cluster for CircuitBreakerFailoverBase.clusterFailover
- improve thread safety with provider initialization

* - formatting

* [automatic failover] Minor optimizations on fast failover (#4277)

* - minor optimizations on fail fast

* -  volatile failfast

* [automatic failover] Implement health check retries (#4273)

* - replace minConsecutiveSuccessCount with numberOfRetries
- add retries into healtCheckImpl
- apply changes to strategy implementations config classes
- fix unit tests

* - fix typo

* - fix failing tests

* - add tests for retry logic

* - formatting

* - format

* - revisit numRetries for healthCheck ,replace with numProbes and implement built in policies
- new types probecontext, ProbePolicy, HealthProbeContext
- add delayer executor pool to healthcheckımpl
-  adjustments on  worker pool of healthCheckImpl for shared use of workers

* - format

* - expand comment with example case

* - drop pooled executor for delays

* - polish

* - fix tests

* - formatting

* - checking failing tests

* - fix test

* - fix flaky tests

* - fix flaky test

* - add tests for builtin probing policies

* - fix flaky test

* [automatic failover] Move failover provider to mcf (#4294)

* - move failover provider to mcf

* - make iterateActiveCluster package private

* [automatic failover]  Add SSL configuration support to LagAwareStrategy  (#4291)

* User-provided ssl config for lag-aware health check

* ssl scenario test for lag-aware healthcheck

* format

* format

* address review comments

  - use getters instead of fields

* [automatic failover] Implement max number of failover attempts (#4293)

* - implement max failover attempt
- add tests

* - fix user receive the intended exception

* -clean+format

* - java doc for exceptions

* format

* - more tests on excaption types in max failover attempts mechanism

* format

* fix failing timing in test

* disable health checks

* rename to switchToHealthyCluster

* format

* - Add dual-threshold (min failures + failure rate) failover to circuit breaker executor
- Map config to resilience4j via CircuitBreakerThresholdsAdapter
- clean up/simplfy config: drop slow-call and window type
- Add thresholdMinNumOfFailures; update some of the defaults
- Update provider to use thresholds adapter
- Update docs; align examples with new defaults
- Add tests for 0% rate, edge thresholds

* polish

* Update src/main/java/redis/clients/jedis/mcf/CircuitBreakerThresholdsAdapter.java

Co-authored-by: Copilot <[email protected]>

* - fix typo

* - fix min total calls calculation

* format

* - merge issues fixed

* fix javadoc ref

* - move threshold evaluations to failoverbase
- simplfy executer and cbfailoverconnprovider
- adjust config getters
- fix failing tests due to COUNT_BASED -> TIME_BASED
- new tests for thresholds calculations and impact on circuit state transitions

* - avoid facilitating actual CBConfig type in tests

* Update src/test/java/redis/clients/jedis/failover/FailoverIntegrationTest.java

Co-authored-by: Copilot <[email protected]>

* Trigger workflows

* - evaluate only in failure recorded and failover immediately
- add more test on threshold calculations
- enable command line arg for overwriting surefire.excludedGroups

* format

* check pom

* - fix error prone test

* [automatic failover] Set and test default values for failover config&components (#4298)

* - set & test default values

* - format

* - fix tests failing due to changing defaults

* - fix flaky test

* - remove unnecessary checks for failover attempt

* - clean and trim adapter class
- add docs and more explanantion

* fix javadoc issue

* - switch to all_succes to fix flaky timing

* - fix issue in CircuitBreakerFailoverConnectionProvider

* introduce ReflectionTestUtil

---------

Co-authored-by: Ivo Gaydazhiev <[email protected]>
Co-authored-by: Copilot <[email protected]>
…over and circuit breaker support (#4300)

* feat: introduce ResilientRedisClient with multi-endpoint failover support

Add ResilientRedisClient extending UnifiedJedis with automatic failover
capabilities across multiple weighted Redis endpoints. Includes circuit
breaker pattern, health monitoring, and configurable retry logic for
high-availability Redis deployments.

* format

* mark ResilientRedisClientTest as integration one

* fix test
  - make sure endpoint is healthy before activating it

* Rename ResilientClient to align with design

 - ResilientClient -> MultiDbClient (builder, tests, etc)

* Rename setActiveEndpoint to setActiveDatabaseEndpoint

* Rename clusterSwitchListener to databaseSwitchListener

* Rename multiClusterConfig to multiDbConfig

* fix api doc's error

* fix compilation error after rebase

* format

* fix example in javadoc

* Update ActiveActiveFailoverTest scenariou test to use builder's

# Conflicts:
#	src/test/java/redis/clients/jedis/scenario/ActiveActiveFailoverTest.java

* rename setActiveDatabaseEndpoint -. setActiveDatabase

* is healthy throw exception if cluster does not exists

* format
…ti db (#4302)

[clean up] Use Endpoint interface where possible
  - MultiClusterPooledConnectionProvider -> MultiDatabaseConnectionProvider
    - Cluster -> Database
  - MultiClusterClientConfig -> MultiDatabaseConfig
    - ClusterConfig -> DatabaseConfig
@ggivo ggivo force-pushed the ggivo/aa-renaming branch from 53f96f2 to 4526416 Compare October 6, 2025 15:47
@ggivo
Copy link
Collaborator Author

ggivo commented Oct 6, 2025

Opening new PR based on master.
#4308

@ggivo ggivo closed this Oct 6, 2025
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