fix: use orTimeout instead of completing null in chunk coordinator

This commit is contained in:
dordsor21 2025-02-23 19:56:58 +00:00
parent 3f573b4d46
commit 6a6c113e5b
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B

View File

@ -44,6 +44,7 @@ import java.util.List;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -226,16 +227,22 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
loadingChunks.incrementAndGet(); loadingChunks.incrementAndGet();
PaperLib PaperLib
.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), shouldGen, true) .getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), shouldGen, true)
.completeOnTimeout(null, 10L, TimeUnit.SECONDS) .orTimeout(10L, TimeUnit.SECONDS)
.whenComplete((chunkObject, throwable) -> { .whenComplete((chunkObject, throwable) -> {
loadingChunks.decrementAndGet(); loadingChunks.decrementAndGet();
if (throwable != null) { if (throwable != null) {
LOGGER.error("Failed to load chunk {}", chunk, throwable); if (throwable instanceof TimeoutException) {
// We want one less because this couldn't be processed LOGGER.warn("Timed out awaiting chunk load {}", chunk);
this.expectedSize.decrementAndGet(); this.requestedChunks.offer(chunk);
} else {
LOGGER.error("Failed to load chunk {}", chunk, throwable);
// We want one less because this couldn't be processed
this.expectedSize.decrementAndGet();
}
} else if (chunkObject == null) { } else if (chunkObject == null) {
LOGGER.warn("Timed out awaiting chunk load {}", chunk); if (shouldGen) {
this.requestedChunks.offer(chunk); LOGGER.error("Null chunk returned for chunk at {}", chunk);
}
} else if (PlotSquared.get().isMainThread(Thread.currentThread())) { } else if (PlotSquared.get().isMainThread(Thread.currentThread())) {
this.processChunk(chunkObject); this.processChunk(chunkObject);
} else { } else {