From 0345a6d1177d897b928770b0eab79f020f389289 Mon Sep 17 00:00:00 2001 From: Magne Helleborg Date: Wed, 6 Sep 2023 18:29:14 +0200 Subject: [PATCH 1/2] Harden cluster request deduplication by keeping a sliding window of last processed timestamps. --- src/Proto.Actor/Deduplication/DeduplicationContext.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Proto.Actor/Deduplication/DeduplicationContext.cs b/src/Proto.Actor/Deduplication/DeduplicationContext.cs index e55ecafe48..a6b87a1e8f 100644 --- a/src/Proto.Actor/Deduplication/DeduplicationContext.cs +++ b/src/Proto.Actor/Deduplication/DeduplicationContext.cs @@ -72,6 +72,8 @@ public async Task DeDuplicate(MessageEnvelope envelope, Func continuation) if (IsDuplicate(key!, cutoff)) { _logger.LogInformation("Request de-duplicated"); + // Update timestamp to keep a sliding window of TTL + _processed[key!]= now; return; } From ebdd7a43c48af911aa16af5af4bba1eeec99040b Mon Sep 17 00:00:00 2001 From: Magne Helleborg Date: Wed, 6 Sep 2023 18:29:34 +0200 Subject: [PATCH 2/2] Bump default deduplication window to 1 min. --- src/Proto.Cluster/ClusterConfig.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Proto.Cluster/ClusterConfig.cs b/src/Proto.Cluster/ClusterConfig.cs index a48169719a..a6678d1b1d 100644 --- a/src/Proto.Cluster/ClusterConfig.cs +++ b/src/Proto.Cluster/ClusterConfig.cs @@ -43,7 +43,7 @@ private ClusterConfig(string clusterName, IClusterProvider clusterProvider, IIde GossipFanout = 3; GossipMaxSend = 50; HeartbeatExpiration = TimeSpan.Zero; - ClusterRequestDeDuplicationWindow = TimeSpan.FromSeconds(30); + ClusterRequestDeDuplicationWindow = TimeSpan.FromMinutes(1); IdentityLookup = identityLookup; MemberStrategyBuilder = (_, _) => new SimpleMemberStrategy(); RemotePidCacheTimeToLive = TimeSpan.FromMinutes(15);