Skip to content
Back

Unexpected File Persistence Across Appwrite Function Executions

  • 0
  • Self Hosted
Mike Shoebox
3 May, 2025, 02:17

I'm encountering an issue where files created during an Appwrite Function execution persist across subsequent executions. Specifically, when a function writes a file to the filesystem, that file remains available in the next execution, leading to errors.

Expected Behavior:

Each function execution should operate in an isolated environment with a clean filesystem, ensuring no residual data from previous runs.

Observed Behavior:

Files written during one execution are accessible in subsequent executions, indicating that the function's runtime environment is not being reset between runs.

Additional Context:

I am using Appwrite version 1.6.0 in a self-hosted setup. The function in question writes a file to a directory during execution. Upon re-execution, the function detects the existing file and throws an error.

Steps to Reproduce: Deploy a function that writes a file to a specific directory. Execute the function once; it should create the file successfully. Execute the function again; it detects the existing file and throws an error.

Impact: This behavior affects the reliability of functions that depend on a clean execution environment, potentially leading to unexpected errors and data inconsistencies.

Here is the function

TypeScript
import fs from 'fs';
import path from 'path';

async function testParallel() {
    const dirPath = path.join('./data/test-parallel');
    const testFilePath = path.join(dirPath, '/test.txt');

    if (!fs.existsSync(dirPath)) {
        fs.mkdirSync(dirPath, { recursive: true });
    }

    if (fs.existsSync(testFilePath)) {
        throw new Error('Test file already exists');
    }

    // write file
    fs.writeFileSync(testFilePath, 'This is a test file', 'utf8');
    console.log('Test file created at', testFilePath);

    // read file
    const data = fs.readFileSync(testFilePath, 'utf8');
    console.log('Test file data:', data);

    // make the script wait 90 seconds
    await new Promise((resolve) => {
        setTimeout(() => {
            console.log('Waited 90 seconds');
            resolve();
        }, 90000);
    });
}

export { testParallel };
TL;DR
Developers are observing persistent files across Appwrite function executions, leading to errors. The expected isolated execution environment is not being maintained. Solution: Manually clear the directory between function executions to ensure a clean environment.
Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more