Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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> >();
        }