diff --git a/src/storage/v2/delta.hpp b/src/storage/v2/delta.hpp index 66d7c37f4..909dc39b3 100644 --- a/src/storage/v2/delta.hpp +++ b/src/storage/v2/delta.hpp @@ -122,6 +122,8 @@ inline bool operator==(const PreviousPtr::Pointer &a, const PreviousPtr::Pointer inline bool operator!=(const PreviousPtr::Pointer &a, const PreviousPtr::Pointer &b) { return !(a == b); } struct Delta { + inline static int deltacount{0}; + enum class Action { /// Use for Vertex and Edge /// Used for disk storage for modifying MVCC logic and storing old key. Storing old key is necessary for diff --git a/src/storage/v2/disk/storage.cpp b/src/storage/v2/disk/storage.cpp index fed6ef282..ca081ca1a 100644 --- a/src/storage/v2/disk/storage.cpp +++ b/src/storage/v2/disk/storage.cpp @@ -577,7 +577,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, View view) { const auto cache_key = label; if (disk_storage->edge_import_status_ == EdgeImportMode::ACTIVE) { - HandleLoadingLabelForEdgeImportCache(cache_key); + HandleLoadingLabelForEdgeImportCache(label); return VerticesIterable( disk_storage->edge_import_mode_cache_->Vertices(cache_key, view, &transaction_, &disk_storage->constraints_)); @@ -603,7 +603,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, View view) { auto gids = merge_with_main_cache(index); LoadVerticesFromDiskLabelIndex(cache_key, gids, *index_deltas, *indexed_vertices); } else { - if (index.contains(cache_key)) { + if (index.contains(cache_key) && view == View::OLD) { merge_with_main_cache(index); } else { auto gids = merge_with_main_cache(index); @@ -612,14 +612,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, View view) { } }; - switch (view) { - case View::OLD: { - cb(label_index_old_, label_index_old_ci_); - } break; - case View::NEW: { - cb(label_index_new_, label_index_new_ci_); - } break; - } + cb(label_index_old_, label_index_old_ci_); return VerticesIterable(AllVerticesIterable(indexed_vertices->access(), &transaction_, view, &storage_->indices_, &storage_->constraints_, storage_->config_.items)); @@ -655,25 +648,6 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p *indexed_vertices, label_property_filter); }; - // auto cb = [&](auto &index) - // { - // if(index.contains(cache_key)) - // { - // merge_with_main_cache(index); - // } - // else - // { - // auto gids = merge_with_main_cache(index); - // const auto disk_label_property_filter = [](const std::string &key, const std::string &label_property_prefix, - // const std::unordered_set &gids, Gid curr_gid) -> bool { - // return key.starts_with(label_property_prefix) && !utils::Contains(gids, curr_gid); - // }; - - // LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, - // disk_label_property_filter); - // } - // }; - // TODO more axuliary ds did not solve the issue, check out the command_id counter/checking per cache solution. const auto disk_label_property_filter = [](const std::string &key, const std::string &label_property_prefix, @@ -681,46 +655,20 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p return key.starts_with(label_property_prefix) && !utils::Contains(gids, curr_gid); }; - switch (view) { - case View::OLD: { - if (transaction_.command_id > label_property_index_old_ci_) { - label_property_index_old_ci_ = transaction_.command_id; + if (transaction_.command_id > label_property_index_old_ci_) { + label_property_index_old_ci_ = transaction_.command_id; - auto gids = merge_with_main_cache(label_property_index_old_); - LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, - disk_label_property_filter); - } else { - if (label_property_index_old_.contains(cache_key)) { - merge_with_main_cache(label_property_index_old_); - } else { - auto gids = merge_with_main_cache(label_property_index_old_); - LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, - disk_label_property_filter); - } - } - } break; - case View::NEW: { - if (transaction_.command_id > label_property_index_new_ci_) { - label_property_index_new_ci_ = transaction_.command_id; - - auto gids = merge_with_main_cache(label_property_index_new_); - LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, - disk_label_property_filter); - } else { - if (label_property_index_new_.contains(cache_key)) { - merge_with_main_cache(label_property_index_new_); - } else { - auto gids = merge_with_main_cache(label_property_index_new_); - const auto disk_label_property_filter = [](const std::string &key, const std::string &label_property_prefix, - const std::unordered_set &gids, Gid curr_gid) -> bool { - return key.starts_with(label_property_prefix) && !utils::Contains(gids, curr_gid); - }; - - LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, - disk_label_property_filter); - } - } - } break; + auto gids = merge_with_main_cache(label_property_index_old_); + LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, + disk_label_property_filter); + } else { + if (label_property_index_old_.contains(cache_key) && view == View::OLD) { + merge_with_main_cache(label_property_index_old_); + } else { + auto gids = merge_with_main_cache(label_property_index_old_); + LoadVerticesFromDiskLabelPropertyIndex(label, property, gids, *index_deltas, *indexed_vertices, + disk_label_property_filter); + } } return VerticesIterable(AllVerticesIterable(indexed_vertices->access(), &transaction_, view, &storage_->indices_, @@ -731,6 +679,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p View view) { auto *disk_storage = static_cast(storage_); const auto cache_key = std::make_tuple(label, property, value); + if (disk_storage->edge_import_status_ == EdgeImportMode::ACTIVE) { HandleLoadingLabelPropertyForEdgeImportCache(label, property); @@ -758,55 +707,20 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p *indexed_vertices, label_property_filter); }; - // auto cb = [&](auto & index) - // { - // if(index.contains(cache_key)) - // { - // merge_with_main_cache(index); - // } - // else - // { - // auto gids = merge_with_main_cache(index); - // LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, - // *indexed_vertices); - // } - // }; + if (transaction_.command_id > label_property_val_index_old_ci_) { + label_property_val_index_old_ci_ = transaction_.command_id; - switch (view) { - case View::OLD: { - if (transaction_.command_id > label_property_val_index_old_ci_) { - label_property_val_index_old_ci_ = transaction_.command_id; - - auto gids = merge_with_main_cache(label_property_val_index_old_); - LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, - *indexed_vertices); - } else { - if (label_property_val_index_old_.contains(cache_key)) { - merge_with_main_cache(label_property_val_index_old_); - } else { - auto gids = merge_with_main_cache(label_property_val_index_old_); - LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, - *indexed_vertices); - } - } - } break; - case View::NEW: { - if (transaction_.command_id > label_property_val_index_new_ci_) { - label_property_val_index_new_ci_ = transaction_.command_id; - - auto gids = merge_with_main_cache(label_property_val_index_new_); - LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, - *indexed_vertices); - } else { - if (label_property_val_index_new_.contains(cache_key)) { - merge_with_main_cache(label_property_val_index_new_); - } else { - auto gids = merge_with_main_cache(label_property_val_index_new_); - LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, - *indexed_vertices); - } - } - } break; + auto gids = merge_with_main_cache(label_property_val_index_old_); + LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, + *indexed_vertices); + } else { + if (label_property_val_index_old_.contains(cache_key) && view == View::OLD) { + merge_with_main_cache(label_property_val_index_old_); + } else { + auto gids = merge_with_main_cache(label_property_val_index_old_); + LoadVerticesFromDiskLabelPropertyIndexWithPointValueLookup(label, property, gids, value, *index_deltas, + *indexed_vertices); + } } return VerticesIterable(AllVerticesIterable(indexed_vertices->access(), &transaction_, view, &storage_->indices_, @@ -819,6 +733,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p View view) { auto *disk_storage = static_cast(storage_); const auto cache_key = std::make_tuple(label, property, lower_bound, upper_bound); + // const auto cache_key = std::make_pair(label, property); if (disk_storage->edge_import_status_ == EdgeImportMode::ACTIVE) { HandleLoadingLabelPropertyForEdgeImportCache(label, property); @@ -847,7 +762,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p LoadVerticesFromDiskLabelPropertyIndexForIntervalSearch(label, property, gids, lower_bound, upper_bound, *index_deltas, *indexed_vertices); } else { - if (index.contains(cache_key)) { + if (index.contains(cache_key) && view == View::OLD) { merge_with_main_cache(index); } else { auto gids = merge_with_main_cache(index); @@ -857,14 +772,7 @@ VerticesIterable DiskStorage::DiskAccessor::Vertices(LabelId label, PropertyId p } }; - switch (view) { - case View::OLD: - cb(label_property_range_index_old_, label_property_range_index_old_ci_); - break; - case View::NEW: - cb(label_property_range_index_new_, label_property_range_index_new_ci_); - break; - } + cb(label_property_range_index_old_, label_property_range_index_old_ci_); return VerticesIterable(AllVerticesIterable(indexed_vertices->access(), &transaction_, view, &storage_->indices_, &storage_->constraints_, storage_->config_.items)); @@ -1260,34 +1168,18 @@ std::optional DiskStorage::DiskAccessor::FindVertex(storage::Gid return *vertex; } - if (auto vertex = find_in_indices(label_index_new_)) { - return *vertex; - } - if (auto vertex = find_in_indices(label_property_index_old_)) { return *vertex; } - if (auto vertex = find_in_indices(label_property_index_new_)) { - return *vertex; - } - if (auto vertex = find_in_indices(label_property_val_index_old_)) { return *vertex; } - if (auto vertex = find_in_indices(label_property_val_index_new_)) { - return *vertex; - } - if (auto vertex = find_in_indices(label_property_range_index_old_)) { return *vertex; } - if (auto vertex = find_in_indices(label_property_range_index_new_)) { - return *vertex; - } - rocksdb::ReadOptions read_opts; auto strTs = utils::StringTimestamp(transaction_.start_timestamp); rocksdb::Slice ts(strTs); @@ -1658,34 +1550,18 @@ DiskStorage::DiskAccessor::ClearDanglingVertices() { return res.GetError(); } - if (auto res = flush_index(label_index_new_); res.HasError()) { - return res.GetError(); - } - if (auto res = flush_index(label_property_index_old_); res.HasError()) { return res.GetError(); } - if (auto res = flush_index(label_property_index_new_); res.HasError()) { - return res.GetError(); - } - if (auto res = flush_index(label_property_val_index_old_); res.HasError()) { return res.GetError(); } - if (auto res = flush_index(label_property_val_index_new_); res.HasError()) { - return res.GetError(); - } - if (auto res = flush_index(label_property_range_index_old_); res.HasError()) { return res.GetError(); } - if (auto res = flush_index(label_property_range_index_new_); res.HasError()) { - return res.GetError(); - } - return {}; } diff --git a/src/storage/v2/disk/storage.hpp b/src/storage/v2/disk/storage.hpp index 25bbeb08b..0e108aff1 100644 --- a/src/storage/v2/disk/storage.hpp +++ b/src/storage/v2/disk/storage.hpp @@ -277,27 +277,15 @@ class DiskStorage final : public Storage { std::map> label_index_old_; uint64_t label_index_old_ci_{transaction_.command_id}; - std::map> label_index_new_; - uint64_t label_index_new_ci_{transaction_.command_id}; - std::map> label_property_index_old_; uint64_t label_property_index_old_ci_{transaction_.command_id}; - std::map> label_property_index_new_; - uint64_t label_property_index_new_ci_{transaction_.command_id}; - std::map> label_property_val_index_old_; uint64_t label_property_val_index_old_ci_{transaction_.command_id}; - std::map> label_property_val_index_new_; - uint64_t label_property_val_index_new_ci_{transaction_.command_id}; - std::map> label_property_range_index_old_; uint64_t label_property_range_index_old_ci_{transaction_.command_id}; - std::map> label_property_range_index_new_; - uint64_t label_property_range_index_new_ci_{transaction_.command_id}; - /// We need them because query context for indexed reading is cleared after the query is done not after the /// transaction is done std::vector> index_deltas_storage_;