From d2140bdb13bb63f6ff50f0f09f6da0101b884602 Mon Sep 17 00:00:00 2001 From: Francesco Cozzuto Date: Sun, 9 Nov 2025 14:12:19 +0100 Subject: [PATCH] Progress --- src/client.c | 10 ++++++---- src/file_tree.c | 10 +++++++--- src/file_tree.h | 2 +- src/metadata_server.c | 6 +++++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/client.c b/src/client.c index 18fc53b..eddb6bb 100644 --- a/src/client.c +++ b/src/client.c @@ -1659,12 +1659,14 @@ static void process_event_for_write(TinyDFS *tdfs, uint16_t path_len = path.len; uint32_t num_chunks = num_upload_results; + uint32_t chunk_size = tdfs->operations[opidx].chunk_size; - message_write(&writer, &path_len, sizeof(path_len)); - message_write(&writer, path.ptr, path.len); - message_write(&writer, &offset, sizeof(offset)); - message_write(&writer, &length, sizeof(length)); + message_write(&writer, &path_len, sizeof(path_len)); + message_write(&writer, path.ptr, path.len); + message_write(&writer, &offset, sizeof(offset)); + message_write(&writer, &length, sizeof(length)); message_write(&writer, &num_chunks, sizeof(num_chunks)); + message_write(&writer, &chunk_size, sizeof(chunk_size)); for (int i = 0; i < num_upload_results; i++) { diff --git a/src/file_tree.c b/src/file_tree.c index 87db650..1046fb8 100644 --- a/src/file_tree.c +++ b/src/file_tree.c @@ -319,8 +319,9 @@ int file_tree_delete_entity(FileTree *ft, string path) int file_tree_write(FileTree *ft, string path, uint64_t off, uint64_t len, uint32_t num_chunks, - SHA256 *prev_hashes, SHA256 *hashes, - SHA256 *removed_hashes, int *num_removed) + uint32_t chunk_size, SHA256 *prev_hashes, + SHA256 *hashes, SHA256 *removed_hashes, + int *num_removed) { int num_comps; string comps[MAX_COMPS]; @@ -339,6 +340,9 @@ int file_tree_write(FileTree *ft, string path, File *f = &e->f; + if (f->chunk_size != chunk_size) + return -1; // TODO: error code + uint64_t first_chunk_index = off / f->chunk_size; uint64_t last_chunk_index = first_chunk_index + (len - 1) / f->chunk_size; @@ -363,7 +367,7 @@ int file_tree_write(FileTree *ft, string path, // Verify prev_hashes match for (uint64_t i = first_chunk_index; i <= last_chunk_index; i++) if (memcmp(&f->chunks[i], &prev_hashes[i - first_chunk_index], sizeof(SHA256))) - return -1; + return -1; // TODO: error code // Update chunks for (uint64_t i = first_chunk_index; i <= last_chunk_index; i++) diff --git a/src/file_tree.h b/src/file_tree.h index a81aef4..1f1a719 100644 --- a/src/file_tree.h +++ b/src/file_tree.h @@ -55,7 +55,7 @@ bool file_tree_uses_hash(FileTree *ft, SHA256 hash); int file_tree_list(FileTree *ft, string path, ListItem *items, int max_items); int file_tree_create_entity(FileTree *ft, string path, bool is_dir, uint64_t chunk_size); int file_tree_delete_entity(FileTree *ft, string path); -int file_tree_write(FileTree *ft, string path, uint64_t off, uint64_t len, uint32_t num_chunks, SHA256 *prev_hashes, SHA256 *hashes, SHA256 *removed_hashes, int *num_removed); +int file_tree_write(FileTree *ft, string path, uint64_t off, uint64_t len, uint32_t num_chunks, uint32_t chunk_size, SHA256 *prev_hashes, SHA256 *hashes, SHA256 *removed_hashes, int *num_removed); int file_tree_read(FileTree *ft, string path, uint64_t off, uint64_t len, uint64_t *chunk_size, SHA256 *hashes, int max_hashes); string file_tree_strerror(int code); diff --git a/src/metadata_server.c b/src/metadata_server.c index cd34422..3f69aa7 100644 --- a/src/metadata_server.c +++ b/src/metadata_server.c @@ -558,6 +558,10 @@ process_client_write(MetadataServer *state, int conn_idx, ByteView msg) if (!binary_read(&reader, &num_chunks, sizeof(num_chunks))) return -1; + uint32_t chunk_size; + if (!binary_read(&reader, &chunk_size, sizeof(chunk_size))) + return -1; + #define MAX_CHUNKS_PER_WRITE 32 typedef struct { @@ -628,7 +632,7 @@ process_client_write(MetadataServer *state, int conn_idx, ByteView msg) } int ret = file_tree_write(&state->file_tree, path, offset, length, - num_chunks, old_hashes, new_hashes, removed_hashes, &num_removed); + num_chunks, chunk_size, old_hashes, new_hashes, removed_hashes, &num_removed); if (ret < 0) {