载入中...
搜索中...
未找到
ResourceAccountParticipant.cpp
浏览该文件的文档.
2
3#include <utility>
4
5namespace eve::transaction {
6namespace {
7
8eve::Status lifecycleConflict(std::string message) {
12}
13
14eve::Result<void> forwardFailure(eve::Result<void>& result) { return eve::Result<void>::failure(result.status()); }
15
16template <class T>
17eve::Result<void> forwardFailure(eve::Result<T>& result) {
18 return eve::Result<void>::failure(result.status());
19}
20
21} // namespace
22
25 : account_(account), cost_(std::move(cost)), name_(std::move(name)) {
26 if (name_.empty()) name_ = "resource-debit";
27}
28
30 (void)context;
34 lifecycleConflict("resource debit participant is already in flight or terminal"));
35
36 auto reservation = account_.reserve(cost_);
37 if (!reservation) return forwardFailure(reservation);
38 reservation_ = std::move(reservation).takeValue();
41}
42
44 (void)context;
45 if (state_ != ResourceDebitState::Prepared)
47 lifecycleConflict("resource debit participant has no active reservation to commit"));
48
49 auto receipt = account_.commit(reservation_);
50 if (!receipt) return forwardFailure(receipt);
53}
54
56 (void)context;
57 if (state_ != ResourceDebitState::Prepared)
59 lifecycleConflict("resource debit participant has no active reservation to roll back"));
60
61 auto released = account_.rollback(reservation_);
62 if (!released) return forwardFailure(released);
65}
66
68 (void)context;
71 lifecycleConflict("resource debit participant has no committed debit to compensate"));
72
73 auto restored = account_.credit(cost_);
74 if (!restored) return forwardFailure(restored);
77}
78
79} // namespace eve::transaction
eve::resource::CostSpec cost
eve::resource::IResourceAccount * account
std::string message
std::string name
Transaction participant for an atomic resource debit.
const VegetationPresetContext & context
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
const Status & status() const noexcept
Inspect the structured operation status.
Definition Result.h:269
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Structured status and zero or more diagnostics for an operation.
Definition Status.h:68
static Status failure(StatusCode code, Diagnostic diagnostic)
Construct a failed status with one diagnostic.
Definition Status.h:84
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Immutable canonical multi-resource cost.
Provider-neutral resource account contract.
virtual eve::Result< Receipt > credit(const CostSpec &cost)=0
Atomically credit all items immediately.
virtual eve::Result< Receipt > commit(const Reservation &reservation)=0
Commit one active reservation as an atomic debit.
virtual eve::Result< Reservation > reserve(const CostSpec &cost)=0
Reserve all items of a cost without changing visible balances.
virtual eve::Result< void > rollback(const Reservation &reservation)=0
Release one active reservation without changing balances.
eve::Result< void > prepare(const TransactionContext &context) override
Validate and stage local changes for the transaction.
ResourceDebitParticipant(eve::resource::IResourceAccount &account, eve::resource::CostSpec cost, std::string name="resource-debit")
Bind one debit cost to an account.
eve::Result< void > commit(const TransactionContext &context) override
Publish this participant's staged changes.
eve::Result< void > compensate(const TransactionContext &context) override
Undo an already committed external effect by compensation.
eve::Result< void > rollback(const TransactionContext &context) override
Discard a prepared but not committed stage.
Immutable context shared by every participant of one transaction.
Definition Transaction.h:30