Files
scylladb/repair/row.hh
Kefu Chai 6914892a1b repair: do not include unused headers
these unused includes are identified by clang-include-cleaner. after
auditing the source files, all of the reports have been confirmed.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#21837
2024-12-20 08:55:56 +02:00

111 lines
3.4 KiB
C++

/*
* Copyright (C) 2022-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#pragma once
#include <optional>
#include "mutation/frozen_mutation.hh"
#include <seastar/core/shared_ptr.hh>
#include "repair/decorated_key_with_hash.hh"
#include "repair/hash.hh"
#include "repair/sync_boundary.hh"
using namespace seastar;
using is_dirty_on_master = bool_class<class is_dirty_on_master_tag>;
class decorated_key_with_hash;
class repair_hash;
class repair_row {
std::optional<frozen_mutation_fragment> _fm;
lw_shared_ptr<const decorated_key_with_hash> _dk_with_hash;
std::optional<repair_sync_boundary> _boundary;
std::optional<repair_hash> _hash;
is_dirty_on_master _dirty_on_master;
lw_shared_ptr<mutation_fragment> _mf;
public:
repair_row() = default;
repair_row(std::optional<frozen_mutation_fragment> fm,
std::optional<position_in_partition> pos,
lw_shared_ptr<const decorated_key_with_hash> dk_with_hash,
std::optional<repair_hash> hash,
is_dirty_on_master dirty_on_master,
lw_shared_ptr<mutation_fragment> mf = {})
: _fm(std::move(fm))
, _dk_with_hash(std::move(dk_with_hash))
, _boundary(pos ? std::optional<repair_sync_boundary>(repair_sync_boundary{_dk_with_hash->dk, std::move(*pos)}) : std::nullopt)
, _hash(std::move(hash))
, _dirty_on_master(dirty_on_master)
, _mf(std::move(mf))
{ }
lw_shared_ptr<mutation_fragment>& get_mutation_fragment_ptr() { return _mf; }
mutation_fragment& get_mutation_fragment() {
if (!_mf) {
throw std::runtime_error("empty mutation_fragment");
}
return *_mf;
}
void reset_mutation_fragment() {
_mf = nullptr;
}
frozen_mutation_fragment& get_frozen_mutation() {
if (!_fm) {
throw std::runtime_error("empty frozen_mutation_fragment");
}
return *_fm;
}
const frozen_mutation_fragment& get_frozen_mutation() const {
if (!_fm) {
throw std::runtime_error("empty frozen_mutation_fragment");
}
return *_fm;
}
const lw_shared_ptr<const decorated_key_with_hash>& get_dk_with_hash() const {
return _dk_with_hash;
}
size_t size() const {
if (!_fm) {
throw std::runtime_error("empty size due to empty frozen_mutation_fragment");
}
auto size = sizeof(repair_row) + _fm->representation().size();
if (_boundary) {
size += _boundary->pk.external_memory_usage() + _boundary->position.external_memory_usage();
}
if (_mf) {
size += _mf->memory_usage();
}
return size;
}
const repair_sync_boundary& boundary() const {
if (!_boundary) {
throw std::runtime_error("empty repair_sync_boundary");
}
return *_boundary;
}
const repair_hash& hash() const {
if (!_hash) {
throw std::runtime_error("empty hash");
}
return *_hash;
}
is_dirty_on_master dirty_on_master() const {
return _dirty_on_master;
}
future<> clear_gently() noexcept {
if (_fm) {
co_await _fm->clear_gently();
_fm.reset();
}
_dk_with_hash = {};
_boundary.reset();
_hash.reset();
_mf = {};
}
};