Add a config to delay generation requests, for cases when gen tasks are not filled properly yet

This commit is contained in:
s809
2023-12-28 18:58:50 +05:00
parent 5c644fbf5b
commit 502aaf6a8a
3 changed files with 18 additions and 1 deletions
@@ -915,6 +915,14 @@ public class Config
+ "")
.build();
public static ConfigEntry<Integer> fullDataRequestBeginDelay = new ConfigEntry.Builder<Integer>()
.setMinDefaultMax(0, 3, 10)
.comment(""
+ "Adds a delay in seconds before sending LOD requests, when generation is enabled. \n"
+ "Increase this value if initial generation starts too far away. \n"
+ "")
.build();
/**
* Intentionally disabled.
* @see #enablePostRelogUpdate
@@ -2,6 +2,7 @@ package com.seibel.distanthorizons.core.generation;
import com.google.common.base.Stopwatch;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.config.types.ConfigEntry;
import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.ChunkSizedFullDataAccessor;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFullDataSource;
import com.seibel.distanthorizons.core.generation.tasks.IWorldGenTaskTracker;
@@ -26,6 +27,7 @@ import org.apache.logging.log4j.Logger;
import javax.annotation.CheckForNull;
import java.awt.*;
import java.time.Duration;
import java.util.*;
import java.util.List;
import java.util.concurrent.*;
@@ -42,6 +44,11 @@ public class WorldRemoteGenerationQueue implements IWorldGenerationQueue, IDebug
private final ClientNetworkState networkState;
private final IDhClientLevel level;
// Used to prevent requests for section very far away, as result of request list not completely filled.
// Kinda a hack, since queue is not notified when file handler is done with feeding sections to generate
private static final ConfigEntry<Integer> REQUEST_BEGIN_DELAY = Config.Client.Advanced.Multiplayer.ServerNetworking.fullDataRequestBeginDelay;
private final Stopwatch requestBeginStopwatch = Stopwatch.createStarted();
private volatile CompletableFuture<Void> generatorClosingFuture = null;
private final ConcurrentMap<DhSectionPos, WorldGenQueueEntry> waitingTasks = new ConcurrentHashMap<>();
@@ -103,6 +110,7 @@ public class WorldRemoteGenerationQueue implements IWorldGenerationQueue, IDebug
public void startGenerationQueueAndSetTargetPos(DhBlockPos2D targetPos)
{
if (generatorClosingFuture != null || !networkState.getClient().isReady()) return;
if (requestBeginStopwatch.elapsed(TimeUnit.SECONDS) < REQUEST_BEGIN_DELAY.get()) return;
while (getWaitingTaskCount() > getInProgressTaskCount()
&& getInProgressTaskCount() < this.networkState.config.fullDataRequestConcurrencyLimit
@@ -348,7 +348,8 @@
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableServerNetworking": "Enable Server Networking",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.fullDataRequestConcurrencyLimit": "Sections - request concurrency limit",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.genTaskPriorityRequestRateLimit": "Generation task priority - request rate limit",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.genTaskPriorityRequestRateLimit": "Generation task priority - request rate limit",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.fullDataRequestBeginDelay": "Generation request begin delay",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableRealTimeUpdates": "Enable Real Time Updates",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enablePostRelogUpdates": "Enable Post Relog Updates",
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.serverPort": "Server Port",