Files
scylla/db/paxos_grace_seconds_extension.hh
Avi Kivity 69a385fd9d Introduce schema/ module
Schema related files are moved there. This excludes schema files that
also interact with mutations, because the mutation module depends on
the schema. Those files will have to go into a separate module.

Closes #12858
2023-02-15 11:01:50 +02:00

68 lines
1.9 KiB
C++

/*
* Copyright 2020-present ScyllaDB
*/
/*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#pragma once
#include "serializer.hh"
#include "schema/schema.hh"
#include "log.hh"
extern logging::logger dblog;
namespace db {
/**
* \brief Schema extension which represents `paxos_grace_seconds` per-table option.
*
* The option defines the TTL value which used for inserts/updates to the paxos
* tables when LWT queries are used against the base table.
*
* This value is intentionally decoupled from `gc_grace_seconds` since,
* in general, the base table could use completely different strategy to garbage
* collect entries, e.g. can set `gc_grace_seconds` to 0 if it doesn't use
* deletions and hence doesn't need to repair.
*
* However, paxos tables still rely on repair to achieve consistency, and
* the user is required to execute repair within `paxos_grace_seconds`.
*/
class paxos_grace_seconds_extension : public schema_extension {
int32_t _paxos_gc_sec;
public:
static constexpr auto NAME = "paxos_grace_seconds";
paxos_grace_seconds_extension() = default;
explicit paxos_grace_seconds_extension(int32_t seconds)
: _paxos_gc_sec(seconds)
{}
explicit paxos_grace_seconds_extension(const std::map<sstring, sstring>& map) {
on_internal_error(dblog, "Cannot create paxos_grace_seconds_extensions from map");
}
explicit paxos_grace_seconds_extension(bytes b) : _paxos_gc_sec(deserialize(b))
{}
explicit paxos_grace_seconds_extension(const sstring& s)
: _paxos_gc_sec(std::stoi(s))
{}
bytes serialize() const override {
return ser::serialize_to_buffer<bytes>(_paxos_gc_sec);
}
static int32_t deserialize(const bytes_view& buffer) {
return ser::deserialize_from_buffer(buffer, boost::type<int32_t>());
}
int32_t get_paxos_grace_seconds() const {
return _paxos_gc_sec;
}
};
} // namespace db