From efcef500d178a8e977b63b67ca1f1e9d5a1577e4 Mon Sep 17 00:00:00 2001 From: Magne Helleborg Date: Wed, 6 Sep 2023 20:51:35 +0200 Subject: [PATCH] Hardened cluster-request deduplication (#2041) * Harden cluster request deduplication by keeping a sliding window of last processed timestamps. * Bump default deduplication window to 1 min. --- src/Proto.Actor/Deduplication/DeduplicationContext.cs | 2 ++ src/Proto.Cluster/ClusterConfig.cs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) 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; } 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);