载入中...
搜索中...
未找到
EditorTransactionConsumer.cpp
浏览该文件的文档.
89 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
107 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
129 eve::DiagnosticCode::Failed, std::string("editor command threw during commit: ") + exception.what(),
145 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
159 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
193 : authority_(&authority), specification_(std::move(specification)), operations_(std::move(operations)) {}
207 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
212 eve::DiagnosticCode::Failed, "editor authority participant has no authority", "editor.authority"));
222 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
234 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
245 eve::DiagnosticCode::PreconditionViolation, "editor authority participant has no committed receipt",
258 [[nodiscard]] const std::optional<TransactionReceipt>& receipt() const noexcept { return receipt_; }
322 return eve::Result<TransactionId>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
327 eve::DiagnosticCode::InvalidArgument, "editor transaction id is required", "editor.transaction.id"));
342 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "legacy editor transaction id allocator is exhausted",
353 eve::DiagnosticCode::PreconditionViolation, "no editor transaction is active", "editor.transaction"));
359 eve::DiagnosticCode::Conflict, "commands and authority operations cannot share one editor transaction",
363 eve::DiagnosticCode::Conflict, "a strict command cannot follow a preview command", "editor.transaction"));
369 if (impl_->pending->commands->commands.back()->mergeWith(*command)) return eve::Result<void>::success();
383eve::Result<void> EditorTransactionConsumer::appendPreview(std::unique_ptr<IEditCommand> command) {
386 eve::DiagnosticCode::PreconditionViolation, "no editor transaction is active", "editor.transaction"));
392 eve::DiagnosticCode::Conflict, "commands and authority operations cannot share one editor transaction",
396 eve::DiagnosticCode::Conflict, "a preview command cannot follow a strict command", "editor.transaction"));
483 eve::DiagnosticCode::Failed, std::string("editor command staging allocation threw: ") + exception.what(),
487 eve::DiagnosticCode::Failed, "editor command staging allocation threw", "editor.command.stage"));
524 eve::DiagnosticCode::InvalidArgument, "editor command preview was rejected", "editor.command.preview"));
536 eve::DiagnosticCode::PreconditionViolation, "no editor transaction is active", "editor.transaction"));
543 eve::DiagnosticCode::Conflict, "commands and authority operations cannot share one editor transaction",
551 eve::DiagnosticCode::Conflict, "authority operation target does not match the transaction target",
560 eve::DiagnosticCode::PreconditionViolation, "no editor transaction is active", "editor.transaction"));
617 eve::DiagnosticCode::PreconditionViolation, "no editor transaction is active", "editor.transaction"));
644 return reject(eve::DiagnosticCode::PreconditionViolation, "editor transaction is not awaiting retry",
650 return reject(eve::DiagnosticCode::InvalidArgument, "editor transaction has no work", "editor.transaction");
652 return reject(eve::DiagnosticCode::Unsupported, "authority commit requires an injected authority",
673 return reject(eve::DiagnosticCode::Conflict, "retry must provide the same additional participant set",
688 std::make_unique<AuthorityParticipant>(*impl_->authority, pending.specification, pending.operations);
714 auto result = retainFailure(status, !hasCoordinatorCleanupFailure(status) && !committedAdditional);
745 eve::DiagnosticCode::PreconditionViolation, "no editor transaction is active", "editor.transaction"));
788 eve::DiagnosticCode::NotFound, "there is no editor transaction to undo", "editor.history.undo"));
796 authorityParticipant = std::make_unique<AuthorityParticipant>(*impl_->authority, history.specification,
802 std::make_unique<CommandParticipant>(*history.commands, CommandParticipant::InitialPhase::Committed);
841 eve::DiagnosticCode::NotFound, "there is no editor transaction to redo", "editor.history.redo"));
853 eve::DiagnosticCode::Unsupported, "authority redo requires an injected authority", "editor.authority"));
857 specification.id = TransactionId(specification.id.value() + ".redo." + std::to_string(++impl_->redoSequence));
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
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
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
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
const std::string & value() const noexcept
Returns the exact legacy or canonical compatibility spelling.
Definition Identity.h:362
bool empty() const noexcept
True when no compatibility spelling has been assigned.
Definition Identity.h:374
Final validation and commit boundary for editor mutations.
Definition EditingAuthority.h:16
void clear()
Clears active work and editor-owned undo/redo history.
Definition EditorTransactionConsumer.cpp:903
~EditorTransactionConsumer()
Editor transaction consumer.
eve::Result< TransactionId > begin(TransactionSpec specification)
Begins a transaction with an explicit stable editor identifier.
Definition EditorTransactionConsumer.cpp:320
eve::Result< EditorTransactionRecord > undo()
Compensates the latest editor-owned commit and moves it to redo history.
Definition EditorTransactionConsumer.cpp:781
EditorCommitState state() const noexcept
Returns the explicit state of the active/latest commit lifecycle.
Definition EditorTransactionConsumer.cpp:898
eve::Result< void > append(std::unique_ptr< IEditCommand > command)
Appends a command without publishing its target mutation.
Definition EditorTransactionConsumer.cpp:350
std::size_t redoCount() const noexcept
Returns the number of redo entries.
Definition EditorTransactionConsumer.cpp:897
bool canRedo() const noexcept
Returns whether compensated editor history can be replayed.
Definition EditorTransactionConsumer.cpp:895
const std::vector< eve::Diagnostic > & diagnostics() const noexcept
Returns diagnostics retained from the latest failed commit attempt.
Definition EditorTransactionConsumer.cpp:899
eve::Result< EditorTransactionRecord > retry(std::span< transaction::ITransactionParticipant * > additional={})
Retries a failed commit while retaining its pending work.
Definition EditorTransactionConsumer.cpp:592
eve::Result< void > discard()
Explicitly discards the pending transaction and any preview.
Definition EditorTransactionConsumer.cpp:742
eve::Result< EditorDryRunReport > dryRun() const
Runs structural and authority preflight without publishing state.
Definition EditorTransactionConsumer.cpp:557
eve::Result< void > rollback()
Discards the active transaction and any unpublished preview.
Definition EditorTransactionConsumer.cpp:779
eve::Result< EditorTransactionRecord > commit()
Commits the active editor participant set through Coordinator.
Definition EditorTransactionConsumer.cpp:583
eve::Result< void > setAuthority(IEditAuthority *authority)
Changes the borrowed authority when no transaction is active.
Definition EditorTransactionConsumer.cpp:311
bool active() const noexcept
Returns whether an editor transaction is active.
Definition EditorTransactionConsumer.cpp:893
EditorTransactionConsumer(IEditAuthority *authority=nullptr)
Creates a consumer with an optional non-owning edit authority.
Definition EditorTransactionConsumer.cpp:306
std::size_t undoCount() const noexcept
Returns the number of undo entries.
Definition EditorTransactionConsumer.cpp:896
eve::Result< void > appendPreview(std::unique_ptr< IEditCommand > command)
Compatibility-only append that applies a command as an editor preview.
Definition EditorTransactionConsumer.cpp:383
bool canUndo() const noexcept
Returns whether editor-owned history can be compensated.
Definition EditorTransactionConsumer.cpp:894
eve::Result< TransactionId > beginLegacy(std::string label)
Begins a compatibility command transaction with an allocated identifier.
Definition EditorTransactionConsumer.cpp:339
eve::Result< EditorTransactionRecord > redo()
Re-executes the latest compensated editor-owned transaction.
Definition EditorTransactionConsumer.cpp:834
Coordinates participant lifecycles with deterministic ordering.
Definition Transaction.h:178
Immutable context shared by every participant of one transaction.
Definition Transaction.h:30
Result< T > applied(T value, std::vector< Diagnostic > diagnostics={})
Construct an Applied result with an owning payload and optional diagnostics.
Definition EditingResult.h:43
@ RolledBack
Definition ActionPreviewController.cpp:6
eve::editing::TransactionReceipt TransactionReceipt
Definition EditorProtocol.h:18
eve::editing::TransactionSpec TransactionSpec
Definition EditorProtocol.h:17
EditorCommitState
Lifecycle state of the editor consumer's active commit attempt.
Definition EditorTransactionConsumer.h:48
@ Pending
A transaction is open and has not yet had a commit attempt fail.
@ FailedRetryable
The last attempt failed and retained work may be retried safely.
@ Discarded
The active transaction was explicitly rolled back or discarded.
@ Committed
The active transaction was committed and moved to editor history.
@ Compensated
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ Cancelled
@ Unsupported
@ Failed
@ Conflict
@ Applied
Definition Container.h:602
Side-effect-free information returned by an editor preflight.
Definition EditorTransactionConsumer.h:40
std::size_t commandCount
Definition EditorTransactionConsumer.h:42
std::optional< AuthorityPlan > authorityPlan
Definition EditorTransactionConsumer.h:44
std::size_t operationCount
Definition EditorTransactionConsumer.h:43
TransactionSpec specification
Definition EditorTransactionConsumer.h:41
Definition EditorTransactionConsumer.cpp:284
std::vector< DomainOperation > operations
Definition EditorTransactionConsumer.cpp:287
TransactionSpec specification
Definition EditorTransactionConsumer.cpp:285
std::unique_ptr< CommandBatch > commands
Definition EditorTransactionConsumer.cpp:286
std::optional< TransactionReceipt > authorityReceipt
Definition EditorTransactionConsumer.cpp:288
std::vector< std::string > additionalNames
Definition EditorTransactionConsumer.cpp:280
bool commandModeSet
Definition EditorTransactionConsumer.cpp:278
std::unique_ptr< CommandBatch > commands
Definition EditorTransactionConsumer.cpp:276
bool previewMode
Definition EditorTransactionConsumer.cpp:279
std::uint64_t attemptSequence
Definition EditorTransactionConsumer.cpp:281
std::vector< DomainOperation > operations
Definition EditorTransactionConsumer.cpp:277
TransactionSpec specification
Definition EditorTransactionConsumer.cpp:275
std::vector< HistoryEntry > redo
Definition EditorTransactionConsumer.cpp:296
EditorCommitState state
Definition EditorTransactionConsumer.cpp:300
bool retryBlockedByCommittedParticipant
Definition EditorTransactionConsumer.cpp:303
IEditAuthority * authority
Definition EditorTransactionConsumer.cpp:293
std::optional< Pending > pending
Definition EditorTransactionConsumer.cpp:294
bool retryAllowed
Definition EditorTransactionConsumer.cpp:302
transaction::Coordinator coordinator
Definition EditorTransactionConsumer.cpp:297
std::uint64_t redoSequence
Definition EditorTransactionConsumer.cpp:299
std::uint64_t nextLegacyId
Definition EditorTransactionConsumer.cpp:298
std::vector< eve::Diagnostic > diagnostics
Definition EditorTransactionConsumer.cpp:301
std::vector< HistoryEntry > undo
Definition EditorTransactionConsumer.cpp:295
Impl(IEditAuthority *authorityValue)
Definition EditorTransactionConsumer.cpp:291
Structured result of one editor transaction or compensation.
Definition EditorTransactionConsumer.h:25
transaction::TransactionReceipt coordinator
Definition EditorTransactionConsumer.h:26
TransactionSpec specification
Definition EditorTransactionConsumer.h:27
std::size_t commandCount
Definition EditorTransactionConsumer.h:29
std::optional< eve::editor::TransactionReceipt > authorityReceipt
Definition EditorTransactionConsumer.h:28
std::size_t operationCount
Definition EditorTransactionConsumer.h:30
Observable summary returned after an atomic participant commit.
Definition Transaction.h:97