15namespace neograph::program {
17enum class ContinuationState : std::uint8_t {
26 CheckpointIncompatible,
29NEOGRAPH_PROGRAM_API std::string_view to_string(ContinuationState state)
noexcept;
30NEOGRAPH_PROGRAM_API ContinuationState continuation_state_from_string(std::string_view value);
32struct ProgramContinuation {
33 std::string operation_id;
34 ContinuationState state = ContinuationState::Running;
35 std::uint64_t attempt = 0;
37 bool operator==(
const ProgramContinuation&)
const =
default;
45 std::string previous_id;
47 std::string program_version_id;
48 std::string bundle_id;
49 std::uint64_t sequence = 0;
50 ProgramContinuation continuation;
51 RunBudget remaining_budget{};
52 RunBudget inflight_reservation{};
53 std::optional<CoreCheckpointIdentity> core_checkpoint;
54 std::int64_t timestamp_ms = 0;
63 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 1;
66 std::string previous_id;
68 std::string program_version_id;
69 std::string bundle_id;
70 std::uint64_t sequence = 0;
71 ProgramContinuation continuation;
72 RunBudget remaining_budget{};
73 RunBudget inflight_reservation{};
74 std::optional<CoreCheckpointIdentity> core_checkpoint;
75 std::int64_t timestamp_ms = 0;
84enum class JournalAppendResult : std::uint8_t { Appended, AlreadyPresent, Conflict };
86class NEOGRAPH_PROGRAM_API ProgramJournal {
88 virtual ~ProgramJournal() =
default;
90 virtual std::optional<ProgramJournalRecord> latest(std::string_view run_id)
const = 0;
96 virtual JournalAppendResult compare_append(std::string_view expected_previous_id,
97 ProgramJournalRecord record) = 0;
101NEOGRAPH_PROGRAM_API
bool
112 const ProgramUsage& usage)
noexcept;
125 const ProgramUsage& usage)
noexcept;
127class NEOGRAPH_PROGRAM_API InMemoryProgramJournal final :
public ProgramJournal {
129 InMemoryProgramJournal();
130 ~InMemoryProgramJournal()
override;
132 InMemoryProgramJournal(
const InMemoryProgramJournal&) =
delete;
133 InMemoryProgramJournal& operator=(
const InMemoryProgramJournal&) =
delete;
134 InMemoryProgramJournal(InMemoryProgramJournal&&)
noexcept;
135 InMemoryProgramJournal& operator=(InMemoryProgramJournal&&)
noexcept;
137 std::optional<ProgramJournalRecord> latest(std::string_view run_id)
const override;
138 JournalAppendResult compare_append(std::string_view expected_previous_id,
143 std::unique_ptr<Impl> impl_;
@ Cancelled
"cancelled" — cancelled via session/cancel.
@ BudgetExhausted
NG.BudgetExhausted: budget or quota exhaustion.
NEOGRAPH_PROGRAM_API bool is_valid_program_journal_transition(const ProgramJournalRecord &previous, const ProgramJournalRecord &next) noexcept
Shared transition predicate used by atomic Program publication backends.
NEOGRAPH_PROGRAM_API bool is_valid_program_journal_reservation_release(const ProgramJournalRecord &previous, const ProgramJournalRecord &next, const ProgramUsage &usage) noexcept
True when next releases previous's reservation for a CallCore that was interrupted rather than comple...
NEOGRAPH_PROGRAM_API bool is_valid_program_journal_reservation_settlement(const ProgramJournalRecord &previous, const ProgramJournalRecord &next, const ProgramUsage &usage) noexcept
Validates release of an explicit in-flight reservation against measured usage.
Immutable outcome of one Program run attempt.
Mutable construction input for a journal record.
Deep-owned stored journal value.
std::string serialize_canonical() const
Canonical stored representation, including id.