prestodb/presto · error · IllegalArgumentException

could not create spill path %s; adjust experimental.spiller-

Error message

could not create spill path %s; adjust experimental.spiller-spill-path config property or filesystem permissions

What it means

Configuration error raised when FileSingleStreamSpillerFactory initializes: none of the configured spill paths could be created. This is a sentinel guard for a server-side setup problem — the query cannot spill memory to disk until the spill path config or filesystem permissions are fixed.

Source

Thrown at presto-main-base/src/main/java/com/facebook/presto/spiller/FileSingleStreamSpillerFactory.java:106

            ListeningExecutorService executor,
            BlockEncodingSerde blockEncodingSerde,
            SpillerStats spillerStats,
            List<Path> spillPaths,
            double maxUsedSpaceThreshold,
            CompressionCodec spillCompressionCodec,
            boolean spillEncryptionEnabled)
    {
        this.serdeFactory = new PagesSerdeFactory(requireNonNull(blockEncodingSerde, "blockEncodingSerde is null"), spillCompressionCodec);
        this.executor = requireNonNull(executor, "executor is null");
        this.spillerStats = requireNonNull(spillerStats, "spillerStats can not be null");
        requireNonNull(spillPaths, "spillPaths is null");
        this.spillPaths = ImmutableList.copyOf(spillPaths);
        spillPaths.forEach(path -> {
            try {
                createDirectories(path);
            }
            catch (IOException e) {
                throw new IllegalArgumentException(
                        format("could not create spill path %s; adjust experimental.spiller-spill-path config property or filesystem permissions", path), e);
            }
            if (!path.toFile().canWrite()) {
                throw new IllegalArgumentException(
                        format("spill path %s is not writable; adjust experimental.spiller-spill-path config property or filesystem permissions", path));
            }
        });
        this.maxUsedSpaceThreshold = maxUsedSpaceThreshold;
        this.spillEncryptionEnabled = spillEncryptionEnabled;
        this.roundRobinIndex = 0;
    }

    @PostConstruct
    public void cleanupOldSpillFiles()
    {
        spillPaths.forEach(FileSingleStreamSpillerFactory::cleanupOldSpillFiles);
    }

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Set experimental.spiller-spill-path to an existing writable directory
  2. Grant write permission on the spill directory to the Presto service user
  3. Create the spill directories on all worker nodes and restart workers
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/spiller/FileSingleStreamSpillerFactory.java:106 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/76e1ec800a4f637e. Report an issue: GitHub.