This commit is contained in:
2025-11-09 14:12:19 +01:00
parent c3e20eceef
commit d2140bdb13
4 changed files with 19 additions and 9 deletions
+2
View File
@@ -1659,12 +1659,14 @@ static void process_event_for_write(TinyDFS *tdfs,
uint16_t path_len = path.len; uint16_t path_len = path.len;
uint32_t num_chunks = num_upload_results; 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_len, sizeof(path_len));
message_write(&writer, path.ptr, path.len); message_write(&writer, path.ptr, path.len);
message_write(&writer, &offset, sizeof(offset)); message_write(&writer, &offset, sizeof(offset));
message_write(&writer, &length, sizeof(length)); message_write(&writer, &length, sizeof(length));
message_write(&writer, &num_chunks, sizeof(num_chunks)); 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++) { for (int i = 0; i < num_upload_results; i++) {
+7 -3
View File
@@ -319,8 +319,9 @@ int file_tree_delete_entity(FileTree *ft, string path)
int file_tree_write(FileTree *ft, string path, int file_tree_write(FileTree *ft, string path,
uint64_t off, uint64_t len, uint32_t num_chunks, uint64_t off, uint64_t len, uint32_t num_chunks,
SHA256 *prev_hashes, SHA256 *hashes, uint32_t chunk_size, SHA256 *prev_hashes,
SHA256 *removed_hashes, int *num_removed) SHA256 *hashes, SHA256 *removed_hashes,
int *num_removed)
{ {
int num_comps; int num_comps;
string comps[MAX_COMPS]; string comps[MAX_COMPS];
@@ -339,6 +340,9 @@ int file_tree_write(FileTree *ft, string path,
File *f = &e->f; 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 first_chunk_index = off / f->chunk_size;
uint64_t last_chunk_index = first_chunk_index + (len - 1) / 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 // Verify prev_hashes match
for (uint64_t i = first_chunk_index; i <= last_chunk_index; i++) 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))) if (memcmp(&f->chunks[i], &prev_hashes[i - first_chunk_index], sizeof(SHA256)))
return -1; return -1; // TODO: error code
// Update chunks // Update chunks
for (uint64_t i = first_chunk_index; i <= last_chunk_index; i++) for (uint64_t i = first_chunk_index; i <= last_chunk_index; i++)
+1 -1
View File
@@ -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_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_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_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); 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); string file_tree_strerror(int code);
+5 -1
View File
@@ -558,6 +558,10 @@ process_client_write(MetadataServer *state, int conn_idx, ByteView msg)
if (!binary_read(&reader, &num_chunks, sizeof(num_chunks))) if (!binary_read(&reader, &num_chunks, sizeof(num_chunks)))
return -1; return -1;
uint32_t chunk_size;
if (!binary_read(&reader, &chunk_size, sizeof(chunk_size)))
return -1;
#define MAX_CHUNKS_PER_WRITE 32 #define MAX_CHUNKS_PER_WRITE 32
typedef struct { 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, 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) { if (ret < 0) {