Unblocked history stage admission

- Generation stages read coherent metadata from the immutable store manifest
- Stage admission proceeds while unrelated semantic journal flushes hold the history monitor
- Concurrency tests preserve durable publication, cutover ordering, and failed admission cleanup
This commit is contained in:
Brian Neumann-Fopiano committed 2026-09-06 16:22:24 -04:00
1 parent 763f9df2c2
commit 48a81a3d2c
2 files changed
+233 -13

No files matched your search

@@ -570,19 +570,18 @@ public final class GenerationHistory {
public GenerationStage openStage(int chunkX, int chunkZ) throws IOException {
GenerationAdmission.StageLease lease = admission.enterStage();
try {
synchronized (this) {
GenerationActivation activation = store.activeActivation();
GenerationEpoch epoch = requireEpoch(activation.epochId());
return new GenerationStage(
this,
chunkX,
chunkZ,
activation,
epoch,
paths.packRoot(epoch.epochId()),
lease
);
}
GenerationManifest manifest = store.manifest();
GenerationActivation activation = manifest.activeActivation();
GenerationEpoch epoch = manifest.activeEpoch();
return new GenerationStage(
this,
chunkX,
chunkZ,
activation,
epoch,
paths.packRoot(epoch.epochId()),
lease
);
} catch (Throwable failure) {
lease.close();
if (failure instanceof IOException ioFailure) {