载入中...
搜索中...
未找到
ArtifactPublish.cpp
浏览该文件的文档.
34 return {bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ, bounds.valid};
123 buffer.view.parts = std::span<const eve::artifact::PartView>(buffer.parts.data(), buffer.parts.size());
142 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact provider participant is not idle", name_ + ".prepare"));
152 return eve::Result<std::unique_ptr<eve::artifact::PreparedPublication>>::failure(eve::Diagnostic::error(
156 return eve::Result<std::unique_ptr<eve::artifact::PreparedPublication>>::failure(eve::Diagnostic::error(
163 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvariantViolation, "artifact provider returned a null prepared stage", name_ + ".prepare"));
170 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact provider participant is not prepared", name_ + ".commit"));
177 [[nodiscard]] eve::Result<void> rollback(const eve::transaction::TransactionContext&) override {
179 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact provider participant is not prepared", name_ + ".rollback"));
186 [[nodiscard]] eve::Result<void> compensate(const eve::transaction::TransactionContext&) override {
188 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact provider participant is not committed", name_ + ".compensate"));
189 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, "artifact provider publication has no inverse compensation", name_ + ".compensate"));
216 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store participant is not idle", "procgen.artifact-store.prepare"));
221 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvariantViolation, "artifact store returned a null prepared stage", "procgen.artifact-store.prepare"));
228 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store participant is not prepared", "procgen.artifact-store.commit"));
235 [[nodiscard]] eve::Result<void> rollback(const eve::transaction::TransactionContext&) override {
237 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store participant is not prepared", "procgen.artifact-store.rollback"));
244 [[nodiscard]] eve::Result<void> compensate(const eve::transaction::TransactionContext&) override {
246 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store participant is not committed", "procgen.artifact-store.compensate"));
247 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, "artifact store publication has no inverse compensation", "procgen.artifact-store.compensate"));
262 ProviderRestoreParticipant(std::string name, eve::artifact::ProviderContract& provider, const eve::Value& state)
269 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact restore participant is not idle", name_ + ".prepare"));
276 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact restore participant is not prepared", name_ + ".commit"));
283 [[nodiscard]] eve::Result<void> rollback(const eve::transaction::TransactionContext&) override {
285 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact restore participant is not prepared", name_ + ".rollback"));
290 [[nodiscard]] eve::Result<void> compensate(const eve::transaction::TransactionContext&) override {
292 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact restore participant is not committed", name_ + ".compensate"));
310 StoreRestoreParticipant(ArtifactStore& store, const eve::Value& state) : store_(&store), state_(&state) {}
316 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store restore participant is not idle", "procgen.artifact-store.restore.prepare"));
323 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store restore participant is not prepared", "procgen.artifact-store.restore.commit"));
330 [[nodiscard]] eve::Result<void> rollback(const eve::transaction::TransactionContext&) override {
332 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store restore participant is not prepared", "procgen.artifact-store.restore.rollback"));
337 [[nodiscard]] eve::Result<void> compensate(const eve::transaction::TransactionContext&) override {
339 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, "artifact store restore participant is not committed", "procgen.artifact-store.restore.compensate"));
361 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, std::string("required artifact adapter is unavailable: ") + name, std::string("artifact.adapters.") + name));
366 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::Failed, std::string("failed to allocate artifact participant: ") + name, std::string("artifact.adapters.") + name));
376eve::transaction::TransactionContext publicationContext(const eve::PersistentId& id, std::string_view operation) {
394 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "failed to materialize artifact publication view"));
402 addProviderParticipant<ISceneArtifactAdapter>(options.scene, "scene", publication.view, owners, participants);
404 auto map = addProviderParticipant<IMapArtifactAdapter>(options.map, "map", publication.view, owners, participants);
406 auto graphics = addProviderParticipant<IGraphicsArtifactAdapter>(options.graphics, "graphics", publication.view,
409 auto physics = addProviderParticipant<IPhysicsArtifactAdapter>(options.physics, "physics", publication.view, owners,
418 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "failed to allocate artifact store participant"));
424 if (!coordinated.ok()) return eve::Result<ArtifactPublishReceipt>::failure(coordinated.status());
440eve::Result<eve::SnapshotEnvelope> ArtifactPublisher::snapshot(const ArtifactSnapshotContext& context) const {
447 eve::Diagnostic::error(eve::DiagnosticCode::InvariantViolation, "artifact snapshot schema id is invalid"));
464 auto graphics = appendProvider("graphics", eve::cap::query<eve::artifact::IGraphicsArtifactAdapter>());
466 auto physics = appendProvider("physics", eve::cap::query<eve::artifact::IPhysicsArtifactAdapter>());
472 return eve::makeSnapshotEnvelope("eve.artifact.publication", *schema, eve::SchemaVersion(1), context.instanceId,
485 eve::Diagnostic::error(eve::DiagnosticCode::UnknownVersion, "unsupported artifact publication snapshot"));
488 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "artifact snapshot restore requires an empty store"));
493 const auto* providerStates = providerStateValue ? providerStateValue->getIf<eve::Value::Object>() : nullptr;
498 eve::artifact::ISceneArtifactAdapter* scene = eve::cap::query<eve::artifact::ISceneArtifactAdapter>();
499 eve::artifact::IMapArtifactAdapter* map = eve::cap::query<eve::artifact::IMapArtifactAdapter>();
500 eve::artifact::IGraphicsArtifactAdapter* graphics = eve::cap::query<eve::artifact::IGraphicsArtifactAdapter>();
501 eve::artifact::IPhysicsArtifactAdapter* physics = eve::cap::query<eve::artifact::IPhysicsArtifactAdapter>();
502 if ((scene && !scene->emptyState()) || (map && !map->emptyState()) || (graphics && !graphics->emptyState()) ||
512 if (entry.first != "scene" && entry.first != "map" && entry.first != "graphics" && entry.first != "physics")
514 eve::Diagnostic::error(eve::DiagnosticCode::ParseError, "unknown artifact publication provider state"));
528 const auto addRestore = [&owners, &participants](const char* name, eve::artifact::ProviderContract* provider,
540 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "failed to allocate artifact restore participants"));
550 eve::DiagnosticCode::InvariantViolation, "artifact restore coordinator returned a non-committed receipt"));
std::vector< std::vector< eve::artifact::Point > > pointBuffers
Definition ArtifactPublish.cpp:17
Capability-driven, transactional publication of generated artifacts.
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 std::optional< LogicalId > fromParts(std::string_view namespaceName, std::string_view name)
Builds a logical ID from separate namespace and name components.
Definition Identity.cpp:48
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Value * find(const std::string &key) noexcept
Return an object member, or nullptr when absent.
Definition Value.cpp:124
Graphics resource publication capability, implemented by graphics.
Definition ArtifactPublication.h:163
Tile/map publication capability, implemented by the map module.
Definition ArtifactPublication.h:155
Collider publication capability, implemented by physics.
Definition ArtifactPublication.h:171
Scene graph publication capability, implemented by the scene module.
Definition ArtifactPublication.h:147
Base contract for a consumer-owned artifact provider.
Definition ArtifactPublication.h:113
virtual void clearState() noexcept
Clear provider state during aggregate-restore failure cleanup.
Definition ArtifactPublication.h:143
virtual eve::Result< std::unique_ptr< PreparedPublication > > prepare(const PublicationView &publication)=0
Prepare a provider-local mutation from a borrowed publication view.
virtual bool emptyState() const noexcept
Return whether this provider has no committed observable state.
Definition ArtifactPublication.h:140
virtual eve::Result< void > restoreState(const eve::Value &state)
Transactionally restore backend-neutral observable provider state.
Definition ArtifactPublication.cpp:11
static constexpr Id128 fromUuid(const Id128< OtherTag > &value) noexcept
Re-tags an existing UUID at an explicit domain boundary.
Definition Identity.h:136
eve::Result< eve::SnapshotEnvelope > snapshot(const ArtifactSnapshotContext &context) const
Capture store and registered provider state in a sealed snapshot.
Definition ArtifactPublish.cpp:440
eve::Result< ArtifactPublishReceipt > publish(GeneratedArtifact artifact, ArtifactPublishOptions options)
Publish through required capabilities and then atomically into the store.
Definition ArtifactPublish.cpp:383
eve::Result< void > restore(const eve::SnapshotEnvelope &snapshot, const eve::SnapshotHashProvider &hashProvider)
Restore store and provider state transactionally from a sealed snapshot.
Definition ArtifactPublish.cpp:477
std::size_t size() const noexcept
Return the number of published top-level artifacts.
Definition GeneratedArtifact.h:304
eve::Result< eve::Value > snapshotState() const
Export identity, build-key and complete typed dense payload state.
Definition GeneratedArtifact.cpp:1504
Coordinates participant lifecycles with deterministic ordering.
Definition Transaction.h:178
Result< TransactionReceipt > execute(const TransactionContext &context, std::span< ITransactionParticipant * > participants) const
Atomically execute borrowed participants for one context.
Definition Transaction.cpp:176
Synchronous participant contract for one coordinator transaction.
Definition Transaction.h:128
Immutable context shared by every participant of one transaction.
Definition Transaction.h:30
PartKind
The leaf kinds understood by consumer-owned artifact providers.
Definition ArtifactPublication.h:28
@ ImageData
@ MeshData
@ Collider
@ PointSet
@ RolledBack
Definition EvpackPointGraphLoader.h:12
const char * artifactTypeName(ArtifactType type) noexcept
Return the stable textual spelling of an artifact kind.
Definition GeneratedArtifact.cpp:1251
ArtifactType
Runtime payload kind; it is checked against the variant on publish.
Definition GeneratedArtifact.h:109
@ ImageData
@ Composite
@ MeshData
@ Collider
@ PointSet
@ Compensated
@ UnknownVersion
@ PreconditionViolation
@ Unsupported
@ InvariantViolation
@ Failed
@ ParseError
@ Conflict
@ NoOp
@ Applied
Result< SnapshotEnvelope > makeSnapshotEnvelope(std::string type, LogicalId schema, SchemaVersion schemaVersion, PersistentId instanceId, Revision revision, SimulationTick tick, Value payload, const SnapshotHashProvider &hashProvider)
Construct and seal a snapshot envelope.
Definition Snapshot.cpp:103
Result< void > verifySnapshotEnvelope(const SnapshotEnvelope &snapshot, const SnapshotHashProvider &hashProvider)
Verify an envelope's content hash without modifying it.
Definition Snapshot.cpp:63
std::function< Result< ContentId >(std::string_view canonicalInput)> SnapshotHashProvider
Injected content-digest implementation used by snapshots.
Definition Snapshot.h:36
Definition Container.h:602
Stable outer format shared by persistence and cross-process snapshots.
Definition Snapshot.h:46
Backend-neutral axis-aligned bounds copied from a generated part.
Definition ArtifactPublication.h:37
Borrowed immutable view of one generated leaf.
Definition ArtifactPublication.h:61
Borrowed immutable view of one complete generated publication.
Definition ArtifactPublication.h:85
Required provider set for one artifact publication transaction.
Definition ArtifactPublication.h:179
Compatibility receipt retaining procgen ArtifactId at this boundary.
Definition ArtifactPublish.h:27
bool physicsPublished
Definition ArtifactPublish.h:31
bool scenePublished
Definition ArtifactPublish.h:29
bool graphicsPublished
Definition ArtifactPublish.h:30
Snapshot context supplied by the caller; time and hashing are injected.
Definition ArtifactPublish.h:36
Complete immutable-once-published artifact record.
Definition GeneratedArtifact.h:181