void commit(bool all) { if (edgedata == NULL || only_adjacency) return; assert(is_loaded); metrics_entry cm = m.start_time(); /** * This is an optimization that is relevant only if memory shard * has been used in a case where only out-edges are considered. * Out-edges are in a continuous "window", while in-edges are * scattered all over the shard */ if (all) { iomgr->managed_pwritea_now(edata_iosession, &edgedata, edatafilesize, 0); } else { size_t last = streaming_offset_edge_ptr; if (last == 0){ // rollback last = edatafilesize; } char * bufp = ((char*)edgedata + range_start_edge_ptr); iomgr->managed_pwritea_now(edata_iosession, &bufp, last - range_start_edge_ptr, range_start_edge_ptr); } m.stop_time(cm, "memshard_commit"); iomgr->managed_release(adj_session, &adjdata); iomgr->managed_release(edata_iosession, &edgedata); is_loaded = false; }
void save() { if (!use_mmap) { size_t datasize = (vertex_en - vertex_st + 1) * sizeof(degree); size_t datastart = vertex_st * sizeof(degree); iomgr->managed_pwritea_now(filedesc, &loaded_chunk, datasize, datastart); } }
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); }
/** * Saves the current chunk of vertex values */ virtual void save(bool async=false) { if (!use_mmap) { assert(loaded_chunk != NULL); size_t datasize = (vertex_en - vertex_st + 1) * sizeof(VertexDataType); size_t datastart = vertex_st * sizeof(VertexDataType); if (async) { iomgr->managed_pwritea_async(filedesc, &loaded_chunk, datasize, datastart, false); } else { iomgr->managed_pwritea_now(filedesc, &loaded_chunk, datasize, datastart); } } else { // do nothing } }