From f8e87b7c87348133d7b1c370fa376008f9000a1e Mon Sep 17 00:00:00 2001 From: Chenhao Ye Date: Wed, 12 Jun 2024 22:14:08 +0000 Subject: [PATCH 1/2] Only truncate AOF if both stores are checkpointed --- libs/server/StoreWrapper.cs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/libs/server/StoreWrapper.cs b/libs/server/StoreWrapper.cs index f9ca6ce002..8729d148a3 100644 --- a/libs/server/StoreWrapper.cs +++ b/libs/server/StoreWrapper.cs @@ -719,15 +719,19 @@ private async Task InitiateCheckpoint(bool full, CheckpointType checkpointType, objectStoreCheckpointResult = await objectStore.TakeHybridLogCheckpointAsync(checkpointType, tryIncremental); } - // If cluster is enabled the replication manager is responsible for truncating AOF - if (serverOptions.EnableCluster && serverOptions.EnableAOF) + // Only truncate AOF if both stores are checkpointed + if (storeType == StoreType.All) { - clusterProvider.SafeTruncateAOF(storeType, full, CheckpointCoveredAofAddress, storeCheckpointResult.token, objectStoreCheckpointResult.token); - } - else - { - appendOnlyFile?.TruncateUntil(CheckpointCoveredAofAddress); - appendOnlyFile?.Commit(); + // If cluster is enabled the replication manager is responsible for truncating AOF + if (serverOptions.EnableCluster && serverOptions.EnableAOF) + { + clusterProvider.SafeTruncateAOF(storeType, full, CheckpointCoveredAofAddress, storeCheckpointResult.token, objectStoreCheckpointResult.token); + } + else + { + appendOnlyFile?.TruncateUntil(CheckpointCoveredAofAddress); + appendOnlyFile?.Commit(); + } } if (objectStore != null) From 200a60959195eb089ce00df2b358632e68125c72 Mon Sep 17 00:00:00 2001 From: Chenhao Ye Date: Thu, 13 Jun 2024 22:04:21 +0000 Subject: [PATCH 2/2] Allow truncation if main store is checkpointed and object store is disabled --- libs/cluster/Server/ClusterProvider.cs | 4 ++++ libs/server/StoreWrapper.cs | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libs/cluster/Server/ClusterProvider.cs b/libs/cluster/Server/ClusterProvider.cs index b9636242a2..9153f0cb5c 100644 --- a/libs/cluster/Server/ClusterProvider.cs +++ b/libs/cluster/Server/ClusterProvider.cs @@ -156,6 +156,10 @@ public void SafeTruncateAOF(StoreType storeType, bool full, long CheckpointCover // Used to delete old checkpoints and cleanup and also cleanup during attachment to new primary replicationManager.AddCheckpointEntry(entry, storeType, full); + // Only truncate AOF if 1) both stores were checkpointed OR 2) only Main was checkpointed but Object was not enabled + if (storeType != StoreType.All && !(storeType == StoreType.Main && serverOptions.DisableObjects)) + return; + if (clusterManager.CurrentConfig.LocalNodeRole == NodeRole.PRIMARY) _ = replicationManager.SafeTruncateAof(CheckpointCoveredAofAddress); else diff --git a/libs/server/StoreWrapper.cs b/libs/server/StoreWrapper.cs index 8729d148a3..51eccb6203 100644 --- a/libs/server/StoreWrapper.cs +++ b/libs/server/StoreWrapper.cs @@ -719,8 +719,6 @@ private async Task InitiateCheckpoint(bool full, CheckpointType checkpointType, objectStoreCheckpointResult = await objectStore.TakeHybridLogCheckpointAsync(checkpointType, tryIncremental); } - // Only truncate AOF if both stores are checkpointed - if (storeType == StoreType.All) { // If cluster is enabled the replication manager is responsible for truncating AOF if (serverOptions.EnableCluster && serverOptions.EnableAOF) @@ -729,8 +727,11 @@ private async Task InitiateCheckpoint(bool full, CheckpointType checkpointType, } else { - appendOnlyFile?.TruncateUntil(CheckpointCoveredAofAddress); - appendOnlyFile?.Commit(); + if (storeType == StoreType.All || (storeType == StoreType.Main && serverOptions.DisableObjects)) + { + appendOnlyFile?.TruncateUntil(CheckpointCoveredAofAddress); + appendOnlyFile?.Commit(); + } } }