diff --git a/src/storage/v3/indices.cpp b/src/storage/v3/indices.cpp index c3dbe6c97..aeb451128 100644 --- a/src/storage/v3/indices.cpp +++ b/src/storage/v3/indices.cpp @@ -271,8 +271,7 @@ bool CurrentVersionHasLabelProperty(const Vertex &vertex, LabelId label, Propert void LabelIndex::UpdateOnAddLabel(LabelId label, Vertex *vertex, const Transaction &tx) { auto it = index_.find(label); if (it == index_.end()) return; - auto acc = it->second.access(); - acc.insert(Entry{vertex, tx.start_timestamp.logical_id}); + it->second.insert(Entry{vertex, tx.start_timestamp.logical_id}); } bool LabelIndex::CreateIndex(LabelId label, VertexContainer &vertices) { @@ -283,12 +282,11 @@ bool LabelIndex::CreateIndex(LabelId label, VertexContainer &vertices) { return false; } try { - auto acc = it->second.access(); - for ([[maybe_unused]] auto &vertex : vertices) { + for (auto &vertex : vertices) { if (vertex.second.deleted || !VertexHasLabel(vertex, label)) { continue; } - acc.insert(Entry{&vertex, 0}); + it->second.insert(Entry{&vertex, 0}); } } catch (const utils::OutOfMemoryException &) { utils::MemoryTracker::OutOfMemoryExceptionBlocker oom_exception_blocker; @@ -309,7 +307,7 @@ std::vector LabelIndex::ListIndices() const { void LabelIndex::RemoveObsoleteEntries(const uint64_t clean_up_before_timestamp) { for (auto &label_storage : index_) { - auto vertices_acc = label_storage.second.access(); + auto &vertices_acc = label_storage.second; for (auto it = vertices_acc.begin(); it != vertices_acc.end();) { auto next_it = it; ++next_it; @@ -321,7 +319,7 @@ void LabelIndex::RemoveObsoleteEntries(const uint64_t clean_up_before_timestamp) if ((next_it != vertices_acc.end() && it->vertex == next_it->vertex) || !AnyVersionHasLabel(*it->vertex, label_storage.first, clean_up_before_timestamp)) { - vertices_acc.remove(*it); + vertices_acc.erase(*it); } it = next_it; @@ -329,7 +327,7 @@ void LabelIndex::RemoveObsoleteEntries(const uint64_t clean_up_before_timestamp) } } -LabelIndex::Iterable::Iterator::Iterator(Iterable *self, utils::SkipList::Iterator index_iterator) +LabelIndex::Iterable::Iterator::Iterator(Iterable *self, LabelIndexContainer::iterator index_iterator) : self_(self), index_iterator_(index_iterator), current_vertex_accessor_(nullptr, nullptr, nullptr, self_->config_, *self_->vertex_validator_), @@ -344,7 +342,7 @@ LabelIndex::Iterable::Iterator &LabelIndex::Iterable::Iterator::operator++() { } void LabelIndex::Iterable::Iterator::AdvanceUntilValid() { - for (; index_iterator_ != self_->index_accessor_.end(); ++index_iterator_) { + for (; index_iterator_ != self_->index_accessor_->end(); ++index_iterator_) { if (index_iterator_->vertex == current_vertex_) { continue; } @@ -357,10 +355,9 @@ void LabelIndex::Iterable::Iterator::AdvanceUntilValid() { } } -LabelIndex::Iterable::Iterable(utils::SkipList::Accessor index_accessor, LabelId label, View view, - Transaction *transaction, Indices *indices, Config::Items config, - const VertexValidator &vertex_validator) - : index_accessor_(std::move(index_accessor)), +LabelIndex::Iterable::Iterable(LabelIndexContainer &index_accessor, LabelId label, View view, Transaction *transaction, + Indices *indices, Config::Items config, const VertexValidator &vertex_validator) + : index_accessor_(&index_accessor), label_(label), view_(view), transaction_(transaction), @@ -422,7 +419,7 @@ bool LabelPropertyIndex::CreateIndex(LabelId label, PropertyId property, VertexC return false; } try { - for ([[maybe_unused]] auto &vertex : vertices) { + for (auto &vertex : vertices) { if (vertex.second.deleted || !VertexHasLabel(vertex, label)) { continue; } diff --git a/src/storage/v3/indices.hpp b/src/storage/v3/indices.hpp index d8b730a87..ef80625f2 100644 --- a/src/storage/v3/indices.hpp +++ b/src/storage/v3/indices.hpp @@ -30,7 +30,6 @@ namespace memgraph::storage::v3 { struct Indices; class LabelIndex { - private: struct Entry { Vertex *vertex; uint64_t timestamp; @@ -41,17 +40,9 @@ class LabelIndex { bool operator==(const Entry &rhs) const { return vertex == rhs.vertex && timestamp == rhs.timestamp; } }; - struct LabelStorage { - LabelId label; - utils::SkipList vertices; - - bool operator<(const LabelStorage &rhs) const { return label < rhs.label; } - bool operator<(LabelId rhs) const { return label < rhs; } - bool operator==(const LabelStorage &rhs) const { return label == rhs.label; } - bool operator==(LabelId rhs) const { return label == rhs; } - }; - public: + using LabelIndexContainer = std::set; + LabelIndex(Indices *indices, Config::Items config, const VertexValidator &vertex_validator) : indices_(indices), config_(config), vertex_validator_{&vertex_validator} {} @@ -72,12 +63,12 @@ class LabelIndex { class Iterable { public: - Iterable(utils::SkipList::Accessor index_accessor, LabelId label, View view, Transaction *transaction, - Indices *indices, Config::Items config, const VertexValidator &vertex_validator); + Iterable(LabelIndexContainer &index_accessor, LabelId label, View view, Transaction *transaction, Indices *indices, + Config::Items config, const VertexValidator &vertex_validator); class Iterator { public: - Iterator(Iterable *self, utils::SkipList::Iterator index_iterator); + Iterator(Iterable *self, LabelIndexContainer::iterator index_iterator); VertexAccessor operator*() const { return current_vertex_accessor_; } @@ -90,16 +81,16 @@ class LabelIndex { void AdvanceUntilValid(); Iterable *self_; - utils::SkipList::Iterator index_iterator_; + LabelIndexContainer::iterator index_iterator_; VertexAccessor current_vertex_accessor_; Vertex *current_vertex_; }; - Iterator begin() { return {this, index_accessor_.begin()}; } - Iterator end() { return {this, index_accessor_.end()}; } + Iterator begin() { return {this, index_accessor_->begin()}; } + Iterator end() { return {this, index_accessor_->end()}; } private: - utils::SkipList::Accessor index_accessor_; + LabelIndexContainer *index_accessor_; LabelId label_; View view_; Transaction *transaction_; @@ -112,7 +103,7 @@ class LabelIndex { Iterable Vertices(LabelId label, View view, Transaction *transaction) { auto it = index_.find(label); MG_ASSERT(it != index_.end(), "Index for label {} doesn't exist", label.AsUint()); - return {it->second.access(), label, view, transaction, indices_, config_, *vertex_validator_}; + return {it->second, label, view, transaction, indices_, config_, *vertex_validator_}; } int64_t ApproximateVertexCount(LabelId label) { @@ -124,7 +115,7 @@ class LabelIndex { void Clear() { index_.clear(); } private: - std::map> index_; + std::map index_; Indices *indices_; Config::Items config_; const VertexValidator *vertex_validator_;