private void RebuildFullGrainInterfaceMap() { var newClusterGrainInterfaceMap = new GrainInterfaceMap(false, defaultPlacementStrategy); var newSupportedSilosByTypeCode = new Dictionary <int, IList <SiloAddress> >(); newClusterGrainInterfaceMap.AddMap(grainInterfaceMap); foreach (var kvp in grainInterfaceMapsBySilo) { newClusterGrainInterfaceMap.AddMap(kvp.Value); foreach (var grainType in kvp.Value.SupportedGrainTypes) { IList <SiloAddress> supportedSilos; if (!newSupportedSilosByTypeCode.TryGetValue(grainType, out supportedSilos)) { newSupportedSilosByTypeCode[grainType] = supportedSilos = new List <SiloAddress>(); } supportedSilos.Add(kvp.Key); } } ClusterGrainInterfaceMap = newClusterGrainInterfaceMap; supportedSilosByTypeCode = newSupportedSilosByTypeCode; }
private void RebuildFullGrainInterfaceMap() { var newClusterGrainInterfaceMap = new GrainInterfaceMap(false, this.defaultPlacementStrategy); var newSupportedSilosByTypeCode = new Dictionary <int, List <SiloAddress> >(); var newSupportedSilosByInterface = new Dictionary <int, Dictionary <ushort, List <SiloAddress> > >(); foreach (var kvp in grainInterfaceMapsBySilo) { newClusterGrainInterfaceMap.AddMap(kvp.Value); foreach (var supportedInterface in kvp.Value.SupportedInterfaces) { var ifaceId = supportedInterface.InterfaceId; var version = supportedInterface.InterfaceVersion; var supportedSilosByVersion = newSupportedSilosByInterface.GetValueOrAddNew(ifaceId); var supportedSilosForVersion = supportedSilosByVersion.GetValueOrAddNew(version); supportedSilosForVersion.Add(kvp.Key); } foreach (var grainClassData in kvp.Value.SupportedGrainClassData) { var grainType = grainClassData.GrainTypeCode; var supportedSilos = newSupportedSilosByTypeCode.GetValueOrAddNew(grainType); supportedSilos.Add(kvp.Key); } } foreach (var silos in newSupportedSilosByTypeCode.Values) { // We need to sort this so the list of silos returned will // be the same accross all silos in the cluster silos.Sort(); } ClusterGrainInterfaceMap = newClusterGrainInterfaceMap; GrainTypeResolver = ClusterGrainInterfaceMap.GetGrainTypeResolver(); supportedSilosByTypeCode = newSupportedSilosByTypeCode; supportedSilosByInterface = newSupportedSilosByInterface; }
private void RebuildFullGrainInterfaceMap() { var newClusterGrainInterfaceMap = new GrainInterfaceMap(false, this.defaultPlacementStrategy); var newSupportedSilosByTypeCode = new Dictionary <int, List <SiloAddress> >(); var newSupportedSilosByInterface = new Dictionary <int, Dictionary <ushort, List <SiloAddress> > >(); var newInterfaceVersions = new Dictionary <int, HashSet <ushort> >(); foreach (var kvp in grainInterfaceMapsBySilo) { newClusterGrainInterfaceMap.AddMap(kvp.Value); foreach (var supportedInterface in kvp.Value.SupportedInterfaces) { var ifaceId = supportedInterface.InterfaceId; var version = supportedInterface.InterfaceVersion; var ifaceVersions = newInterfaceVersions.GetValueOrAddNew(ifaceId); ifaceVersions.Add(version); var supportedSilosByVersion = newSupportedSilosByInterface.GetValueOrAddNew(ifaceId); var supportedSilosForVersion = supportedSilosByVersion.GetValueOrAddNew(version); supportedSilosForVersion.Add(kvp.Key); } foreach (var grainClassData in kvp.Value.SupportedGrainClassData) { var grainType = grainClassData.GrainTypeCode; var supportedSilos = newSupportedSilosByTypeCode.GetValueOrAddNew(grainType); supportedSilos.Add(kvp.Key); } } ClusterGrainInterfaceMap = newClusterGrainInterfaceMap; supportedSilosByTypeCode = newSupportedSilosByTypeCode; supportedSilosByInterface = newSupportedSilosByInterface; supportedSilosCache = new ConcurrentDictionary <Tuple <int, int, ushort>, List <SiloAddress> >(); }