{"record":{"id":"ea4da8ddcac790d6","repo":"redis/jedis","slug":"multidbconfig-must-not-be-null-for-multidbconnecti","errorCode":null,"errorMessage":"MultiDbConfig must not be NULL for MultiDbConnectionProvider","messagePattern":"MultiDbConfig must not be NULL for MultiDbConnectionProvider","errorType":"validation","errorClass":"JedisValidationException","httpStatus":null,"severity":"error","filePath":"src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java","lineNumber":129,"sourceCode":"  private final Cache cache;\n\n  /**\n   * Constructor for MultiDbConnectionProvider. For the case where client side cache is not used.\n   * Check other constructor where client side cache is demanded.\n   * @param multiDbConfig the multi-database configuration\n   */\n  public MultiDbConnectionProvider(MultiDbConfig multiDbConfig) {\n    this(multiDbConfig, null);\n  }\n\n  /**\n   * Constructor for MultiDbConnectionProvider. For the case where client side cache is used.\n   * @param multiDbConfig the multi-database configuration\n   * @param cache the client-side cache\n   */\n  public MultiDbConnectionProvider(MultiDbConfig multiDbConfig, Cache cache) {\n\n    if (multiDbConfig == null) throw new JedisValidationException(\n        \"MultiDbConfig must not be NULL for MultiDbConnectionProvider\");\n\n    this.multiDbConfig = multiDbConfig;\n    this.cache = cache;\n\n    ////////////// Configure Retry ////////////////////\n    MultiDbConfig.RetryConfig commandRetry = multiDbConfig.getCommandRetry();\n    this.retryConfig = buildRetryConfig(commandRetry);\n\n    ////////////// Configure Circuit Breaker ////////////////////\n    MultiDbConfig.CircuitBreakerConfig failureDetector = multiDbConfig.getFailureDetector();\n    this.circuitBreakerConfig = buildCircuitBreakerConfig(failureDetector, multiDbConfig);\n\n    ////////////// Configure Database Map ////////////////////\n    DatabaseConfig[] databaseConfigs = multiDbConfig.getDatabaseConfigs();\n\n    // Now add databases - health checks will start but events will be queued\n    for (DatabaseConfig config : databaseConfigs) {","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/mcf/MultiDbConnectionProvider.java#L111-L147","documentation":"MultiDbConnectionProvider's cache-aware constructor validates that a non-null MultiDbConfig is supplied; a null config would leave the provider without any database definitions. A JedisValidationException is thrown immediately during construction.","triggerScenarios":"Instantiating new MultiDbConnectionProvider(null, cache) — passing a null MultiDbConfig while supplying a client-side Cache.","commonSituations":"Programmatic construction where the config is built conditionally and ends up null; DI frameworks injecting a missing config bean; typos in variable names passing null.","solutions":["Build a MultiDbConfig via MultiDbConfig.builder(endpoint)...build() before constructing the provider.","Add a null check on your config construction code path to catch the mistake before instantiating the provider.","If using DI, verify the config bean is actually bound/registered."],"exampleFix":"// before\nMultiDbConnectionProvider provider = new MultiDbConnectionProvider(null, cache);\n\n// after\nMultiDbConfig cfg = MultiDbConfig.builder(endpoint).build();\nMultiDbConnectionProvider provider = new MultiDbConnectionProvider(cfg, cache);","handlingStrategy":"validation","validationCode":"if (multiDbConfig == null) {\n  throw new IllegalStateException(\"multiDbConfig must be built before creating provider\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Build MultiDbConfig with its builder immediately before constructing the provider.","Avoid nullable config variables; build config in a single expression.","Add unit tests that construct the provider with real config objects."],"tags":["validation","null-check","config","multi-db"],"backgroundTag":"null-argument","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}