67 std::vector<merge_input_cursor>
inputs;
79 std::uint64_t sum = 0;
81 if (extent.bytes > std::numeric_limits<std::uint64_t>::max() - sum)
82 throw std::overflow_error(
"merge checkpoint size");
100 throw std::invalid_argument(
"missing merge publication identity");
103 if (
id.
empty())
throw std::invalid_argument(
"missing merge input identity");
104 for (std::size_t j = 0; j < i; ++j)
106 throw std::invalid_argument(
"duplicate merge input identity");
124 throw std::invalid_argument(
"checkpoint generation mismatch");
129 throw std::invalid_argument(
"checkpoint did not advance");
130 for (std::size_t i = 0; i < candidate.
inputs.size(); ++i)
133 throw std::invalid_argument(
"checkpoint cursor moved backwards");
149 throw std::invalid_argument(
"manifest identity must be fresh");
166 throw std::logic_error(
"published merge requires separate cleanup handling");
177 std::optional<merge_checkpoint> retained = std::nullopt,
182 throw std::invalid_argument(
"uncertain manifest selector needs reconciliation");
183 if (fresh_generation.empty() ||
185 throw std::invalid_argument(
"merge resumption needs a fresh generation");
187 throw std::invalid_argument(
"unrecognized recovery checkpoint");
201 if (
pending_manifest_.empty())
throw std::logic_error(
"no manifest to reconcile");
216 if (
stage_ != wanted)
throw std::logic_error(
"invalid merge publication transition");
220 throw std::invalid_argument(
"durable recovery evidence required");
225 throw std::invalid_argument(
"checkpoint identity mismatch");
226 for (std::size_t i = 0; i < candidate.
inputs.size(); ++i)
228 throw std::invalid_argument(
"checkpoint input version mismatch");
229 for (std::size_t i = 0; i < candidate.
sealed_output.size(); ++i) {
231 if (extent.exact_id.empty() || extent.checksum.empty())
232 throw std::invalid_argument(
"checkpoint extent identity missing");
233 for (std::size_t j = 0; j < i; ++j)
235 throw std::invalid_argument(
"duplicate checkpoint extent");
Definition active_engine.h:18
recovery_evidence
Definition durability.h:29
publication_stage
Definition durability.h:34
persistence_result
Definition durability.h:28
selector_recovery
Definition durability.h:33
Definition durability.h:63
std::vector< merge_input_cursor > inputs
Definition durability.h:67
std::uint64_t sealed_bytes() const
Definition durability.h:78
std::string previous_output_key
Definition durability.h:69
std::string output_generation
Definition durability.h:66
bool operator==(merge_checkpoint const &) const =default
std::vector< sealed_merge_extent > sealed_output
Definition durability.h:68
std::uint64_t completed_work
Definition durability.h:75
merge_identity identity
Definition durability.h:65
std::uint64_t output_records
Definition durability.h:74
std::string metadata_state
Definition durability.h:73
std::string exact_id
Definition durability.h:64
Definition durability.h:36
std::string recipe
Definition durability.h:39
std::vector< std::string > input_versions
Definition durability.h:40
bool operator==(merge_identity const &) const =default
Definition durability.h:93
void accept_recovered_publication(recovery_evidence evidence)
Definition durability.h:198
bool release_old_pins()
Definition durability.h:209
void prepare_manifest(std::string exact_id)
Definition durability.h:145
bool old_pins_retained() const noexcept
Definition durability.h:116
std::string const & durable_manifest() const noexcept
Definition durability.h:112
bool old_pins_retained_
Definition durability.h:248
bool can_release_old_pins() const noexcept
Definition durability.h:117
static void require_evidence(recovery_evidence evidence)
Definition durability.h:218
void complete_manifest(persistence_result result)
Definition durability.h:155
std::optional< merge_checkpoint > checkpoint_
Definition durability.h:246
void require_stage(publication_stage wanted) const
Definition durability.h:215
merge_identity identity_
Definition durability.h:240
publication_stage stage_
Definition durability.h:247
void resume(std::string fresh_generation, recovery_evidence evidence, std::optional< merge_checkpoint > retained=std::nullopt, selector_recovery selector=selector_recovery::unresolved)
Definition durability.h:176
publication_stage stage() const noexcept
Definition durability.h:111
std::vector< std::string > generations_
Definition durability.h:244
std::string generation_
Definition durability.h:242
std::vector< std::string > manifests_
Definition durability.h:245
std::string const & pending_manifest() const noexcept
Definition durability.h:114
std::string durable_manifest_
Definition durability.h:241
void report_io_failure()
Definition durability.h:164
std::string const & output_generation() const noexcept
Definition durability.h:113
void complete_output(persistence_result result)
Definition durability.h:139
void validate_checkpoint(merge_checkpoint const &candidate) const
Definition durability.h:222
std::string pending_manifest_
Definition durability.h:243
merge_publication(merge_identity identity, std::string old_manifest, std::string output_generation)
Definition durability.h:94
std::optional< merge_checkpoint > const & checkpoint() const noexcept
Definition durability.h:115
void complete_checkpoint(merge_checkpoint candidate, persistence_result result)
Definition durability.h:120
Definition durability.h:54
std::string exact_id
Definition durability.h:55
std::string checksum
Definition durability.h:59
std::uint64_t bytes
Definition durability.h:56
bool operator==(sealed_merge_extent const &) const =default