Commit Graph
282 Commits
Author SHA1 Message Date
cozis d7a2262172 Fix compilation errors of the web interface 2025-11-22 23:59:08 +01:00
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
Claude f856bd0e05 Track actual bytes read in read operations
Add functionality to determine the actual number of bytes read during
read operations, making it possible to detect when a read was truncated
because it went past the end of the file.

Changes:
- Modified file_tree_read() to calculate and return actual_bytes via
  new output parameter
- Updated metadata server to send actual_bytes in READ_SUCCESS messages
- Added bytes_read field to ToastyResult structure
- Modified client to parse, store, and report actual bytes read
- Updated toasty_read() to return the actual number of bytes read
  instead of always returning 0
- Fixed web server to use bytes_read field instead of non-existent
  count field

This allows clients to distinguish between:
- Reading zeros because the file is sparse (has holes)
- Reading past the end of the file (truncated read)
2025-11-22 22:22:43 +00:00
cozis b930ba08e3 Add the ability to associate an opaque user pointer to a ToastyHandle which is then returned in its associated ToastyResult 2025-11-22 23:09:31 +01:00
cozis e1fa3729c6 Drop the MAX_CONNS macro and define TCP_CONNECTION_LIMIT, TCP_POLL_CAPACITY, TCP_EVENT_CAPACITY instead 2025-11-22 22:59:32 +01:00
cozis 582893be70 Add notes on the HTTP's interface semantics 2025-11-22 13:13:10 +01:00
cozis b2b1ed540b Update cHTTP and rewrite web/main.c 2025-11-22 12:30:47 +01:00
cozis 747f851155 Draft of the REST server client using cHTTP 2025-11-20 10:50:55 +01:00
cozis b0313ffcf8 Make toasty client thread-safe and implement toasty_wakeup 2025-11-20 03:51:01 +01:00
cozis 9b40edb56c Minor change to README.md code snippet 2025-11-18 18:57:39 +01:00
cozis 8c98835364 Add entries to TODO.txt 2025-11-18 11:44:53 +01:00
cozis 9d0a8e7de5 Bug fix 2025-11-17 23:30:50 +01:00
Francesco CozzutoandGitHub 2a2537b382 Merge pull request #15 from cozis/metadata-server-WAL
Implement metadata server WAL
2025-11-17 23:19:16 +01:00
cozis c83b56ad90 Bug fix 2025-11-17 23:18:10 +01:00
cozis 690a950e71 Bug fixes 2025-11-17 23:07:50 +01:00
cozis dabd337bb8 Use mock versions of lseek and SetFilePointer in file_system.c 2025-11-17 22:49:41 +01:00
cozis dd74106935 Ignore .wal and .tmp files 2025-11-17 22:49:20 +01:00
Francesco CozzutoandGitHub a1c2e52ec1 Merge pull request #14 from cozis/claude/add-file-seek-mocks-01VBJ2woEagtYiZ4EXZj1ou1
Add mocks for lseek and SetFilePointer
2025-11-17 22:46:04 +01:00
Claude 2ab69e43fc Add mocks for lseek and SetFilePointer
- Added mock_lseek declaration and implementation for Linux
- Added mock_SetFilePointer declaration and implementation for Windows
- Added sys_lseek and sys_SetFilePointer macros for both BUILD_TEST and production modes
- Mocks follow existing pattern: validate descriptors, check type, forward to real functions
- Both mocks properly handle error cases and set errno/SetLastError
2025-11-17 21:44:39 +00:00
cozis 94744ede6f Use mocked version of MoveFileExW in wal.c 2025-11-17 22:34:38 +01:00
Francesco CozzutoandGitHub ba4936f565 Merge pull request #13 from cozis/claude/make-auth-system-018EC3ZfTMZUjJbR5SXo5J7K
Add MoveFileExW mock to system.h/.c
2025-11-17 22:32:09 +01:00
Claude 047203a745 Add MoveFileExW mock to system.h/.c
Add mock implementation for MoveFileExW Windows API function following
the existing pattern in the codebase. The mock forwards calls to the
real Windows API, allowing for future interception in the simulation
framework if needed.
2025-11-17 21:30:24 +00:00
Francesco CozzutoandGitHub 57ec853b4d Merge pull request #12 from cozis/claude/fix-wal-metadata-server-01Dva8AjnwAxq3JKaimzpRiY
Complete implementation of WAL for the metadata server
2025-11-17 22:25:37 +01:00
Claude e195c3b3b2 Fix critical data loss bug in Windows WAL rotation
CRITICAL BUG FIX: The previous Windows implementation had a fatal flaw
where it deleted the old WAL file before renaming, creating a window
where all data could be lost if the rename failed.

Previous (BROKEN) Windows code:
    remove_file_or_dir(wal->file_path);  // Delete old file
    rename(...);  // <-- If this fails, we've lost all data!

New implementation uses MoveFileExW with MOVEFILE_REPLACE_EXISTING:
- Windows: MoveFileExW(..., MOVEFILE_REPLACE_EXISTING) atomically
  replaces the destination file, matching Unix semantics
- Unix/Linux: rename() continues to atomically replace as before
- Both platforms now have atomic file replacement with no data loss window

This ensures durability on both platforms - if the operation fails at
any point, we still have either the old file or the new file, never
losing all data.
2025-11-17 21:17:11 +00:00
Claude e8d1e059c3 Improve WAL robustness: fix lifetime issues and use dynamic allocation
This commit addresses several important robustness issues in the WAL
implementation:

1. Fixed file_path lifetime issue:
   - The file_path argument to wal_open() may not have the same lifetime
     as the WAL structure
   - Now allocate and copy the path string to ensure WAL owns its data
   - Properly free the allocated path in wal_close()
   - Added error cleanup path in wal_open() to prevent memory leaks

2. Replaced static arrays with dynamic allocation in next_entry():
   - Static arrays were not thread-safe and had limited lifetimes
   - Now dynamically allocate path buffer and hash buffers using sys_malloc
   - Caller must free allocated fields after using the entry
   - Added proper error cleanup to free allocations on failure
   - Updated wal_open() to free entry fields after processing each entry

3. Improved swap_file() for cross-platform compatibility:
   - On Unix/Linux: rename() atomically replaces the destination file
   - On Windows: rename() doesn't overwrite, so delete old file first
   - Added platform-specific handling with #ifdef _WIN32
   - Ensures WAL rotation works correctly on both platforms

4. Added system.h include for sys_malloc/sys_free definitions

These changes ensure proper memory management, prevent leaks, and make
the WAL implementation more robust across different platforms.
2025-11-17 21:12:33 +00:00
Claude 52bc1ff450 Complete WAL implementation with file rotation
This commit completes the Write-Ahead Log (WAL) implementation for the
metadata server, including all missing functionality and error fixes:

File System Changes (src/file_system.c):
- Implemented file_set_offset() using lseek (Linux) and SetFilePointer (Windows)
- Implemented file_get_offset() to get current file position

WAL Header Changes (src/wal.h):
- Added file_tree pointer to WAL structure for snapshot serialization
- Added file_path to WAL structure for rotation operations

WAL Implementation (src/wal.c):
- Fixed handle assignment bug in wal_open (was using wal->handle before assignment)
- Fixed missing return statement in append_begin()
- Implemented serialize_callback for writing file tree snapshots to WAL
- Implemented deserialize_callback for reading file tree snapshots from WAL
- Implemented next_entry() to read WAL entries from file during recovery
- Implemented wal_append_write() to write file modifications to WAL
- Implemented swap_file() for complete WAL file rotation:
  * Creates temporary file with new snapshot
  * Writes WAL header and serialized file tree
  * Atomically replaces old WAL file
  * Resets entry counter for new rotation cycle
- Added WAL file initialization for newly created files
- Added helper functions: read_exact, read_u8, read_u16, read_u32, read_u64, write_u32
- Fixed typo in comment (Not -> Now)

The WAL now supports:
- Full crash recovery by replaying logged operations
- Automatic file rotation when entry limit is reached
- Atomic file replacement to ensure durability
- Proper file locking throughout rotation process
2025-11-17 21:02:19 +00:00
cozis fb28e94a83 Continued work on the WAL 2025-11-17 21:52:44 +01:00
cozis 6126a2e932 Draft of wal.c/.h 2025-11-17 15:49:09 +01:00
cozis eaa3f3a8a1 Implement FileTree serialization and deserialization routines 2025-11-17 15:02:22 +01:00
cozis fbcfd80f6d Add TODO.txt entry 2025-11-17 13:08:14 +01:00
cozis b7fc855a80 Move miscellaneous files to the misc folder 2025-11-17 13:06:51 +01:00
cozis cd865a5cdf Simplify Features bullet points to make them easier to read 2025-11-17 13:04:56 +01:00
cozis ec159a2c6a Minor reorganization of test in the README.md 2025-11-17 13:03:01 +01:00
cozis 04a706dad9 Add code snippet to README.md 2025-11-17 13:01:30 +01:00
cozis bc0a95a9a5 Turn TODO.txt in a list of checkboxes 2025-11-17 12:54:06 +01:00
cozis 4accabc4e2 Add Features paragraph to README.md 2025-11-17 12:48:52 +01:00
cozis 09f1ed4b3e Reorganize types in ToastyFS.h by placing them near function interfaces that reference them 2025-11-17 11:50:22 +01:00
cozis 3fc1e12623 Modify Makefile clean rule to remove compilation artifacts by their extension (.exe, .out, ...), not their full name 2025-11-17 11:46:23 +01:00
cozis 46db334a2e Resolve compilation errors and implement blocking API 2025-11-17 11:32:09 +01:00
cozis ee05547981 Fix compilation errors 2025-11-16 16:16:54 +01:00
cozis c6cac0155e Change client.c to match the new ToastyFS.h API 2025-11-16 16:07:03 +01:00
cozis b591408cc9 Fix some build errors 2025-11-16 13:01:08 +01:00
cozis f7dc52ae8f Add example of the blocking API 2025-11-16 12:21:31 +01:00
cozis 58d2d7def3 Polish API in ToastyFS.h 2025-11-16 11:59:58 +01:00
cozis 914419df6d Add timeout logic to toastyfs_wait 2025-11-16 11:59:39 +01:00
cozis 91a2395448 Add README 2025-11-16 02:21:37 +01:00
cozis e1cdc28d4d Rename project to ToastyFS 2025-11-16 02:10:59 +01:00
cozis a4a37b7a36 Minor fixes 2025-11-16 01:18:05 +01:00
cozis 7af1bc27b5 Fix value of CHUNK_SERVER_RECONNECT_TIME by expressing it in seconds, also change it to a runtime-modifiable value 2025-11-15 12:10:26 +01:00
cozis 11054cae86 Add new chunk hashes to the cs_add_list when creating or updating them in the chunk server 2025-11-15 10:55:11 +01:00