From e35ec43ad806e9d9055bcd7c6498fc0c3e49c567 Mon Sep 17 00:00:00 2001 From: Roland Kuehn Date: Sun, 10 Apr 2022 18:58:36 +0200 Subject: [PATCH] Removed atomics in metadata (lead to crashes on aarch64) --- include/concurrency/metadata.h | 29 ++++++++++++++++++----------- include/concurrency/timestamp.h | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/include/concurrency/metadata.h b/include/concurrency/metadata.h index 6bb88b1..cf46e11 100644 --- a/include/concurrency/metadata.h +++ b/include/concurrency/metadata.h @@ -54,8 +54,8 @@ class Metadata : _original_record_identifier(other._original_record_identifier), _begin_timestamp(timestamp::make_infinity()), _end_timestamp(timestamp::make_infinity()) { - _begin_timestamp.store(other._begin_timestamp.load()); - _end_timestamp.store(other._end_timestamp.load()); + _begin_timestamp = other._begin_timestamp; + _end_timestamp = other._end_timestamp; _next_in_version_chain = other._next_in_version_chain; } @@ -66,7 +66,7 @@ class Metadata */ [[nodiscard]] timestamp begin_timestamp() const { - return _begin_timestamp.load(); + return _begin_timestamp; } /** @@ -75,7 +75,7 @@ class Metadata */ [[nodiscard]] timestamp end_timestamp() const { - return _end_timestamp.load(); + return _end_timestamp; } /** @@ -92,7 +92,7 @@ class Metadata */ void begin_timestamp(const timestamp timestamp) { - _begin_timestamp.store(timestamp); + _begin_timestamp = timestamp; } /** @@ -105,7 +105,11 @@ class Metadata */ bool try_begin_timestamp(timestamp old_timestamp, const timestamp timestamp) { - return _begin_timestamp.compare_exchange_strong(old_timestamp, timestamp); + if (_begin_timestamp == old_timestamp){ + _begin_timestamp = timestamp; + return true; + } + return false; } /** @@ -114,7 +118,7 @@ class Metadata */ void end_timestamp(const timestamp timestamp) { - _end_timestamp.store(timestamp); + _end_timestamp = timestamp; } /** @@ -127,7 +131,11 @@ class Metadata */ bool try_end_timestamp(timestamp old_timestamp, const timestamp timestamp) { - return _end_timestamp.compare_exchange_strong(old_timestamp, timestamp); + if (_end_timestamp == old_timestamp){ + _end_timestamp = timestamp; + return true; + } + return false; } /** @@ -147,15 +155,14 @@ class Metadata return _original_record_identifier; } - private: // Pointer to the record in the table space. storage::RecordIdentifier _original_record_identifier; // Timestamp the record begins living. - std::atomic _begin_timestamp; + timestamp _begin_timestamp; // Timestamp the record dies. - std::atomic _end_timestamp; + timestamp _end_timestamp; // Pointer to the next record in version chain. storage::RecordIdentifier _next_in_version_chain; diff --git a/include/concurrency/timestamp.h b/include/concurrency/timestamp.h index 70383d9..a64df24 100644 --- a/include/concurrency/timestamp.h +++ b/include/concurrency/timestamp.h @@ -35,7 +35,7 @@ namespace beedb::concurrency * * The time "0" in combination with the set committed flag indicates "infinity". */ -class alignas(64) timestamp +class timestamp { public: using timestamp_t = std::uint64_t;