From 6bd2f486efcae7f9d21173569d467d0b4caf66cc Mon Sep 17 00:00:00 2001 From: Max Wash Date: Thu, 27 Feb 2025 15:53:07 +0000 Subject: [PATCH] cluster-cache: fix put() not allocating space for a cluster in on-disk storage --- src/cluster-cache.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/cluster-cache.c b/src/cluster-cache.c index 97332c5..300c6b7 100644 --- a/src/cluster-cache.c +++ b/src/cluster-cache.c @@ -185,6 +185,30 @@ enum ec3_status cluster_cache_get( return EC3_SUCCESS; } +static enum ec3_status alloc_ondisk_cluster( + struct cluster_cache *cache, + size_t *offset) +{ + char buf[1024] = {0}; + + size_t pos; + b_file_size(cache->c_storage, &pos); + b_file_seek(cache->c_storage, 0, B_SEEK_END); + + for (size_t i = 0; i < cache->c_cluster_size; i += sizeof buf) { + size_t nr_written = 0; + b_file_write( + cache->c_storage, + B_OFFSET_CURRENT, + sizeof buf, + buf, + &nr_written); + } + + *offset = pos; + return EC3_SUCCESS; +} + enum ec3_status cluster_cache_put( struct cluster_cache *cache, size_t cluster_id, @@ -210,7 +234,7 @@ enum ec3_status cluster_cache_put( entry->e_length = len; if (cache->c_storage) { - b_file_size(cache->c_storage, &entry->e_storage_offset); + alloc_ondisk_cluster(cache, &entry->e_storage_offset); } put_cluster(&cache->c_entries, entry);