{"record":{"id":"eca9d556931d8f85","repo":"apache/druid","slug":"extension-s-specified-in-druid-extensions-load","errorCode":null,"errorMessage":"Extension [%s] specified in \"druid.extensions.loadList\" didn't exist!?","messagePattern":"Extension \\[(.+?)\\] specified in \"druid\\.extensions\\.loadList\" didn't exist!\\?","errorType":"validation","errorClass":"ISE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/guice/ExtensionsLoader.java","lineNumber":214,"sourceCode":"      final LinkedHashSet<String> validExtensionsToLoad = new LinkedHashSet<>(toLoad);\n      if (validExtensionsToLoad.remove(\"druid-multi-stage-query\")) {\n        log.warn(\n            \"Skipping extension[druid-multi-stage-query] as it is now a core\"\n            + \" capability of Druid. Please remove this extension from your\"\n            + \" configs as it will cause services to fail in future Druid versions.\"\n        );\n      }\n\n      int i = 0;\n      extensionsToLoad = new File[validExtensionsToLoad.size()];\n      for (final String extensionName : validExtensionsToLoad) {\n        File extensionDir = new File(extensionName);\n        if (!extensionDir.isAbsolute()) {\n          extensionDir = new File(rootExtensionsDir, extensionName);\n        }\n\n        if (!extensionDir.isDirectory()) {\n          throw new ISE(\n              \"Extension [%s] specified in \\\"druid.extensions.loadList\\\" didn't exist!?\",\n              extensionDir.getAbsolutePath()\n          );\n        }\n        extensionsToLoad[i++] = extensionDir;\n      }\n    }\n    synchronized (this) {\n      extensionFilesToLoad = extensionsToLoad == null ? new File[]{} : extensionsToLoad;\n    }\n  }\n\n  public File[] getExtensionFilesToLoad()\n  {\n    synchronized (this) {\n      if (extensionFilesToLoad == null) {\n        initializeExtensionFilesToLoad();\n      }","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/guice/ExtensionsLoader.java#L196-L232","documentation":"For each name in druid.extensions.loadList, ExtensionsLoader resolves an absolute path or a subdirectory of the root extensions dir. This ISE is thrown when a listed extension's directory does not exist or is not a directory, i.e. the extension is not installed where Druid expects it.","triggerScenarios":"druid.extensions.loadList contains an entry whose directory is absent under druid.extensions.directory (or whose absolute path does not exist / is not a directory), when starting any Druid process.","commonSituations":"Extension never unpacked into the extensions dir; typo in the loadList name; extension directory renamed after upgrade; loadList copied from another cluster with different installed extensions.","solutions":["Verify the extension exists: `ls <druid.extensions.directory>/<name>` must show a directory with jars","Correct the spelling of the entry in druid.extensions.loadList","Install/unpack the extension into the extensions directory, or use an absolute path in loadList","Remove the entry from loadList if the extension is not actually needed"],"exampleFix":"// before\n-Ddruid.extensions.loadList=\"[\\\"postgresql-metadata-storage\\\", \\\"kafak-ingestion\\\"]\"\n// after\n-Ddruid.extensions.loadList=\"[\\\"postgresql-metadata-storage\\\", \\\"kafka-ingestion\\\"]\"","handlingStrategy":"validation","validationCode":"for (String name : loadList) {\n  File d = new File(name).isAbsolute() ? new File(name) : new File(rootExtDir, name);\n  if (!d.isDirectory()) throw new IllegalStateException(\"Missing extension: \" + d);\n}","typeGuard":null,"tryCatchPattern":"try { startDruid(); } catch (ISE e) {\n  if (e.getMessage().contains(\"didn't exist\")) { installMissingExtension(e); }\n  throw e;\n}","preventionTips":["Automate extension installation so loadList entries always match installed dirs","After upgrades, diff loadList against `ls extensions/`","Use absolute paths only when the path is provisioned on every host"],"tags":["extensions","configuration","file-not-found"],"backgroundTag":"file-not-found","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}