Skip to content

Commit 45fd4ce

Browse files
ReubenBondCopilot
andcommitted
refactor: avoid redundant manifest pruning
Return immediately for same-version cluster manifests and only prune non-active silos when advancing to a newer membership version. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 044385f commit 45fd4ce

1 file changed

Lines changed: 5 additions & 20 deletions

File tree

src/Orleans.Runtime/Manifest/ClusterManifestProvider.cs

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,34 +62,21 @@ private ClusterManifest EnsureCurrentManifestVersion(ClusterMembershipSnapshot c
6262
{
6363
var current = _current;
6464
var membershipVersion = clusterMembership.Version.Value;
65-
if (current.Version.Major > membershipVersion)
66-
{
67-
return current;
68-
}
69-
70-
var synchronizedSilos = RemoveNonActiveSilos(current.Silos, clusterMembership, out var modified);
71-
if (current.Version.Major == membershipVersion && !modified)
65+
if (current.Version.Major >= membershipVersion)
7266
{
7367
return current;
7468
}
7569

7670
lock (_currentLock)
7771
{
7872
current = _current;
79-
if (current.Version.Major > membershipVersion)
73+
if (current.Version.Major >= membershipVersion)
8074
{
8175
return current;
8276
}
8377

84-
synchronizedSilos = RemoveNonActiveSilos(current.Silos, clusterMembership, out modified);
85-
if (current.Version.Major == membershipVersion && !modified)
86-
{
87-
return current;
88-
}
89-
90-
var version = current.Version.Major == membershipVersion
91-
? new MajorMinorVersion(membershipVersion, current.Version.Minor + 1)
92-
: new MajorMinorVersion(membershipVersion, 0);
78+
var synchronizedSilos = RemoveNonActiveSilos(current.Silos, clusterMembership);
79+
var version = new MajorMinorVersion(membershipVersion, 0);
9380
var updated = CreateClusterManifest(version, synchronizedSilos);
9481
TryPublishManifest(updated);
9582
return _current;
@@ -260,8 +247,7 @@ private bool TryPublishManifest(ClusterManifest manifest)
260247

261248
private static ImmutableDictionary<SiloAddress, GrainManifest> RemoveNonActiveSilos(
262249
ImmutableDictionary<SiloAddress, GrainManifest> silos,
263-
ClusterMembershipSnapshot clusterMembership,
264-
out bool modified)
250+
ClusterMembershipSnapshot clusterMembership)
265251
{
266252
ImmutableDictionary<SiloAddress, GrainManifest>.Builder? builder = null;
267253
foreach (var entry in silos)
@@ -275,7 +261,6 @@ private static ImmutableDictionary<SiloAddress, GrainManifest> RemoveNonActiveSi
275261
builder.Remove(entry.Key);
276262
}
277263

278-
modified = builder is not null;
279264
return builder?.ToImmutable() ?? silos;
280265
}
281266

0 commit comments

Comments
 (0)