From ebd00df38887e64c516cfe68c17c20951acfeb0d Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Tue, 21 Jan 2025 17:26:54 +0500 Subject: [PATCH] Fix task splitting causing generation of already generated sections --- .../GeneratedFullDataSourceProvider.java | 18 +++++++++++++++++- .../generation/RemoteWorldRetrievalQueue.java | 9 ++++++++- .../generation/tasks/IWorldGenTaskTracker.java | 3 +++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java index b607b286d..9c64c3ab8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java @@ -34,7 +34,6 @@ import com.seibel.distanthorizons.core.pooling.PhantomArrayListCheckout; import com.seibel.distanthorizons.core.pooling.PhantomArrayListPool; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos2D; -import com.seibel.distanthorizons.core.render.renderer.DebugRenderer; import com.seibel.distanthorizons.core.render.renderer.IDebugRenderable; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.threading.PriorityTaskPicker; @@ -455,6 +454,23 @@ public class GeneratedFullDataSourceProvider extends FullDataSourceProviderV2 im }; } + @Override + public CompletableFuture shouldGenerateSplitChild(long pos) + { + return GeneratedFullDataSourceProvider.this.getAsync(pos).thenApply(fullDataSource -> + { + //noinspection TryFinallyCanBeTryWithResources + try + { + return !GeneratedFullDataSourceProvider.this.isFullyGenerated(fullDataSource.columnGenerationSteps); + } + finally + { + fullDataSource.close(); + } + }); + } + } private CompletableFuture onDataSourceSaveAsync(FullDataSourceV2 fullDataSource) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java b/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java index 9b913729d..b9784cb47 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/generation/RemoteWorldRetrievalQueue.java @@ -74,7 +74,14 @@ public class RemoteWorldRetrievalQueue extends AbstractFullDataNetworkRequestQue return WorldGenResult.CreateFail(); case REQUIRES_SPLITTING: List> childFutures = new ArrayList<>(4); - DhSectionPos.forEachChild(sectionPos, childPos -> childFutures.add(this.submitRetrievalTask(childPos, requiredDataDetail, tracker))); + DhSectionPos.forEachChild(sectionPos, childPos -> { + tracker.shouldGenerateSplitChild(childPos).thenAccept(shouldGenerate -> { + if (shouldGenerate) + { + childFutures.add(this.submitRetrievalTask(childPos, requiredDataDetail, tracker)); + } + }); + }); return WorldGenResult.CreateSplit(childFutures); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/generation/tasks/IWorldGenTaskTracker.java b/core/src/main/java/com/seibel/distanthorizons/core/generation/tasks/IWorldGenTaskTracker.java index 540c0a69b..1d8ec7f52 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/generation/tasks/IWorldGenTaskTracker.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/generation/tasks/IWorldGenTaskTracker.java @@ -22,6 +22,7 @@ package com.seibel.distanthorizons.core.generation.tasks; import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; /** @@ -33,4 +34,6 @@ public interface IWorldGenTaskTracker @Nullable Consumer getDataSourceConsumer(); + CompletableFuture shouldGenerateSplitChild(long pos); + }