apache/seatunnel · error · IOException

Failed during source_listing root_stat for protocol=

Error message

Failed during source_listing root_stat for protocol=%s, path=%s

What it means

Logged by FileDiscoveryScanner.scan when obtaining the root path's FileStatus via the filesystem client fails during source listing setup. It names the scheme/protocol and path whose initial stat failed, typically an unreachable or misconfigured filesystem.

Solutions

  1. Verify the path exists and is accessible under the given scheme (hdfs://, s3a://, file://, etc.)
  2. Check filesystem credentials/configuration (Hadoop conf, S3 keys) for the configured protocol
  3. Ensure the filesystem client jar for the protocol is on the classpath
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/reader/FileDiscoveryScanner.java:52 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/b0ba0fb49c0f48c3. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/reader/FileDiscoveryScanner.java:52

    private static final long PROGRESS_INTERVAL = 10_000L;

    private FileDiscoveryScanner() {}

    /** Traverses directories explicitly and applies the filter in the listing callback. */
    static ScanStats scan(
            Path root,
            boolean recursive,
            FileStatusListingSession session,
            FileFilter filter,
            FileStatusListingSession.FileStatusConsumer candidateConsumer)
            throws IOException {
        long started = System.nanoTime();
        ScanStats stats = new ScanStats();
        FileStatus rootStatus;
        try {
            rootStatus = session.getFileStatus(root);
        } catch (IOException e) {
            throw new IOException(
                    "Failed during source_listing root_stat for protocol="
                            + scheme(root)
                            + ", path="
                            + mask(root),
                    e);
        }
        if (rootStatus.isFile()) {
            stats.sourceEntries++;
            process(rootStatus, filter, candidateConsumer, stats);
        } else {
            Deque<Path> directories = new ArrayDeque<>();
            directories.push(rootStatus.getPath());
            while (!directories.isEmpty()) {
                Path directory = directories.pop();
                try {
                    session.list(
                            directory,
                            status -> {

View on GitHub (pinned to cf67b549a7)