private static void RemoveActivations(IGrainDirectoryCache <IReadOnlyList <Tuple <SiloAddress, ActivationId> > > directoryCache, GrainId key, IReadOnlyList <Tuple <SiloAddress, ActivationId> > activations, int version, Func <Tuple <SiloAddress, ActivationId>, bool> doRemove) { int removeCount = activations.Count(doRemove); if (removeCount == 0) { return; // nothing to remove, done here } if (activations.Count > removeCount) // still some left, update activation list. Note: Most of the time there should be only one activation { var newList = new List <Tuple <SiloAddress, ActivationId> >(activations.Count - removeCount); newList.AddRange(activations.Where(t => !doRemove(t))); directoryCache.AddOrUpdate(key, newList, version); } else // no activations left, remove from cache { directoryCache.Remove(key); } }
public void CachePlacementDecision(GrainAddress address) => cache.AddOrUpdate(address, 0);
private static void RemoveActivations(IGrainDirectoryCache<IReadOnlyList<Tuple<SiloAddress, ActivationId>>> directoryCache, GrainId key, IReadOnlyList<Tuple<SiloAddress, ActivationId>> activations, int version, Func<Tuple<SiloAddress, ActivationId>, bool> doRemove) { int removeCount = activations.Count(doRemove); if (removeCount == 0) { return; // nothing to remove, done here } if (activations.Count > removeCount) // still some left, update activation list. Note: Most of the time there should be only one activation { var newList = new List<Tuple<SiloAddress, ActivationId>>(activations.Count - removeCount); newList.AddRange(activations.Where(t => !doRemove(t))); directoryCache.AddOrUpdate(key, newList, version); } else // no activations left, remove from cache { directoryCache.Remove(key); } }