Esempio n. 1
0
        public GrainTypeManager(
            ILocalSiloDetails siloDetails,
            IApplicationPartManager applicationPartManager,
            DefaultPlacementStrategy defaultPlacementStrategy,
            SerializationManager serializationManager,
            MultiClusterRegistrationStrategyManager multiClusterRegistrationStrategyManager,
            ILogger <GrainTypeManager> logger,
            IOptions <GrainClassOptions> grainClassOptions)
        {
            var localTestMode = siloDetails.SiloAddress.Endpoint.Address.Equals(IPAddress.Loopback);

            this.logger = logger;
            this.defaultPlacementStrategy = defaultPlacementStrategy.PlacementStrategy;
            this.serializationManager     = serializationManager;
            this.multiClusterRegistrationStrategyManager = multiClusterRegistrationStrategyManager;
            grainInterfaceMap        = new GrainInterfaceMap(localTestMode, this.defaultPlacementStrategy);
            ClusterGrainInterfaceMap = grainInterfaceMap;
            grainInterfaceMapsBySilo = new Dictionary <SiloAddress, GrainInterfaceMap>();

            var grainClassFeature = applicationPartManager.CreateAndPopulateFeature <GrainClassFeature>();

            this.grainTypes = CreateGrainTypeMap(grainClassFeature, grainClassOptions.Value);

            var grainInterfaceFeature = applicationPartManager.CreateAndPopulateFeature <GrainInterfaceFeature>();

            this.invokers = CreateInvokerMap(grainInterfaceFeature);
            this.InitializeInterfaceMap();
        }
Esempio n. 2
0
        public SiloAssemblyLoader(NodeConfiguration nodeConfig, MultiClusterRegistrationStrategyManager registrationManager)
        {
            IDictionary <string, SearchOption> additionalDirectories = nodeConfig.AdditionalAssemblyDirectories;

            this.registrationManager = registrationManager;
            this.excludedGrains      = nodeConfig.ExcludedGrainTypes != null
                ? new List <string>(nodeConfig.ExcludedGrainTypes)
                : new List <string>();
            var exeRoot = Path.GetDirectoryName(typeof(SiloAssemblyLoader).GetTypeInfo().Assembly.Location);
            var appRoot = Path.Combine(exeRoot, "Applications");
            var cwd     = Directory.GetCurrentDirectory();

            directories = new Dictionary <string, SearchOption>
            {
                { exeRoot, SearchOption.TopDirectoryOnly },
                { appRoot, SearchOption.AllDirectories }
            };

            foreach (var kvp in additionalDirectories)
            {
                // Make sure the path is clean (get rid of ..\'s)
                directories[new DirectoryInfo(kvp.Key).FullName] = kvp.Value;
            }


            if (!directories.ContainsKey(cwd))
            {
                directories.Add(cwd, SearchOption.TopDirectoryOnly);
            }

            LoadApplicationAssemblies();
        }
Esempio n. 3
0
 public GrainTypeManager(bool localTestMode, SiloAssemblyLoader loader, DefaultPlacementStrategy defaultPlacementStrategy, SerializationManager serializationManager, MultiClusterRegistrationStrategyManager multiClusterRegistrationStrategyManager)
 {
     this.defaultPlacementStrategy = defaultPlacementStrategy.PlacementStrategy;
     this.loader = loader;
     this.serializationManager = serializationManager;
     this.multiClusterRegistrationStrategyManager = multiClusterRegistrationStrategyManager;
     grainInterfaceMap        = new GrainInterfaceMap(localTestMode, this.defaultPlacementStrategy);
     ClusterGrainInterfaceMap = grainInterfaceMap;
     grainInterfaceMapsBySilo = new Dictionary <SiloAddress, GrainInterfaceMap>();
 }
Esempio n. 4
0
        public GrainTypeManager(ILocalSiloDetails siloDetails, SiloAssemblyLoader loader, DefaultPlacementStrategy defaultPlacementStrategy, SerializationManager serializationManager, MultiClusterRegistrationStrategyManager multiClusterRegistrationStrategyManager)
        {
            var localTestMode = siloDetails.SiloAddress.Endpoint.Address.Equals(IPAddress.Loopback);

            this.defaultPlacementStrategy = defaultPlacementStrategy.PlacementStrategy;
            this.loader = loader;
            this.serializationManager = serializationManager;
            this.multiClusterRegistrationStrategyManager = multiClusterRegistrationStrategyManager;
            grainInterfaceMap        = new GrainInterfaceMap(localTestMode, this.defaultPlacementStrategy);
            ClusterGrainInterfaceMap = grainInterfaceMap;
            grainInterfaceMapsBySilo = new Dictionary <SiloAddress, GrainInterfaceMap>();
        }
Esempio n. 5
0
        public GenericGrainTypeData(Type activationType, Type stateObjectType, MultiClusterRegistrationStrategyManager registrationManager) :
            base(activationType, registrationManager)
        {
            if (!activationType.GetTypeInfo().IsGenericTypeDefinition)
            {
                throw new ArgumentException("Activation type is not generic: " + activationType.Name);
            }

            this.activationType      = activationType;
            this.stateObjectType     = stateObjectType;
            this.registrationManager = registrationManager;
        }
Esempio n. 6
0
        public GrainTypeData(Type type, MultiClusterRegistrationStrategyManager registrationManager)
        {
            var typeInfo = type.GetTypeInfo();

            Type        = type;
            IsReentrant = typeInfo.GetCustomAttributes(typeof(ReentrantAttribute), true).Any();
            // TODO: shouldn't this use GrainInterfaceUtils.IsStatelessWorker?
            IsStatelessWorker                = typeInfo.GetCustomAttributes(typeof(StatelessWorkerAttribute), true).Any();
            GrainClass                       = TypeUtils.GetFullName(typeInfo);
            RemoteInterfaceTypes             = GetRemoteInterfaces(type);
            MayInterleave                    = GetMayInterleavePredicate(typeInfo) ?? (_ => false);
            MultiClusterRegistrationStrategy = registrationManager?.GetMultiClusterRegistrationStrategy(type);
        }
Esempio n. 7
0
 public GrainTypeManager(ILocalSiloDetails siloDetails, SiloAssemblyLoader loader, DefaultPlacementStrategy defaultPlacementStrategy, SerializationManager serializationManager, MultiClusterRegistrationStrategyManager multiClusterRegistrationStrategyManager)
     : this(siloDetails.SiloAddress.Endpoint.Address.Equals(IPAddress.Loopback), loader, defaultPlacementStrategy, serializationManager, multiClusterRegistrationStrategyManager)
 {
 }
Esempio n. 8
0
 public SiloAssemblyLoader(NodeConfiguration nodeConfig, MultiClusterRegistrationStrategyManager registrationManager)
     : this(nodeConfig.AdditionalAssemblyDirectories, registrationManager, nodeConfig.ExcludedGrainTypes)
 {
 }