diff --git a/libs/cluster/Server/Replication/PrimaryOps/DisklessReplication/ReplicationSyncManager.cs b/libs/cluster/Server/Replication/PrimaryOps/DisklessReplication/ReplicationSyncManager.cs index 88e45be2f56..366f8d9d301 100644 --- a/libs/cluster/Server/Replication/PrimaryOps/DisklessReplication/ReplicationSyncManager.cs +++ b/libs/cluster/Server/Replication/PrimaryOps/DisklessReplication/ReplicationSyncManager.cs @@ -187,10 +187,11 @@ async Task StreamingSnapshotDriver() await Task.Yield(); // Get sync metadata for checkpoint - await PrepareForSync(); + var fullSync = await PrepareForSync(); // Stream checkpoint to replicas - await TakeStreamingCheckpoint(); + if (fullSync) + await TakeStreamingCheckpoint(); // Notify sync session of success success for (var i = 0; i < NumSessions; i++) @@ -215,7 +216,7 @@ async Task StreamingSnapshotDriver() } // Acquire checkpoint and lock AOF if possible - async Task PrepareForSync() + async Task PrepareForSync() { if (disklessRepl) { @@ -235,6 +236,7 @@ async Task PrepareForSync() #endregion #region initializeConnection + var fullSync = false; for (var i = 0; i < NumSessions; i++) { try @@ -257,6 +259,7 @@ async Task PrepareForSync() { // Reset replica database in preparation for full sync Sessions[i].SetFlushTask(Sessions[i].ExecuteAsync(["CLUSTER", "FLUSHALL"])); + fullSync = true; } } catch (Exception ex) @@ -268,6 +271,8 @@ async Task PrepareForSync() await WaitForFlush(); #endregion + + return fullSync; } else { diff --git a/test/Garnet.test.cluster/ReplicationTests/ClusterReplicationDisklessSyncTests.cs b/test/Garnet.test.cluster/ReplicationTests/ClusterReplicationDisklessSyncTests.cs index 389fa5d55d9..0eb4290b3ed 100644 --- a/test/Garnet.test.cluster/ReplicationTests/ClusterReplicationDisklessSyncTests.cs +++ b/test/Garnet.test.cluster/ReplicationTests/ClusterReplicationDisklessSyncTests.cs @@ -185,6 +185,9 @@ public void ClusterAofReplayDisklessSync([Values] bool disableObjects, [Values] // Validate replica data Validate(primaryIndex, replicaIndex, disableObjects); + + // Wait for replica to catch up + context.clusterTestUtils.WaitForReplicaAofSync(primaryIndex, replicaIndex, logger: context.logger); } ///