diff --git a/include/neug/storages/csr/immutable_csr.h b/include/neug/storages/csr/immutable_csr.h index d18cac1f8..2355bd755 100644 --- a/include/neug/storages/csr/immutable_csr.h +++ b/include/neug/storages/csr/immutable_csr.h @@ -75,8 +75,6 @@ class ImmutableCsr : public TypedCsrBase { size_t capacity() const override; - void Close(); - void batch_sort_by_edge_data(timestamp_t ts) override; void batch_delete_vertices(const std::set& src_set, @@ -163,8 +161,6 @@ class SingleImmutableCsr : public TypedCsrBase { size_t capacity() const override; - void Close(); - void batch_sort_by_edge_data(timestamp_t ts) override; void batch_delete_vertices(const std::set& src_set, diff --git a/include/neug/storages/csr/mutable_csr.h b/include/neug/storages/csr/mutable_csr.h index d2f572a97..03e4601cc 100644 --- a/include/neug/storages/csr/mutable_csr.h +++ b/include/neug/storages/csr/mutable_csr.h @@ -82,8 +82,6 @@ class MutableCsr : public TypedCsrBase { size_t capacity() const override; - void Close(); - void batch_sort_by_edge_data(timestamp_t ts) override; void batch_delete_vertices(const std::set& src_set, @@ -242,8 +240,6 @@ class SingleMutableCsr : public TypedCsrBase { size_t capacity() const override; - void Close(); - void batch_sort_by_edge_data(timestamp_t ts) override; void batch_delete_vertices(const std::set& src_set, diff --git a/include/neug/storages/graph/edge_table.h b/include/neug/storages/graph/edge_table.h index 4673fd28f..14286c09d 100644 --- a/include/neug/storages/graph/edge_table.h +++ b/include/neug/storages/graph/edge_table.h @@ -94,8 +94,6 @@ class EdgeTable { return meta_; } - void Close(); - void SortByEdgeData(timestamp_t ts); void BatchDeleteVertices(const std::set& src_set, diff --git a/include/neug/storages/graph/property_graph.h b/include/neug/storages/graph/property_graph.h index 5bb3a5dfd..413e57543 100644 --- a/include/neug/storages/graph/property_graph.h +++ b/include/neug/storages/graph/property_graph.h @@ -339,12 +339,12 @@ class PropertyGraph { inline VertexTable& get_vertex_table(label_t vertex_label) { schema_.ensure_vertex_label_valid(vertex_label); - return vertex_tables_[vertex_label]; + return *vertex_tables_[vertex_label]; } inline const VertexTable& get_vertex_table(label_t vertex_label) const { schema_.ensure_vertex_label_valid(vertex_label); - return vertex_tables_[vertex_label]; + return *vertex_tables_[vertex_label]; } inline EdgeTable& get_edge_table(label_t src_label, label_t dst_label, @@ -355,7 +355,7 @@ class PropertyGraph { THROW_INVALID_ARGUMENT_EXCEPTION( "Edge table for edge label triplet not found"); } - return edge_tables_.at(index); + return *edge_tables_.at(index); } inline const EdgeTable& get_edge_table(label_t src_label, label_t dst_label, @@ -366,7 +366,7 @@ class PropertyGraph { THROW_INVALID_ARGUMENT_EXCEPTION( "Edge table for edge label triplet not found"); } - return edge_tables_.at(index); + return *edge_tables_.at(index); } vid_t LidNum(label_t vertex_label) const; @@ -447,7 +447,7 @@ class PropertyGraph { THROW_INVALID_ARGUMENT_EXCEPTION( "Edge table for edge label triplet not found"); } - return edge_tables_.at(index).get_outgoing_view(ts); + return edge_tables_.at(index)->get_outgoing_view(ts); } /** @@ -492,7 +492,7 @@ class PropertyGraph { THROW_INVALID_ARGUMENT_EXCEPTION( "Edge table for edge label triplet not found"); } - return edge_tables_.at(index).get_incoming_view(ts); + return edge_tables_.at(index)->get_incoming_view(ts); } /** @@ -521,7 +521,7 @@ class PropertyGraph { THROW_INVALID_ARGUMENT_EXCEPTION( "Edge table for edge label triplet not found"); } - return edge_tables_.at(index).get_edge_data_accessor(prop_id); + return edge_tables_.at(index)->get_edge_data_accessor(prop_id); } /** @@ -561,7 +561,7 @@ class PropertyGraph { THROW_INVALID_ARGUMENT_EXCEPTION( "Edge table for edge label triplet not found"); } - return edge_table_it->second.get_edge_data_accessor(prop); + return edge_table_it->second->get_edge_data_accessor(prop); } void loadSchema(const std::string& filename); @@ -574,19 +574,19 @@ class PropertyGraph { "Vertex property column id out of range: " + std::to_string(col_id) + " (label has " + std::to_string(props.size()) + " properties)"); } - return vertex_tables_[label].GetPropertyColumn(col_id); + return vertex_tables_[label]->GetPropertyColumn(col_id); } inline std::shared_ptr GetVertexPropertyColumn( uint8_t label, const std::string& prop) const { schema_.ensure_vertex_label_valid(label); - return vertex_tables_[label].GetPropertyColumn(prop); + return vertex_tables_[label]->GetPropertyColumn(prop); } inline VertexSet GetVertexSet(label_t label, timestamp_t ts = MAX_TIMESTAMP) const { schema_.ensure_vertex_label_valid(label); - return vertex_tables_[label].GetVertexSet(ts); + return vertex_tables_[label]->GetVertexSet(ts); } std::string get_statistics_json() const; @@ -617,8 +617,8 @@ class PropertyGraph { std::shared_ptr ckp_; Schema schema_; std::vector> v_mutex_; - std::vector vertex_tables_; - std::unordered_map edge_tables_; + std::vector> vertex_tables_; + std::unordered_map> edge_tables_; size_t vertex_label_total_count_, edge_label_total_count_; MemoryLevel memory_level_; diff --git a/include/neug/storages/graph/vertex_table.h b/include/neug/storages/graph/vertex_table.h index 6f612b87d..c6eb2dd5f 100644 --- a/include/neug/storages/graph/vertex_table.h +++ b/include/neug/storages/graph/vertex_table.h @@ -160,8 +160,6 @@ class VertexTable { return std::move(v_ts_); } - void Close(); - void SetVertexSchema(std::shared_ptr vertex_schema); std::shared_ptr get_vertex_schema_ptr() const { diff --git a/include/neug/storages/graph/vertex_timestamp.h b/include/neug/storages/graph/vertex_timestamp.h index 2b7c7e61c..20ae42464 100644 --- a/include/neug/storages/graph/vertex_timestamp.h +++ b/include/neug/storages/graph/vertex_timestamp.h @@ -54,8 +54,6 @@ class VertexTimestamp : public Module { void Reset(); - void Clear(); - inline void InsertVertex(vid_t v, timestamp_t ts) { if (v < init_vertex_num_) { if (ts == 0) { @@ -164,8 +162,6 @@ class VertexTimestamp : public Module { const vid_t InitVertexNum() const { return init_vertex_num_; } - void Close(); - private: void load_ts(const std::string& ts_filename); void dump_ts(const std::string& ts_filename); diff --git a/include/neug/utils/id_indexer.h b/include/neug/utils/id_indexer.h index 12f210b77..928634636 100644 --- a/include/neug/utils/id_indexer.h +++ b/include/neug/utils/id_indexer.h @@ -438,11 +438,6 @@ class LFIndexer { return keys_->get_prop(index); } - void Close() { - keys_.reset(); - indices_.reset(); - } - // get keys const ColumnBase& get_keys() const { return *keys_; } diff --git a/include/neug/utils/property/column.h b/include/neug/utils/property/column.h index 6c90f721c..d2dc3d088 100644 --- a/include/neug/utils/property/column.h +++ b/include/neug/utils/property/column.h @@ -93,8 +93,6 @@ class TypedColumn : public ColumnBase { size_ = buffer_->GetDataSize() / sizeof(T); } - void Close() { buffer_.reset(); } - ModuleDescriptor Dump(Checkpoint& ckp) override { ModuleDescriptor desc; desc.set_path(ModuleDescriptor::kDataPath, ckp.Commit(*buffer_)); @@ -261,11 +259,6 @@ class TypedColumn : public ColumnBase { assert(pos_.load() <= data_buffer_->GetDataSize()); } - void Close() { - items_buffer_.reset(); - data_buffer_.reset(); - } - bool is_data_unmodified() const { if (items_buffer_->IsDirty() || items_buffer_->GetPath().empty()) { return false; diff --git a/include/neug/utils/property/table.h b/include/neug/utils/property/table.h index 3c43a75e8..a088ce694 100644 --- a/include/neug/utils/property/table.h +++ b/include/neug/utils/property/table.h @@ -95,8 +95,6 @@ class Table { void ingest(uint32_t index, OutArchive& arc); - void close(); - private: std::unordered_map col_id_map_; std::vector col_names_; diff --git a/src/storages/csr/immutable_csr.cc b/src/storages/csr/immutable_csr.cc index 4a1c8a8d5..83a00d2cf 100644 --- a/src/storages/csr/immutable_csr.cc +++ b/src/storages/csr/immutable_csr.cc @@ -146,13 +146,6 @@ size_t ImmutableCsr::capacity() const { return CsrBase::INFINITE_CAPACITY; } -template -void ImmutableCsr::Close() { - adj_list_buffer_.reset(); - degree_list_buffer_.reset(); - nbr_list_buffer_.reset(); -} - template void ImmutableCsr::batch_sort_by_edge_data(timestamp_t ts) { if (!degree_list_buffer_) { @@ -406,11 +399,6 @@ size_t SingleImmutableCsr::capacity() const { return size(); } -template -void SingleImmutableCsr::Close() { - nbr_list_buffer_.reset(); -} - template void SingleImmutableCsr::batch_sort_by_edge_data(timestamp_t ts) {} diff --git a/src/storages/csr/mutable_csr.cc b/src/storages/csr/mutable_csr.cc index 27371304d..08212e8b4 100644 --- a/src/storages/csr/mutable_csr.cc +++ b/src/storages/csr/mutable_csr.cc @@ -234,15 +234,6 @@ size_t MutableCsr::capacity() const { return CsrBase::INFINITE_CAPACITY; } -template -void MutableCsr::Close() { - locks_.reset(); - adj_list_buffer_.reset(); - degree_list_.reset(); - cap_list_.reset(); - nbr_list_.reset(); -} - template void MutableCsr::batch_sort_by_edge_data(timestamp_t ts) { if (adj_list_buffer_ != nullptr) { @@ -558,11 +549,6 @@ size_t SingleMutableCsr::capacity() const { return vertex_capacity(); } -template -void SingleMutableCsr::Close() { - nbr_list_.reset(); -} - template void SingleMutableCsr::batch_sort_by_edge_data(timestamp_t ts) {} diff --git a/src/storages/graph/edge_table.cc b/src/storages/graph/edge_table.cc index 7498152fe..9a79f0b1b 100644 --- a/src/storages/graph/edge_table.cc +++ b/src/storages/graph/edge_table.cc @@ -553,13 +553,6 @@ void EdgeTable::SetEdgeSchema(std::shared_ptr meta) { meta_ = meta; } -void EdgeTable::Close() { - out_csr_.reset(); - in_csr_.reset(); - if (table_) { - table_->close(); - } -} void EdgeTable::SortByEdgeData(timestamp_t ts) { // TODO @@ -1007,7 +1000,6 @@ void EdgeTable::dropAndCreateNewBundledCSR( new_in_csr.get()); } - table_->close(); table_ = std::make_unique(); table_idx_.store(0); capacity_.store(0); diff --git a/src/storages/graph/property_graph.cc b/src/storages/graph/property_graph.cc index 1a4b2e305..14ab16643 100644 --- a/src/storages/graph/property_graph.cc +++ b/src/storages/graph/property_graph.cc @@ -64,11 +64,11 @@ void PropertyGraph::Clear() { Status PropertyGraph::EnsureCapacity(label_t v_label, size_t capacity) { if (schema_.is_vertex_label_valid(v_label)) { - auto old_cap = vertex_tables_[v_label].Capacity(); + auto old_cap = vertex_tables_[v_label]->Capacity(); if (capacity <= old_cap) { return neug::Status::OK(); } - auto v_new_cap = vertex_tables_[v_label].EnsureCapacity(capacity); + auto v_new_cap = vertex_tables_[v_label]->EnsureCapacity(capacity); for (label_t dst_label = 0; dst_label < vertex_label_total_count_; ++dst_label) { if (!schema_.is_vertex_label_valid(dst_label)) { @@ -77,14 +77,14 @@ Status PropertyGraph::EnsureCapacity(label_t v_label, size_t capacity) { for (label_t e_label = 0; e_label < edge_label_total_count_; ++e_label) { size_t index = schema_.generate_edge_label(v_label, dst_label, e_label); if (edge_tables_.count(index) > 0) { - edge_tables_.at(index).EnsureCapacity( - v_new_cap, vertex_tables_[dst_label].Capacity()); + edge_tables_.at(index)->EnsureCapacity( + v_new_cap, vertex_tables_[dst_label]->Capacity()); } if (v_label != dst_label) { index = schema_.generate_edge_label(dst_label, v_label, e_label); if (edge_tables_.count(index) > 0) { - edge_tables_.at(index).EnsureCapacity( - vertex_tables_[dst_label].Capacity(), v_new_cap); + edge_tables_.at(index)->EnsureCapacity( + vertex_tables_[dst_label]->Capacity(), v_new_cap); } } } @@ -109,11 +109,11 @@ Status PropertyGraph::EnsureCapacity(label_t src_label, label_t dst_label, StatusCode::ERR_INVALID_ARGUMENT, "Edge table for the given edge label triplet does not exist."); } - size_t old_cap = edge_tables_.at(index).Capacity(); + size_t old_cap = edge_tables_.at(index)->Capacity(); if (capacity <= old_cap) { return neug::Status::OK(); } - edge_tables_.at(index).EnsureCapacity(capacity); + edge_tables_.at(index)->EnsureCapacity(capacity); return neug::Status::OK(); } @@ -131,14 +131,14 @@ Status PropertyGraph::EnsureCapacity(label_t src_label, label_t dst_label, StatusCode::ERR_INVALID_ARGUMENT, "Edge table for the given edge label triplet does not exist."); } - edge_tables_.at(index).EnsureCapacity(src_v_cap, dst_v_cap, capacity); + edge_tables_.at(index)->EnsureCapacity(src_v_cap, dst_v_cap, capacity); return neug::Status::OK(); } Status PropertyGraph::BatchAddVertices( label_t v_label, std::shared_ptr supplier) { RETURN_IF_NOT_OK(vertex_label_check(v_label)); - vertex_tables_[v_label].insert_vertices(supplier); + vertex_tables_[v_label]->insert_vertices(supplier); return neug::Status::OK(); } @@ -148,9 +148,9 @@ Status PropertyGraph::BatchAddEdges( RETURN_IF_NOT_OK(edge_triplet_check(src_v_label, dst_v_label, e_label)); size_t index = schema_.generate_edge_label(src_v_label, dst_v_label, e_label); assert(edge_tables_.count(index) > 0); - edge_tables_.at(index).BatchAddEdges( - vertex_tables_.at(src_v_label).get_indexer(), - vertex_tables_.at(dst_v_label).get_indexer(), supplier); + edge_tables_.at(index)->BatchAddEdges( + vertex_tables_.at(src_v_label)->get_indexer(), + vertex_tables_.at(dst_v_label)->get_indexer(), supplier); return neug::Status::OK(); } @@ -223,11 +223,11 @@ Status PropertyGraph::CreateVertexType(const CreateVertexTypeParam& config) { VertexTable fresh_vt(schema_.get_vertex_schema(vertex_label_id)); fresh_vt.Init(*ckp_, memory_level_); if (vertex_label_id < vertex_tables_.size()) { - vertex_tables_[vertex_label_id].Swap(fresh_vt); + vertex_tables_[vertex_label_id]->Swap(fresh_vt); } else { - vertex_tables_.emplace_back(std::move(fresh_vt)); + vertex_tables_.emplace_back(std::make_unique(std::move(fresh_vt))); } - auto& vtable = vertex_tables_[vertex_label_id]; + auto& vtable = *vertex_tables_[vertex_label_id]; vtable.EnsureCapacity(4096); vertex_label_total_count_ = schema_.vertex_label_frontier(); assert(vertex_tables_.size() == vertex_label_total_count_); @@ -307,12 +307,12 @@ Status PropertyGraph::CreateEdgeType(const CreateEdgeTypeParam& config) { schema_.get_edge_schema(src_label_i, dst_label_i, e_label_i); EdgeTable fresh_et(edge_schema); fresh_et.Init(*ckp_, memory_level_); // see CreateVertexType for rationale - edge_tables_.emplace(index, std::move(fresh_et)); + edge_tables_.emplace(index, std::make_unique(std::move(fresh_et))); auto src_v_capacity = std::max( - vertex_tables_[src_label_i].get_indexer().capacity(), (size_t) 4096); + vertex_tables_[src_label_i]->get_indexer().capacity(), (size_t) 4096); auto dst_v_capacity = std::max( - vertex_tables_[dst_label_i].get_indexer().capacity(), (size_t) 4096); - edge_tables_.at(index).EnsureCapacity(src_v_capacity, dst_v_capacity, 4096); + vertex_tables_[dst_label_i]->get_indexer().capacity(), (size_t) 4096); + edge_tables_.at(index)->EnsureCapacity(src_v_capacity, dst_v_capacity, 4096); return neug::Status::OK(); } @@ -348,7 +348,7 @@ Status PropertyGraph::AddVertexProperties( add_default_props.emplace_back(execution::value_to_property(val)); } label_t v_label = schema_.get_vertex_label_id(vertex_type_name); - vertex_tables_[v_label].AddProperties(*ckp_, add_property_names, + vertex_tables_[v_label]->AddProperties(*ckp_, add_property_names, add_property_types, add_default_props); return neug::Status::OK(); } @@ -404,7 +404,7 @@ Status PropertyGraph::AddEdgeProperties(const AddEdgePropertiesParam& config) { for (const auto& val : add_default_property_values) { add_default_props.emplace_back(execution::value_to_property(val)); } - auto& edge_table = edge_tables_.at(index); + auto& edge_table = *edge_tables_.at(index); edge_table.AddProperties(*ckp_, add_property_names, add_property_types, add_default_props); @@ -433,7 +433,7 @@ Status PropertyGraph::RenameVertexProperties( schema_.RenameVertexProperties(vertex_type_name, update_property_names, update_property_renames); label_t v_label = schema_.get_vertex_label_id(vertex_type_name); - vertex_tables_[v_label].RenameProperties(update_property_names, + vertex_tables_[v_label]->RenameProperties(update_property_names, update_property_renames); return neug::Status::OK(); } @@ -474,7 +474,7 @@ Status PropertyGraph::RenameEdgeProperties( "] to [" + dst_type_name + "] does not exist, cannot rename properties."); } - auto& edge_table = edge_tables_.at(index); + auto& edge_table = *edge_tables_.at(index); edge_table.RenameProperties(update_property_names, update_property_renames); return neug::Status::OK(); @@ -511,7 +511,7 @@ Status PropertyGraph::DeleteVertexProperties( label_t v_label = schema_.get_vertex_label_id(vertex_type_name); schema_.DeleteVertexProperties(vertex_type_name, delete_property_names); - vertex_tables_[v_label].DeleteProperties(delete_property_names); + vertex_tables_[v_label]->DeleteProperties(delete_property_names); return neug::Status::OK(); } @@ -566,7 +566,7 @@ Status PropertyGraph::DeleteEdgeProperties( "] to [" + dst_type_name + "] does not exist, cannot delete properties."); } - edge_tables_.at(index).DeleteProperties(*ckp_, delete_property_names); + edge_tables_.at(index)->DeleteProperties(*ckp_, delete_property_names); schema_.DeleteEdgeProperties(src_type_name, dst_type_name, edge_type_name, delete_property_names); return neug::Status::OK(); @@ -579,7 +579,7 @@ Status PropertyGraph::DeleteVertexType(const std::string& vertex_type_name) { Status PropertyGraph::DeleteVertexType(label_t v_label_id) { schema_.DeleteVertexLabel(v_label_id, false); - vertex_tables_[v_label_id].Close(); + vertex_tables_[v_label_id].reset(); for (label_t i = 0; i < vertex_label_total_count_; i++) { if (!schema_.is_vertex_label_valid(i)) { @@ -594,7 +594,6 @@ Status PropertyGraph::DeleteVertexType(label_t v_label_id) { size_t index = schema_.generate_edge_label(v_label_id, i, j); auto it = edge_tables_.find(index); if (it != edge_tables_.end()) { - it->second.Close(); edge_tables_.erase(it); } } @@ -603,7 +602,6 @@ Status PropertyGraph::DeleteVertexType(label_t v_label_id) { size_t index = schema_.generate_edge_label(i, v_label_id, j); auto it = edge_tables_.find(index); if (it != edge_tables_.end()) { - it->second.Close(); edge_tables_.erase(it); } } @@ -628,7 +626,6 @@ Status PropertyGraph::DeleteEdgeType(label_t src_v_label, label_t dst_v_label, schema_.DeleteEdgeLabel(src_v_label, dst_v_label, edge_label, false); auto it = edge_tables_.find(index); if (it != edge_tables_.end()) { - it->second.Close(); edge_tables_.erase(it); } return neug::Status::OK(); @@ -637,7 +634,7 @@ Status PropertyGraph::DeleteEdgeType(label_t src_v_label, label_t dst_v_label, Status PropertyGraph::BatchDeleteVertices(label_t v_label_id, const std::vector& vids) { RETURN_IF_NOT_OK(vertex_label_check(v_label_id)); - vertex_tables_[v_label_id].BatchDeleteVertices(vids); + vertex_tables_[v_label_id]->BatchDeleteVertices(vids); std::set vids_set(vids.begin(), vids.end()); @@ -648,11 +645,11 @@ Status PropertyGraph::BatchDeleteVertices(label_t v_label_id, for (label_t j = 0; j < edge_label_total_count_; j++) { if (schema_.has_edge_triplet(i, v_label_id, j)) { size_t index = schema_.generate_edge_label(i, v_label_id, j); - edge_tables_.at(index).BatchDeleteVertices({}, vids_set); + edge_tables_.at(index)->BatchDeleteVertices({}, vids_set); } if (schema_.has_edge_triplet(v_label_id, i, j)) { size_t index = schema_.generate_edge_label(v_label_id, i, j); - edge_tables_.at(index).BatchDeleteVertices(vids_set, {}); + edge_tables_.at(index)->BatchDeleteVertices(vids_set, {}); } } } @@ -664,7 +661,7 @@ Status PropertyGraph::DeleteVertex(label_t label, const Property& oid, timestamp_t ts) { RETURN_IF_NOT_OK(vertex_label_check(label)); vid_t lid; - if (!vertex_tables_.at(label).get_index(oid, lid, ts)) { + if (!vertex_tables_.at(label)->get_index(oid, lid, ts)) { return Status(StatusCode::ERR_INVALID_ARGUMENT, "Vertex oid does not exist."); } @@ -681,16 +678,16 @@ Status PropertyGraph::DeleteVertex(label_t label, vid_t lid, timestamp_t ts) { if (schema_.has_edge_triplet(i, label, j)) { size_t index = schema_.generate_edge_label(i, label, j); assert(edge_tables_.count(index) > 0); - edge_tables_.at(index).DeleteVertex(true, lid, ts); + edge_tables_.at(index)->DeleteVertex(true, lid, ts); } if (schema_.has_edge_triplet(label, i, j)) { size_t index = schema_.generate_edge_label(label, i, j); assert(edge_tables_.count(index) > 0); - edge_tables_.at(index).DeleteVertex(false, lid, ts); + edge_tables_.at(index)->DeleteVertex(false, lid, ts); } } } - vertex_tables_.at(label).DeleteVertex(lid, ts); + vertex_tables_.at(label)->DeleteVertex(lid, ts); return Status::OK(); } @@ -704,7 +701,7 @@ Status PropertyGraph::DeleteEdge(label_t src_label, vid_t src_lid, return Status(StatusCode::ERR_INVALID_ARGUMENT, "Edge label does not exist."); } - edge_tables_.at(index).DeleteEdge(src_lid, dst_lid, oe_offset, ie_offset, ts); + edge_tables_.at(index)->DeleteEdge(src_lid, dst_lid, oe_offset, ie_offset, ts); return Status::OK(); } @@ -719,7 +716,7 @@ Status PropertyGraph::BatchDeleteEdges( src_vids.push_back(std::get<0>(edge)); dst_vids.push_back(std::get<1>(edge)); } - edge_tables_.at(index).BatchDeleteEdges(src_vids, dst_vids); + edge_tables_.at(index)->BatchDeleteEdges(src_vids, dst_vids); return Status::OK(); } @@ -730,7 +727,7 @@ Status PropertyGraph::BatchDeleteEdges( RETURN_IF_NOT_OK(edge_triplet_check(src_v_label, dst_v_label, edge_label)); size_t index = schema_.generate_edge_label(src_v_label, dst_v_label, edge_label); - edge_tables_.at(index).BatchDeleteEdges(oe_edges, ie_edges); + edge_tables_.at(index)->BatchDeleteEdges(oe_edges, ie_edges); return Status::OK(); } @@ -750,15 +747,15 @@ void PropertyGraph::Open(std::shared_ptr ckp, std::vector vertex_capacities(vertex_label_total_count_, 0); for (size_t i = 0; i < vertex_label_total_count_; ++i) { if (!schema_.is_vertex_label_valid(i)) { - vertex_tables_.emplace_back(); + vertex_tables_.emplace_back(nullptr); continue; } - vertex_tables_.emplace_back(VertexTable::OpenFrom( - *ckp, schema_.get_vertex_schema(i), store, meta, memory_level_)); - auto v_size = vertex_tables_[i].Size(); - vertex_tables_[i].EnsureCapacity(v_size < 4096 ? 4096 + vertex_tables_.emplace_back(std::make_unique(VertexTable::OpenFrom( + *ckp, schema_.get_vertex_schema(i), store, meta, memory_level_))); + auto v_size = vertex_tables_[i]->Size(); + vertex_tables_[i]->EnsureCapacity(v_size < 4096 ? 4096 : v_size + v_size / 4); - vertex_capacities[i] = vertex_tables_[i].Capacity(); + vertex_capacities[i] = vertex_tables_[i]->Capacity(); } for (const auto& [index, edge_schema] : schema_.get_all_edge_schemas()) { @@ -770,7 +767,7 @@ void PropertyGraph::Open(std::shared_ptr ckp, size_t e_cap = e_size < 4096 ? 4096 : e_size + (e_size + 4) / 5; et.EnsureCapacity(vertex_capacities[src_label_i], vertex_capacities[dst_label_i], e_cap); - edge_tables_.emplace(index, std::move(et)); + edge_tables_.emplace(index, std::make_unique(std::move(et))); } v_mutex_.resize(vertex_label_total_count_); @@ -783,8 +780,8 @@ void PropertyGraph::Open(std::shared_ptr ckp, void PropertyGraph::compact_schema() { auto new_schema = schema_.Compact(); - std::vector new_vertex_tables; - std::unordered_map new_edge_tables; + std::vector> new_vertex_tables; + std::unordered_map> new_edge_tables; for (size_t old_v_label = 0; old_v_label != vertex_label_total_count_; ++old_v_label) { @@ -792,13 +789,14 @@ void PropertyGraph::compact_schema() { auto src_name = schema_.get_vertex_label_name(old_v_label); size_t cur_new_label_id = new_schema.get_vertex_label_id_internal(src_name); - new_vertex_tables.emplace_back( + auto new_vt = std::make_unique( new_schema.get_vertex_schema(cur_new_label_id)); - new_vertex_tables.back().Swap(vertex_tables_[old_v_label]); + new_vt->Swap(*vertex_tables_[old_v_label]); // Update the handle to VertexSchema for the new vertex table. // The soft deleted properties should be removed physically in this step. - new_vertex_tables.back().SetVertexSchema( + new_vt->SetVertexSchema( new_schema.get_vertex_schema(cur_new_label_id)); + new_vertex_tables.emplace_back(std::move(new_vt)); } } assert(new_vertex_tables.size() == new_schema.vertex_label_frontier()); @@ -831,12 +829,12 @@ void PropertyGraph::compact_schema() { size_t new_e_label = new_schema.get_edge_label_id_internal(e_name); size_t new_index = new_schema.generate_edge_label( new_src_label, new_dst_label, new_e_label); - new_edge_tables.emplace( - new_index, EdgeTable(new_schema.get_edge_schema( - new_src_label, new_dst_label, new_e_label))); - new_edge_tables.at(new_index).Swap(edge_tables_.at(old_index)); - new_edge_tables.at(new_index).SetEdgeSchema(new_schema.get_edge_schema( + auto new_et = std::make_unique(new_schema.get_edge_schema( new_src_label, new_dst_label, new_e_label)); + new_et->Swap(*edge_tables_.at(old_index)); + new_et->SetEdgeSchema(new_schema.get_edge_schema( + new_src_label, new_dst_label, new_e_label)); + new_edge_tables.emplace(new_index, std::move(new_et)); } } } @@ -864,7 +862,7 @@ void PropertyGraph::Compact(bool compact_csr, float reserve_ratio, for (size_t src_label_i = 0; src_label_i != vertex_label_total_count_; ++src_label_i) { if (schema_.is_vertex_label_valid(src_label_i)) { - vertex_tables_[src_label_i].Compact(ts); + vertex_tables_[src_label_i]->Compact(ts); } else { continue; } @@ -883,7 +881,7 @@ void PropertyGraph::Compact(bool compact_csr, float reserve_ratio, const auto& sort_key_for_nbr = schema_.get_sort_key_for_nbr(src_label_i, dst_label_i, e_label_i); if (edge_tables_.count(index) > 0) { - auto& edge_table = edge_tables_.at(index); + auto& edge_table = *edge_tables_.at(index); edge_table.Compact(compact_csr, sort_key_for_nbr, ts); } } @@ -907,14 +905,14 @@ void PropertyGraph::Dump(std::shared_ptr ckp, bool reopen) { std::vector vertex_capacity(vertex_label_total_count_, 0); for (size_t i = 0; i < vertex_label_total_count_; ++i) { if (schema_.is_vertex_label_valid(i)) { - auto v_size = vertex_tables_[i].LidNum(); + auto v_size = vertex_tables_[i]->LidNum(); EnsureCapacity(i, v_size < 4096 ? 4096 : v_size + v_size / 4); - vertex_capacity[i] = vertex_tables_[i].Capacity(); + vertex_capacity[i] = vertex_tables_[i]->Capacity(); } } for (size_t i = 0; i < vertex_label_total_count_; ++i) { if (schema_.is_vertex_label_valid(i)) { - vertex_tables_[i].DisassembleTo(store, meta, *ckp); + vertex_tables_[i]->DisassembleTo(store, meta, *ckp); } } @@ -938,7 +936,7 @@ void PropertyGraph::Dump(std::shared_ptr ckp, bool reopen) { size_t index = schema_.generate_edge_label(src_label_i, dst_label_i, e_label_i); if (edge_tables_.count(index) > 0) { - auto& edge_table = edge_tables_.at(index); + auto& edge_table = *edge_tables_.at(index); auto e_size = edge_table.PropTableSize(); auto new_cap = e_size < 4096 ? 4096 : e_size + (e_size + 4) / 5; EnsureCapacity(src_label_i, dst_label_i, e_label_i, @@ -973,25 +971,25 @@ Schema& PropertyGraph::mutable_schema() { return schema_; } vid_t PropertyGraph::LidNum(label_t vertex_label) const { schema_.ensure_vertex_label_valid(vertex_label); - return vertex_tables_[vertex_label].LidNum(); + return vertex_tables_[vertex_label]->LidNum(); } vid_t PropertyGraph::VertexNum(label_t vertex_label, timestamp_t ts) const { schema_.ensure_vertex_label_valid(vertex_label); - return vertex_tables_[vertex_label].VertexNum(ts); + return vertex_tables_[vertex_label]->VertexNum(ts); } bool PropertyGraph::IsValidLid(label_t vertex_label, vid_t lid, timestamp_t ts) const { schema_.ensure_vertex_label_valid(vertex_label); - return vertex_tables_[vertex_label].IsValidLid(lid, ts); + return vertex_tables_[vertex_label]->IsValidLid(lid, ts); } size_t PropertyGraph::EdgeNum(label_t src_label, label_t edge_label, label_t dst_label) const { size_t index = schema_.generate_edge_label(src_label, dst_label, edge_label); if (edge_tables_.count(index) > 0) { - return edge_tables_.at(index).EdgeNum(); + return edge_tables_.at(index)->EdgeNum(); } else { return 0; } @@ -1000,19 +998,19 @@ size_t PropertyGraph::EdgeNum(label_t src_label, label_t edge_label, bool PropertyGraph::get_lid(label_t label, const Property& oid, vid_t& lid, timestamp_t ts) const { schema_.ensure_vertex_label_valid(label); - return vertex_tables_[label].get_index(oid, lid, ts); + return vertex_tables_[label]->get_index(oid, lid, ts); } Property PropertyGraph::GetOid(label_t label, vid_t lid, timestamp_t ts) const { schema_.ensure_vertex_label_valid(label); - return vertex_tables_[label].GetOid(lid, ts); + return vertex_tables_[label]->GetOid(lid, ts); } Status PropertyGraph::AddVertex(label_t label, const Property& id, const std::vector& props, vid_t& ret, timestamp_t ts, bool insert_safe) { RETURN_IF_NOT_OK(vertex_label_check(label)); - if (!vertex_tables_[label].AddVertex(id, props, ret, ts, insert_safe)) { + if (!vertex_tables_[label]->AddVertex(id, props, ret, ts, insert_safe)) { return Status(StatusCode::ERR_INVALID_ARGUMENT, "Fail to add vertex."); } return Status::OK(); @@ -1032,7 +1030,7 @@ Status PropertyGraph::AddEdge( std::to_string(edge_label) + ">"); } try { - auto ret = edge_tables_.at(index).AddEdge(src_lid, dst_lid, properties, ts, + auto ret = edge_tables_.at(index)->AddEdge(src_lid, dst_lid, properties, ts, alloc, insert_safe); oe_offset = ret.first; prop = ret.second; @@ -1049,7 +1047,7 @@ Status PropertyGraph::UpdateVertexProperty(label_t v_label, vid_t vid, timestamp_t ts) { assert(prop_id >= 0); RETURN_IF_NOT_OK(vertex_label_check(v_label)); - if (!vertex_tables_[v_label].UpdateProperty(vid, prop_id, value, ts)) { + if (!vertex_tables_[v_label]->UpdateProperty(vid, prop_id, value, ts)) { return Status(StatusCode::ERR_INVALID_ARGUMENT, "Fail to update vertex property."); } @@ -1073,7 +1071,7 @@ Status PropertyGraph::UpdateEdgeProperty(label_t src_v_label, vid_t src_vid, std::to_string(dst_v_label) + ", " + std::to_string(e_label) + ">"); } - edge_tables_.at(index).UpdateEdgeProperty(src_vid, dst_vid, oe_offset, + edge_tables_.at(index)->UpdateEdgeProperty(src_vid, dst_vid, oe_offset, ie_offset, prop_id, value, ts); return neug::Status::OK(); } @@ -1106,7 +1104,7 @@ std::string PropertyGraph::get_statistics_json() const { rapidjson::Value edge_type_statistics(rapidjson::kArrayType); std::unordered_map edge_count_map; for (const auto& iter : edge_tables_) { - edge_count_map.emplace(iter.first, iter.second.EdgeNum()); + edge_count_map.emplace(iter.first, iter.second->EdgeNum()); } for (label_t edge_label = 0; edge_label < edge_label_total_count_; ++edge_label) { diff --git a/src/storages/graph/vertex_table.cc b/src/storages/graph/vertex_table.cc index 20cf1cdd0..afa5232cf 100644 --- a/src/storages/graph/vertex_table.cc +++ b/src/storages/graph/vertex_table.cc @@ -62,15 +62,6 @@ void VertexTable::insert_vertices( } } -void VertexTable::Close() { - indexer_.reset(); - if (table_) { - table_->close(); - } - if (v_ts_) { - v_ts_->Clear(); - } -} void VertexTable::SetVertexSchema( std::shared_ptr vertex_schema) { diff --git a/src/storages/graph/vertex_timestamp.cc b/src/storages/graph/vertex_timestamp.cc index 9a9f171d9..11388acff 100644 --- a/src/storages/graph/vertex_timestamp.cc +++ b/src/storages/graph/vertex_timestamp.cc @@ -113,7 +113,6 @@ void VertexTimestamp::Reset() { } } -void VertexTimestamp::Clear() { Reset(); } timestamp_t VertexTimestamp::RemoveVertex(vid_t v) { if (v >= max_vertex_num_) { @@ -290,7 +289,6 @@ void VertexTimestamp::resize_inserted_vertices(size_t new_size, inserted_vertices_.swap(new_inserted_vertices); } -void VertexTimestamp::Close() { Reset(); } NEUG_REGISTER_MODULE(VertexTimestamp); diff --git a/src/utils/property/table.cc b/src/utils/property/table.cc index 147a58103..76f0851f3 100644 --- a/src/utils/property/table.cc +++ b/src/utils/property/table.cc @@ -28,7 +28,7 @@ namespace neug { Table::Table() {} -Table::~Table() { close(); } +Table::~Table() = default; Table::Table(const std::vector& col_names, const std::vector& property_types) { @@ -265,6 +265,5 @@ void Table::ingest(uint32_t index, OutArchive& arc) { } } -void Table::close() { columns_.clear(); } } // namespace neug