{"record":{"id":"262fc827a3971c9b","repo":"apache/seatunnel","slug":"get-plugin-dependency-jar-path-failed-pluginident","errorCode":null,"errorMessage":"get plugin dependency jar path failed, pluginIdentifier: {}","messagePattern":"get plugin dependency jar path failed, pluginIdentifier: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-plugin-discovery/src/main/java/org/apache/seatunnel/plugin/discovery/AbstractPluginDiscovery.java","lineNumber":157,"sourceCode":"                .distinct()\n                .collect(Collectors.toList());\n    }\n\n    @Override\n    public List<URL> getPluginJarAndDependencyPaths(List<PluginIdentifier> pluginIdentifiers) {\n        return pluginIdentifiers.stream()\n                .flatMap(\n                        pluginIdentifier -> {\n                            try {\n                                List<URL> jars = getPluginDependencyJarPaths(pluginIdentifier);\n                                getPluginJarPath(pluginIdentifier).ifPresent(jars::addAll);\n                                log.info(\n                                        \"find connector jar and dependency for {}: {}\",\n                                        pluginIdentifier,\n                                        jars);\n                                return jars.stream();\n                            } catch (IOException e) {\n                                log.warn(\n                                        \"get plugin dependency jar path failed, pluginIdentifier: {}\",\n                                        pluginIdentifier,\n                                        e);\n                                return Stream.empty();\n                            }\n                        })\n                .distinct()\n                .sorted(Comparator.comparing(URL::toString))\n                .collect(Collectors.toList());\n    }\n\n    @Override\n    public List<T> getAllPlugins(List<PluginIdentifier> pluginIdentifiers) {\n        return pluginIdentifiers.stream()\n                .map(this::createPluginInstance)\n                .distinct()\n                .collect(Collectors.toList());\n    }","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-plugin-discovery/src/main/java/org/apache/seatunnel/plugin/discovery/AbstractPluginDiscovery.java#L139-L175","documentation":"AbstractPluginDiscovery.getPluginJarAndDependencyPaths resolves the jar and dependency URLs for a plugin identifier by scanning the plugin directory. If filesystem I/O fails while walking the dir (unreadable directory, broken symlinks, deleted files mid-scan), it logs this warning and returns an empty stream instead of failing job submission.","triggerScenarios":"IOException while scanning the plugin dir for the plugin's jars — e.g., permissions on the connector directory, a jar file removed while the job was starting, or a broken symlink under connectors/.","commonSituations":"Connector jar deleted after install-plugin.sh partially ran; network filesystem (NFS) hiccup on the plugin dir; wrong SEATUNNEL_HOME connectors path with restrictive permissions.","solutions":["Check filesystem permissions and existence of connectors/ and its subdir for the pluginIdentifier","Re-run sh bin/install-plugin.sh to restore missing connector jars","Check the full stack trace in the log to identify which path threw the IOException","Note the job proceeds with an empty jar list — the plugin will then fail to load with a class-not-found later; fix the I/O issue before resubmitting"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"File dir = new File(pluginDir + \"/\" + pluginId);\nif (!Files.isReadable(dir.toPath())) throw new IllegalStateException(\"plugin dir unreadable: \" + dir);","typeGuard":null,"tryCatchPattern":"try { discovery.getPluginJarAndDependencyPaths(id) } catch (Exception e) { /* empty stream means I/O failed; check logs */ }","preventionTips":["Verify connector jars exist on every node before job submission","Run install-plugin.sh after upgrades","Avoid network filesystems for the plugin dir, or ensure stable mounts","Fix permissions on $SEATUNNEL_HOME/connectors"],"tags":["plugin-discovery","filesystem","classpath"],"backgroundTag":"file-read-failed","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}