Merge branch 'master' of https://git.cs.tu-dortmund.de/DBIS/beedb
This commit is contained in:
commit
500641eeb4
|
@ -54,9 +54,9 @@ class Metadata
|
||||||
: _original_record_identifier(other._original_record_identifier), _begin_timestamp(timestamp::make_infinity()),
|
: _original_record_identifier(other._original_record_identifier), _begin_timestamp(timestamp::make_infinity()),
|
||||||
_end_timestamp(timestamp::make_infinity())
|
_end_timestamp(timestamp::make_infinity())
|
||||||
{
|
{
|
||||||
_begin_timestamp.store(other._begin_timestamp.load());
|
_begin_timestamp = other._begin_timestamp;
|
||||||
_end_timestamp.store(other._end_timestamp.load());
|
_end_timestamp = other._end_timestamp;
|
||||||
_next_in_version_chain.store(other._next_in_version_chain.load());
|
_next_in_version_chain = other._next_in_version_chain;
|
||||||
}
|
}
|
||||||
|
|
||||||
~Metadata() = default;
|
~Metadata() = default;
|
||||||
|
@ -66,7 +66,7 @@ class Metadata
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] timestamp begin_timestamp() const
|
[[nodiscard]] timestamp begin_timestamp() const
|
||||||
{
|
{
|
||||||
return _begin_timestamp.load();
|
return _begin_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -75,7 +75,7 @@ class Metadata
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] timestamp end_timestamp() const
|
[[nodiscard]] timestamp end_timestamp() const
|
||||||
{
|
{
|
||||||
return _end_timestamp.load();
|
return _end_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,7 +83,7 @@ class Metadata
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] storage::RecordIdentifier next_in_version_chain() const
|
[[nodiscard]] storage::RecordIdentifier next_in_version_chain() const
|
||||||
{
|
{
|
||||||
return _next_in_version_chain.load();
|
return _next_in_version_chain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,7 +92,7 @@ class Metadata
|
||||||
*/
|
*/
|
||||||
void begin_timestamp(const timestamp timestamp)
|
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)
|
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)
|
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)
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -136,7 +144,7 @@ class Metadata
|
||||||
*/
|
*/
|
||||||
void next_in_version_chain(const storage::RecordIdentifier next)
|
void next_in_version_chain(const storage::RecordIdentifier next)
|
||||||
{
|
{
|
||||||
_next_in_version_chain.store(next);
|
_next_in_version_chain = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -147,17 +155,16 @@ class Metadata
|
||||||
return _original_record_identifier;
|
return _original_record_identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
|
||||||
// Pointer to the record in the table space.
|
// Pointer to the record in the table space.
|
||||||
storage::RecordIdentifier _original_record_identifier;
|
storage::RecordIdentifier _original_record_identifier;
|
||||||
|
|
||||||
// Timestamp the record begins living.
|
// Timestamp the record begins living.
|
||||||
std::atomic<timestamp> _begin_timestamp;
|
timestamp _begin_timestamp;
|
||||||
|
|
||||||
// Timestamp the record dies.
|
// Timestamp the record dies.
|
||||||
std::atomic<timestamp> _end_timestamp;
|
timestamp _end_timestamp;
|
||||||
|
|
||||||
// Pointer to the next record in version chain.
|
// Pointer to the next record in version chain.
|
||||||
std::atomic<storage::RecordIdentifier> _next_in_version_chain;
|
storage::RecordIdentifier _next_in_version_chain;
|
||||||
};
|
};
|
||||||
} // namespace beedb::concurrency
|
} // namespace beedb::concurrency
|
||||||
|
|
|
@ -113,4 +113,4 @@ class timestamp
|
||||||
// Time and committed flag (last bit).
|
// Time and committed flag (last bit).
|
||||||
timestamp_t _timestamp_and_committed_flag = 1u;
|
timestamp_t _timestamp_and_committed_flag = 1u;
|
||||||
};
|
};
|
||||||
} // namespace beedb::concurrency
|
} // namespace beedb::concurrency
|
||||||
|
|
|
@ -88,4 +88,4 @@ template <> struct hash<beedb::storage::RecordIdentifier>
|
||||||
return std::hash<std::uint64_t>()(static_cast<std::uint64_t>(rid));
|
return std::hash<std::uint64_t>()(static_cast<std::uint64_t>(rid));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
Loading…
Reference in New Issue