apache/druid · error · IllegalArgumentException (IAE)

Do not know how to load file type at

Error message

Do not know how to load file type at [%s]

What it means

Content-type guard in S3DataSegmentPuller.getSegmentFiles: while listing a segment's S3 prefix, an object was found whose key has a file type the puller does not know how to load (unrecognized extension/index file), so segment download aborts because the expected segment files are missing or misnamed in the bucket.

Solutions

  1. Verify the S3 location actually contains a complete Druid segment (index.zip/druid-*.tar.gz layout).
  2. Check for a partially uploaded or manually moved segment directory.
  3. Re-push the segment from deep storage or re-run the affected task.
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java:130 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/b43b692f103c4296. Report an issue: GitHub.

Appendix: source

Thrown at extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java:130

            .prefix(s3Coords.getPath())
            .build();
        final ListObjectsV2Response list = S3Utils.retryS3Operation(
            () -> s3Client.listObjectsV2(request)
        );
        FileUtils.FileCopyResult copyResult = new FileUtils.FileCopyResult();
        for (S3Object objectSummary : list.contents()) {
          final CloudObjectLocation objectLocation = S3Utils.summaryToCloudObjectLocation(objectSummary, s3Coords.getBucket());
          final URI uri = objectLocation.toUri(S3StorageDruidModule.SCHEME);
          final ByteSource byteSource = getByteSource(uri);
          final File outFile = new File(outDir, Paths.get(objectLocation.getPath()).getFileName().toString());
          outFile.createNewFile();
          final FileUtils.FileCopyResult result = FileUtils.retryCopy(byteSource, outFile, S3Utils.S3RETRY, 3);
          copyResult.addFiles(result.getFiles());
        }
        log.info("Loaded %d bytes from [%s] to [%s]", copyResult.size(), s3Coords.toString(), outDir.getAbsolutePath());
        return copyResult;
      }
      throw new IAE("Do not know how to load file type at [%s]", s3Coords.toUri(S3StorageDruidModule.SCHEME));
    }
    catch (Exception e) {
      try {
        FileUtils.deleteDirectory(outDir);
      }
      catch (IOException ioe) {
        log.warn(
            ioe,
            "Failed to remove output directory [%s] for segment pulled from [%s]",
            outDir.getAbsolutePath(),
            s3Coords.toString()
        );
      }
      throw new SegmentLoadingException(e, e.getMessage());
    }
  }

  @Nonnull

View on GitHub (pinned to 9b90983fd2)