Commit 6bafc25cb6b90b144a794c049e978318b760e5b7

Authored by Imanol-Mikel Barba Sabariego
1 parent 8ea36403

Added failure when chunk cannot be saved

Showing 1 changed file with 9 additions and 3 deletions
... ... @@ -72,14 +72,20 @@ int overwriteChunk(const char* regionFolder, ChunkID chunk, void* chunkData, siz
72 72 void* compressedChunk;
73 73 ssize_t compressedChunkLength = deflateGzip(chunkData,chunkLength,&compressedChunk,(header.compressionType == COMPRESSION_TYPE_ZLIB));
74 74 if(compressedChunkLength > totalChunkLength) {
75   - // insert new 4096 blocks
  75 + // Haven't determined if we can just allocate a new 4KiB sector for the chunk
  76 + // To avoid corrupting the region, let's just make the function fail and retry on another chunk that has
  77 + // free space at the end
  78 + close(fd);
  79 + free(compressedChunk);
  80 + fprintf(stderr,"Not enough free space to overwrite the chunk.\n\nOriginal chunk size (with padding): %d\nNew chunk size:%d\n",totalChunkLength,(unsigned int)compressedChunkLength);
  81 + return -6;
76 82 }
77 83 header.length = __bswap_32((uint32_t)compressedChunkLength+1);
78 84 if(write(fd,&header,sizeof(ChunkHeader)) <= 0) {
79 85 close(fd);
80 86 free(compressedChunk);
81 87 fprintf(stderr,"Unable to read chunk header: %s\n",strerror(errno));
82   - return -6;
  88 + return -7;
83 89 }
84 90 ssize_t nWritten = 0;
85 91 size_t totalWritten = 0;
... ... @@ -92,7 +98,7 @@ int overwriteChunk(const char* regionFolder, ChunkID chunk, void* chunkData, siz
92 98 fprintf(stderr,"Unable to write chunk: %s\n",strerror(errno));
93 99 close(fd);
94 100 free(compressedChunk);
95   - return -7;
  101 + return -8;
96 102 }
97 103 totalWritten += nWritten;
98 104 }
... ...