Propagated engine failures

- GenerationClosedException covers closed history routers, stages, saved biome runtimes and admissions
- It also covers ownership stores, hydrology caches and engine runtimes
- GenerationFailures tells engine, lifecycle, executor and JVM failures from content failures
- Engine failures rethrow from object, cave object, procedural, floating, upper and decorator catch sites
- Biome layer, noise bound, rotation and mantle write catch sites rethrow them too
- Only content failures are skipped
- A source plan is never cached or persisted without an object a healthy engine places
- A transient engine failure no longer turns imported features off
This commit is contained in:
Brian Neumann-Fopiano committed 2026-09-29 06:50:23 -04:00
1 parent 76a07242b5
commit 54f3595ba7
22 files changed
+357 -16

No files matched your search

@@ -25,6 +25,7 @@ import art.arcane.volmlib.nativelib.terrain.feature.NativeFeatureTable;
import art.arcane.volmlib.nativelib.minecraft26_2.modded.NativeModdedImportedFeatures;
import art.arcane.iris.generation.runtime.Engine;
import art.arcane.iris.generation.runtime.GenerationFailures;
import art.arcane.iris.generation.runtime.GenerationSessionLease;
import art.arcane.iris.structure.nativegen.NativeFeatureGenerationPolicy;
import art.arcane.iris.structure.nativegen.IrisImportedFeatureControl;
@@ -163,6 +164,7 @@ final class ModdedImportedFeatureStage implements NativeModdedGeneratorPolicy.Fe
try {
control = NativeFeatureGenerationPolicy.control(engine);
} catch (RuntimeException error) {
GenerationFailures.rethrowEngineFailure(error);
ModdedIrisLog.error("Iris could not read importedFeatures for this dimension; features off: {}",
error.toString(), error);
markInert(runtimeIdentity, generation);
@@ -177,6 +179,7 @@ final class ModdedImportedFeatureStage implements NativeModdedGeneratorPolicy.Fe
IrisContext.Scope ignored = IrisContext.open(engine, lease.sessionId(), null)) {
built = nativeFeatures.buildTable(new ModdedImportedFeaturePolicy(engine), control, generation);
} catch (Throwable error) {
GenerationFailures.rethrowEngineFailure(error);
ModdedIrisLog.error("Iris importedFeatures is off for {}: feature table construction failed: {}",
dimensionKey(engine), error.toString(), error);
markInert(runtimeIdentity, generation);