{"record":{"id":"fe18583ecd027a0c","repo":"apache/druid","slug":"config-s-has-been-removed-please-use-config-s","errorCode":null,"errorMessage":"Config[%s] has been removed. Please use config[%s] instead.","messagePattern":"Config\\[(.+?)\\] has been removed\\. Please use config\\[(.+?)\\] instead\\.","errorType":"validation","errorClass":"ISE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java","lineNumber":254,"sourceCode":"          \"druid.processing.merge.awaitShutdownMillis\"\n      );\n      checkDeletedConfigAndThrow(\n          \"druid.processing.merge.pool.parallelism\",\n          \"druid.processing.merge.parallelism\"\n      );\n      checkDeletedConfigAndThrow(\n          \"druid.processing.merge.pool.defaultMaxQueryParallelism\",\n          \"druid.processing.merge.defaultMaxQueryParallelism\"\n      );\n    }\n\n    /**\n     * Checks if a deleted config is present in the properties and throws an ISE.\n     */\n    private void checkDeletedConfigAndThrow(String deletedConfigName, String replaceConfigName)\n    {\n      if (properties.getProperty(deletedConfigName) != null) {\n        throw new ISE(\n            \"Config[%s] has been removed. Please use config[%s] instead.\",\n            deletedConfigName,\n            replaceConfigName\n        );\n      }\n    }\n  }\n\n  @VisibleForTesting\n  public static String getVersionString()\n  {\n    final String version = StartupInjectorBuilder.class.getPackage().getImplementationVersion();\n    if (version == null || version.contains(\"SNAPSHOT\")) {\n      return \"latest\";\n    }\n    return version;\n  }\n}","sourceCodeStart":236,"sourceCodeEnd":272,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java#L236-L272","documentation":"Startup validation checks for processing configs that have been deleted from Druid. If a removed config key is still present in runtime.properties, an ISE names the old key and points to the replacement config.","triggerScenarios":"Passing a deprecated/removed Druid processing property (e.g. an old druid.processing.* key) via runtime.properties or command-line -D flags, detected by validateRemovedProcessingConfigs.","commonSituations":"Upgrading Druid versions while keeping old runtime.properties; copying configs between clusters running different Druid releases.","solutions":["Remove the deleted config key from runtime.properties.","Set the suggested replacement config instead.","Check the Druid release/upgrade notes for the full list of removed configs."],"exampleFix":"// before (runtime.properties)\ndruid.processing.oldBufferConfig=...\n// after (runtime.properties)\ndruid.processing.newBufferConfig=...","handlingStrategy":"validation","validationCode":"for (String key : removedConfigs) {\n  if (props.getProperty(key) != null) { throw new IllegalStateException(key + \" was removed; see Druid upgrade notes\"); }\n}","typeGuard":null,"tryCatchPattern":"try { injector = new StartupInjectorBuilder().build(); } catch (ISE e) { if (e.getMessage().contains(\"has been removed\")) { log.error(\"Replace removed config: {}\", e.getMessage()); } throw e; }","preventionTips":["Diff runtime.properties against the new release's valid-config list when upgrading","Keep config templates per Druid version","Watch startup logs for removal warnings before they become errors"],"tags":["startup","configuration","deprecated","removed-feature"],"backgroundTag":"deprecated-api-usage","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}