Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
 /**
   * 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
     }
 }