From 3b313bf0a8c934ea8864d0b35cae652138eafdaa Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Thu, 11 Apr 2024 05:29:12 +0200
Subject: [PATCH] Disable sync chunk writes to avoid lag during backups

---
 .../Properties/MinecraftServerProperties.cs                   | 1 +
 Agent/Phantom.Agent.Minecraft/Properties/ServerProperties.cs  | 4 +++-
 .../Backups/BackupServerCommandDispatcher.cs                  | 1 -
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/Agent/Phantom.Agent.Minecraft/Properties/MinecraftServerProperties.cs b/Agent/Phantom.Agent.Minecraft/Properties/MinecraftServerProperties.cs
index ce49c77..fe351ce 100644
--- a/Agent/Phantom.Agent.Minecraft/Properties/MinecraftServerProperties.cs
+++ b/Agent/Phantom.Agent.Minecraft/Properties/MinecraftServerProperties.cs
@@ -18,4 +18,5 @@ static class MinecraftServerProperties {
 	public static readonly MinecraftServerProperty<ushort> ServerPort = new UnsignedShort("server-port");
 	public static readonly MinecraftServerProperty<ushort> RconPort = new UnsignedShort("rcon.port");
 	public static readonly MinecraftServerProperty<bool> EnableRcon = new Boolean("enable-rcon");
+	public static readonly MinecraftServerProperty<bool> SyncChunkWrites = new Boolean("sync-chunk-writes");
 }
diff --git a/Agent/Phantom.Agent.Minecraft/Properties/ServerProperties.cs b/Agent/Phantom.Agent.Minecraft/Properties/ServerProperties.cs
index 92d692c..e1cdc3e 100644
--- a/Agent/Phantom.Agent.Minecraft/Properties/ServerProperties.cs
+++ b/Agent/Phantom.Agent.Minecraft/Properties/ServerProperties.cs
@@ -5,11 +5,13 @@ namespace Phantom.Agent.Minecraft.Properties;
 public sealed record ServerProperties(
 	ushort ServerPort,
 	ushort RconPort,
-	bool EnableRcon = true
+	bool EnableRcon = true,
+	bool SyncChunkWrites = false
 ) {
 	internal void SetTo(JavaPropertiesFileEditor properties) {
 		MinecraftServerProperties.ServerPort.Set(properties, ServerPort);
 		MinecraftServerProperties.RconPort.Set(properties, RconPort);
 		MinecraftServerProperties.EnableRcon.Set(properties, EnableRcon);
+		MinecraftServerProperties.SyncChunkWrites.Set(properties, SyncChunkWrites);
 	}
 }
diff --git a/Agent/Phantom.Agent.Services/Backups/BackupServerCommandDispatcher.cs b/Agent/Phantom.Agent.Services/Backups/BackupServerCommandDispatcher.cs
index 91e3fd3..b534a66 100644
--- a/Agent/Phantom.Agent.Services/Backups/BackupServerCommandDispatcher.cs
+++ b/Agent/Phantom.Agent.Services/Backups/BackupServerCommandDispatcher.cs
@@ -55,7 +55,6 @@ sealed partial class BackupServerCommandDispatcher : IDisposable {
 	}
 
 	public async Task SaveAllChunks() {
-		// TODO Try if not flushing and waiting a few seconds before flushing reduces lag.
 		await process.SendCommand(MinecraftCommand.SaveAll(flush: true), cancellationToken);
 		await savedTheGame.Task.WaitAsync(TimeSpan.FromMinutes(1), cancellationToken);
 	}