Fix PrepareForWrite function in storage V2
Summary: We forgot to update `modified_vertices` in the case when the vertex has an empty version chain. It didn't manifest before because it was impossible for a vertex to have an empty version chain without garbage collection. Reviewers: mferencevic, teon.banek Reviewed By: mferencevic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D2154
This commit is contained in:
parent
f2b23828ab
commit
a7fabe6109
@ -52,12 +52,18 @@ inline void ApplyDeltasForRead(Transaction *transaction, Delta *delta,
|
|||||||
/// transaction) and returns a `bool` value indicating whether the caller can
|
/// transaction) and returns a `bool` value indicating whether the caller can
|
||||||
/// proceed with a write operation.
|
/// proceed with a write operation.
|
||||||
inline bool PrepareForWrite(Transaction *transaction, Vertex *vertex) {
|
inline bool PrepareForWrite(Transaction *transaction, Vertex *vertex) {
|
||||||
if (vertex->delta == nullptr) return true;
|
if (vertex->delta == nullptr) {
|
||||||
|
if (transaction->modified_vertices.empty() ||
|
||||||
|
transaction->modified_vertices.back() != vertex) {
|
||||||
|
transaction->modified_vertices.push_back(vertex);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
auto ts = vertex->delta->timestamp->load(std::memory_order_acquire);
|
auto ts = vertex->delta->timestamp->load(std::memory_order_acquire);
|
||||||
if (ts == transaction->transaction_id || ts < transaction->start_timestamp) {
|
if (ts == transaction->transaction_id || ts < transaction->start_timestamp) {
|
||||||
auto it = transaction->modified_vertices.rbegin();
|
if (transaction->modified_vertices.empty() ||
|
||||||
if (it == transaction->modified_vertices.rend() || *it != vertex) {
|
transaction->modified_vertices.back() != vertex) {
|
||||||
transaction->modified_vertices.push_back(vertex);
|
transaction->modified_vertices.push_back(vertex);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user