redis/jedis · error · JedisException

No BDB found matching host

Error message

No BDB found matching host '%s' for health check

What it means

LagAwareStrategy.doHealthCheck throws JedisException when the Redis Enterprise REST API returns a BDB list in which no database (BDB) matches the host being health-checked. The strategy cannot map the endpoint host to a database, so the health check aborts.

Solutions

  1. Verify the host used by the client config matches an endpoint host reported by the REST API (rladmin status / GET /bdbs)
  2. Refresh client configuration after database failover, migration, or recreation
  3. Ensure consistent hostname resolution (use the same FQDNs the cluster exposes, not raw IPs)
  4. Check that the correct REST API endpoint/credentials are configured so getBdbs() returns the intended cluster's databases

Example fix

// before
config endpointHost = "10.0.0.5"  // node IP, not an endpoint
// after
config endpointHost = "redis-12345.demo.fqdn.com"  // matches BDB endpoint host
Defensive patterns

Strategy: retry

Validate before calling

List<BdbInfo> bdbs = redisRestAPI.getBdbs();
if (bdbs.stream().noneMatch(b -> b.matchesHost(dbHost))) { log.warn("Host {} not in any BDB endpoint; check config", dbHost); }

Try / catch

try { healthCheck(); } catch (JedisException e) { if (e.getMessage().contains("No BDB found")) { log.warn("Endpoint/host mismatch in Redis Enterprise config: {}", e.getMessage()); /* refresh endpoints and retry */ } else { throw e; } }

Prevention

When it happens

Trigger: Health check runs against a Redis Enterprise cluster endpoint whose host is not present in any BDB's endpoints, e.g. checking a node/proxy host that hosts no endpoints for this database, or after the database was migrated/failed over and the endpoint list is stale.

Common situations: Multi-DB (MultiDbClient) setups where a configured host no longer belongs to the database; DNS/hostname mismatch (IP vs FQDN) between client config and REST API endpoint entries; databases recreated with different endpoint hosts while client config still lists old hosts.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of redis/jedis@6dac31d4c2 (2026-09-08). Data as JSON: /api/errors/fcf72baded420a6b. Report an issue: GitHub.

Appendix: source

Thrown at src/main/java/redis/clients/jedis/mcf/LagAwareStrategy.java:67

  @Override
  public int getDelayInBetweenProbes() {
    return config.getDelayInBetweenProbes();
  }

  @Override
  public HealthStatus doHealthCheck(Endpoint endpoint) {
    try {
      String bdb = bdbId;
      if (bdb == null) {
        // Try to find BDB that matches the database host
        String dbHost = endpoint.getHost();
        List<RedisRestAPI.BdbInfo> bdbs = redisRestAPI.getBdbs();
        RedisRestAPI.BdbInfo matchingBdb = RedisRestAPI.BdbInfo.findMatchingBdb(bdbs, dbHost);

        if (matchingBdb == null) {
          String msg = String.format("No BDB found matching host '%s' for health check", dbHost);
          log.warn(msg);
          throw new JedisException(msg);
        } else {
          bdb = matchingBdb.getUid();
          log.debug("Found matching BDB '{}' for host '{}'", bdb, dbHost);
          bdbId = bdb;
        }
      }
      if (this.config.isExtendedCheckEnabled()) {
        // Use extended check with lag validation
        if (redisRestAPI.checkBdbAvailability(bdb, true,
          this.config.getAvailabilityLagTolerance().toMillis())) {
          return HealthStatus.HEALTHY;
        }
      } else {
        // Use standard datapath validation only
        if (redisRestAPI.checkBdbAvailability(bdb, false)) {
          return HealthStatus.HEALTHY;
        }
      }

View on GitHub (pinned to 6dac31d4c2)