Example #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;
 }
Example #2
0
        ~memory_shard() {

            if (edata_iosession >= 0) {
                if (edgedata != NULL) iomgr->managed_release(edata_iosession, &edgedata);
                iomgr->close_session(edata_iosession);
            }
            if (adj_session >= 0) {
                if (adjdata != NULL) iomgr->managed_release(adj_session, &adjdata);
                iomgr->close_session(adj_session);
            }
        }
 void releaseblocks() {
     for(int i=0; i < (int)loadedblocks.size(); i++) {
         delete(loadedblocks[i].dblock);
         iomgr->managed_release(loadedblocks[i].fd, &loadedblocks[i].data);
         iomgr->close_session(loadedblocks[i].fd);
         loadedblocks[i].data = NULL;
         loadedblocks[i].dblock = NULL;
     }
     loadedblocks.clear();
 }
Example #4
0
 virtual ~vertex_data_store() {
     if (!use_mmap) {
         iomgr->close_session(filedesc);
         iomgr->wait_for_writes();
         if (loaded_chunk != NULL) {
             iomgr->managed_release(filedesc, &loaded_chunk);
         }
     } else {
         logstream(LOG_INFO) << "Syncing vertex data..." << std::endl;
         msync(mmap_file, mmap_length, MS_SYNC);
         munmap(mmap_file, mmap_length);
         close(filedesc);
     }
 }
Example #5
0
 virtual ~degree_data() {
     if (!use_mmap) {
         if (loaded_chunk != NULL) {
             iomgr->managed_release(filedesc, &loaded_chunk);
         }        
         iomgr->close_session(filedesc);
     } else {
         if (modified) {
             msync(mmap_file, mmap_length, MS_SYNC);
         }
         munmap(mmap_file, mmap_length);
         close(filedesc);
     }
 }
Example #6
0
 /**
   * Loads a chunk of vertex degrees
   * @param vertex_st first vertex id
   * @param vertex_en last vertex id, inclusive
   */
 virtual void load(vid_t _vertex_st, vid_t _vertex_en) {
     assert(_vertex_en >= _vertex_st);
     vertex_st = _vertex_st;
     vertex_en = _vertex_en;
     
     size_t datasize = (vertex_en - vertex_st + 1) * sizeof(degree);
     size_t datastart = vertex_st * sizeof(degree);
     
     if (loaded_chunk != NULL) {
         iomgr->managed_release(filedesc, &loaded_chunk);
     }
     
     iomgr->managed_malloc(filedesc, &loaded_chunk, datasize, datastart);
     iomgr->managed_preada_now(filedesc, &loaded_chunk, datasize, datastart);
 }
Example #7
0
        /**
         * Loads a chunk of vertex values
         * @param vertex_st first vertex id
         * @param vertex_en last vertex id, inclusive
         */
        virtual void load(vid_t _vertex_st, vid_t _vertex_en) {
            if (!use_mmap) {
                assert(_vertex_en >= _vertex_st);
                vertex_st = _vertex_st;
                vertex_en = _vertex_en;
                
                size_t datasize = (vertex_en - vertex_st + 1)* sizeof(VertexDataType);
                size_t datastart = vertex_st * sizeof(VertexDataType);
                
                if (loaded_chunk != NULL) {
                    iomgr->managed_release(filedesc, &loaded_chunk);
                }
                
                iomgr->managed_malloc(filedesc, &loaded_chunk, datasize, datastart);
                iomgr->managed_preada_now(filedesc, &loaded_chunk, datasize, datastart);
            } else {
                // Do nothing
            }

        }
Example #8
0
 virtual ~degree_data() {
     if (loaded_chunk != NULL) {
         iomgr->managed_release(filedesc, &loaded_chunk);
     }        
     iomgr->close_session(filedesc);
 }