void write_block(vdblock &block) { int realsize; uint8_t * outdata; block.dblock->write(&outdata, realsize); std::string blockfname = blockfilename(block.blockid); iomgr->managed_pwritea_now(block.fd, &outdata, realsize, 0); /* Need to write whole block in the compressed regime */ write_block_uncompressed_size(blockfname, realsize); }
void init_block(int blockid) { std::string bfilename = blockfilename(blockid); if (!file_exists(bfilename)) { mkdir(dirname.c_str(), 0777); size_t initsize = verticesperblock * sizeof(typename VertexDataType::sizeword_t); int f = open(bfilename.c_str(), O_RDWR | O_CREAT, S_IROTH | S_IWOTH | S_IWUSR | S_IRUSR); uint8_t * zeros = (uint8_t *) calloc(verticesperblock, sizeof(typename VertexDataType::sizeword_t)); write_compressed(f, zeros, initsize); free(zeros); write_block_uncompressed_size(bfilename, initsize); close(f); } }
void commit_now(stripedio * iomgr) { if (active && data != NULL && writedesc >= 0) { size_t len = ptr-data; if (len > end-offset) len = end-offset; if (is_edata_block) { uint8_t * outdata = NULL; int realsize; dynblock->write(&outdata, realsize); write_block_uncompressed_size(blockfilename, realsize); iomgr->managed_pwritea_now(writedesc, &outdata, realsize, 0); /* Need to write whole block in the compressed regime */ free(outdata); } else { iomgr->managed_pwritea_now(writedesc, &data, len, offset); } } }