Merge remote-tracking branch 'origin/ver/1.20.4' into ver/1.20.4
This commit is contained in:
@@ -93,10 +93,10 @@ index 0000000000000000000000000000000000000000..dcfbabf54b19a4c29d5c95830242c5c2
|
|||||||
+}
|
+}
|
||||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java
|
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..e40989889f3821bb7484fc0bae5d94b033013904
|
index 0000000000000000000000000000000000000000..dc5a5f42c9ca7a50295c18424722568a3ad33fa5
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java
|
+++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java
|
||||||
@@ -0,0 +1,316 @@
|
@@ -0,0 +1,324 @@
|
||||||
+package dev.kaiijumc.kaiiju.region;
|
+package dev.kaiijumc.kaiiju.region;
|
||||||
+
|
+
|
||||||
+import com.github.luben.zstd.ZstdInputStream;
|
+import com.github.luben.zstd.ZstdInputStream;
|
||||||
@@ -225,7 +225,7 @@ index 0000000000000000000000000000000000000000..e40989889f3821bb7484fc0bae5d94b0
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public void flush() throws IOException {
|
+ public void flush() throws IOException {
|
||||||
+ if (isMarkedToSave()) flushWrapper(); // sync
|
+ if (getAndResetSaveMarker()) flushWrapper(); // sync
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ private void markToSave() {
|
+ private void markToSave() {
|
||||||
@@ -233,10 +233,18 @@ index 0000000000000000000000000000000000000000..e40989889f3821bb7484fc0bae5d94b0
|
|||||||
+ markedToSave.set(true);
|
+ markedToSave.set(true);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public boolean isMarkedToSave() {
|
+ public boolean getAndResetSaveMarker() {
|
||||||
+ return markedToSave.getAndSet(false);
|
+ return markedToSave.getAndSet(false);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ public boolean isMarkedToSave(){
|
||||||
|
+ return this.markedToSave.get();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void resetSaveMarker(){
|
||||||
|
+ this.markedToSave.set(false);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ public void flushWrapper() {
|
+ public void flushWrapper() {
|
||||||
+ try {
|
+ try {
|
||||||
+ save();
|
+ save();
|
||||||
@@ -415,24 +423,21 @@ index 0000000000000000000000000000000000000000..e40989889f3821bb7484fc0bae5d94b0
|
|||||||
+}
|
+}
|
||||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java
|
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..f06d7767c79e465f999b2032086cc224de95152a
|
index 0000000000000000000000000000000000000000..65435eb666b2e1cabffc145e016faa5e3b373464
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java
|
+++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java
|
||||||
@@ -0,0 +1,44 @@
|
@@ -0,0 +1,57 @@
|
||||||
+package dev.kaiijumc.kaiiju.region;
|
+package dev.kaiijumc.kaiiju.region;
|
||||||
+
|
+
|
||||||
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||||
+import java.util.Queue;
|
+
|
||||||
|
+import java.util.Set;
|
||||||
+import java.util.concurrent.*;
|
+import java.util.concurrent.*;
|
||||||
+import org.bukkit.Bukkit;
|
+import org.bukkit.Bukkit;
|
||||||
+
|
+
|
||||||
+public class LinearRegionFileFlusher {
|
+public class LinearRegionFileFlusher {
|
||||||
+ private final Queue<LinearRegionFile> savingQueue = new LinkedBlockingQueue<>();
|
+ private final Set<LinearRegionFile> pendingSaving = ConcurrentHashMap.newKeySet();
|
||||||
+ private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(
|
+
|
||||||
+ new ThreadFactoryBuilder()
|
|
||||||
+ .setNameFormat("linear-flush-scheduler")
|
|
||||||
+ .build()
|
|
||||||
+ );
|
|
||||||
+ private final ExecutorService executor = Executors.newFixedThreadPool(
|
+ private final ExecutorService executor = Executors.newFixedThreadPool(
|
||||||
+ me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushThreads,
|
+ me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushThreads,
|
||||||
+ new ThreadFactoryBuilder()
|
+ new ThreadFactoryBuilder()
|
||||||
@@ -440,27 +445,43 @@ index 0000000000000000000000000000000000000000..f06d7767c79e465f999b2032086cc224
|
|||||||
+ .build()
|
+ .build()
|
||||||
+ );
|
+ );
|
||||||
+
|
+
|
||||||
|
+ private final Executor delayedFlusher = CompletableFuture.delayedExecutor(
|
||||||
|
+ me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushFrequency,
|
||||||
|
+ TimeUnit.SECONDS,
|
||||||
|
+ executor
|
||||||
|
+ );
|
||||||
|
+
|
||||||
+ public LinearRegionFileFlusher() {
|
+ public LinearRegionFileFlusher() {
|
||||||
+ Bukkit.getLogger().info("Using " + me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushThreads + " threads for linear region flushing.");
|
+ Bukkit.getLogger().info("Using " + me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushThreads + " threads for linear region flushing.");
|
||||||
+ scheduler.scheduleAtFixedRate(this::pollAndFlush, 0L, me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushFrequency, TimeUnit.SECONDS);
|
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public void scheduleSave(LinearRegionFile regionFile) {
|
+ public void scheduleSave(LinearRegionFile regionFile) {
|
||||||
+ if (savingQueue.contains(regionFile)) return;
|
+ if (this.pendingSaving.contains(regionFile) || !regionFile.isMarkedToSave()){
|
||||||
+ savingQueue.add(regionFile);
|
+ return;
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void pollAndFlush() {
|
|
||||||
+ while (!savingQueue.isEmpty()) {
|
|
||||||
+ LinearRegionFile regionFile = savingQueue.poll();
|
|
||||||
+ if (!regionFile.closed && regionFile.isMarkedToSave())
|
|
||||||
+ executor.execute(regionFile::flushWrapper);
|
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
|
+ this.pendingSaving.add(regionFile);
|
||||||
|
+ this.delayedFlusher.execute(()->{
|
||||||
|
+ try {
|
||||||
|
+ if (!regionFile.closed && regionFile.isMarkedToSave()){
|
||||||
|
+ regionFile.flushWrapper();
|
||||||
|
+ }
|
||||||
|
+ }finally {
|
||||||
|
+ regionFile.resetSaveMarker();
|
||||||
|
+ this.pendingSaving.remove(regionFile);
|
||||||
|
+ }
|
||||||
|
+ });
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public void shutdown() {
|
+ public void shutdown() {
|
||||||
+ executor.shutdown();
|
+ this.executor.shutdown();
|
||||||
+ scheduler.shutdown();
|
+ for (;;) {
|
||||||
|
+ try {
|
||||||
|
+ if (this.executor.awaitTermination(5_00,TimeUnit.MILLISECONDS)) break;
|
||||||
|
+ } catch (InterruptedException e) {
|
||||||
|
+ e.printStackTrace();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/RegionFileFormat.java b/src/main/java/dev/kaiijumc/kaiiju/region/RegionFileFormat.java
|
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/RegionFileFormat.java b/src/main/java/dev/kaiijumc/kaiiju/region/RegionFileFormat.java
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: MrHua269 <novau233@163.com>
|
From: MrHua269 <novau233@163.com>
|
||||||
Date: Sat, 6 Apr 2024 05:14:57 +0000
|
Date: Sat, 6 Apr 2024 05:14:57 +0000
|
||||||
Subject: [PATCH] Gale Reduce lambda and Optional allocation in
|
Subject: [PATCH] Gale Reduce lambda and Optional allocation in
|
||||||
EntityBasedExplosionDamageCalculator
|
EntityBasedExplosionDamageCalculator
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user