Claude 7b0b1acf61 Fix file size tracking to use actual written bytes
Previously, file_size was calculated as num_chunks * chunk_size, which
incorrectly treated the file size as the full capacity of all allocated
chunks. The actual file size should be the offset of the last byte
written plus 1.

Changes:
- Added file_size field to File structure to track actual file extent
- Initialize file_size to 0 when creating new files
- Update file_size in file_tree_write() based on write offset + length
- Modified file_tree_read() to use file_size instead of num_chunks * chunk_size
- Updated serialization/deserialization to handle file_size field

This ensures that actual_bytes calculations correctly reflect the true
file size, not just the allocated chunk capacity.
2025-11-22 22:33:15 +00:00
2025-11-16 02:10:59 +01:00
2025-11-17 22:49:20 +01:00
2025-11-22 12:30:47 +01:00

ToastyFS

ToastyFS is a distributed file system designed for self-hosting, so it aims to be pragmatic, understandable, and robust. You can use ToastyFS to store your files reliably over multiple machines knowing they will be automatically replicated and healed in case of hardware failure. ToastyFS works by running nodes on multiple machines. Clients using the ToastyFS C library can then send file operations to the cluster. Here's a quick example:

#include <ToastyFS.h>

int main(void)
{
    ToastyString addr = TOASTY_STR("127.0.0.1");
    int          port = 8080;
    
    // Connect to cluster
    ToastyFS *toasty = toasty_connect(addr, port);
    
    ToastyString file = TOASTY_STR("/my_file.txt");

    // Create and write to a file
    toasty_create_file(toasty, file, 4096);
    toasty_write(toasty, file, 0, "Hello!", 6);
    
    // Read it back
    char buf[6];
    toasty_read(toasty, file, 0, buf, 6);
    
    // Done!
    toasty_disconnect(toasty);
    return 0;
}

⚠️ Note that ToastyFS is still in early development ⚠️

🎵 Now let's get toasty 🎵

Features

  • Cross-platform (runs on Windows and Linux)
  • Automatic Replication & Self-Healing
  • Automatic content deduplication via internal content-addressing
  • Configurable file chunk sizes
  • Small and understandable

But ToastyFS is still in early development, so here are the missing features:

  • No master replication
  • No authentication or encryption

Testing

ToastyFS is tested by running an in-memory simulation of a cluster with many clients running hundreds of random operations in parallel. The test is run for long periods of times under valgrind or compiled with sanitizers.

S
Description
A simple, fault-tolerant, highly available object storage
Readme MIT
1.1 MiB
Languages
C 98.4%
Shell 1%
Zig 0.4%
Batchfile 0.2%