internal bool TryGetNonDefaultGrainDirectory(GrainType grainType, out IGrainDirectory directory)
        {
            this.grainPropertiesResolver.TryGetGrainProperties(grainType, out var properties);

            foreach (var resolver in this.resolvers)
            {
                if (resolver.TryResolveGrainDirectory(grainType, properties, out directory))
                {
                    return(true);
                }
            }

            if (properties is not null &&
                properties.Properties.TryGetValue(WellKnownGrainTypeProperties.GrainDirectory, out var directoryName) &&
                !string.IsNullOrWhiteSpace(directoryName))
            {
                if (this.directoryPerName.TryGetValue(directoryName, out directory))
                {
                    return(true);
                }
                else
                {
                    throw new KeyNotFoundException($"Could not resolve grain directory {directoryName} for grain type {grainType}");
                }
            }

            directory = null;
            return(false);
        }
Beispiel #2
0
 public GrainLocator(
     IGrainDirectory grainDirectory,
     DhtGrainLocator inClusterGrainLocator,
     IClusterMembershipService clusterMembershipService)
 {
     this.grainDirectory           = grainDirectory;
     this.inClusterGrainLocator    = inClusterGrainLocator;
     this.clusterMembershipService = clusterMembershipService;
     this.cache = new LRUBasedGrainDirectoryCache(GrainDirectoryOptions.DEFAULT_CACHE_SIZE, GrainDirectoryOptions.DEFAULT_MAXIMUM_CACHE_TTL);
 }
        public GrainLocatorTests(ITestOutputHelper output)
        {
            this.loggerFactory = new LoggerFactory(new[] { new XunitLoggerProvider(output) });
            this.lifecycle     = new SiloLifecycleSubject(this.loggerFactory.CreateLogger <SiloLifecycleSubject>());

            this.grainDirectory        = Substitute.For <IGrainDirectory>();
            this.localGrainDirectory   = Substitute.For <ILocalGrainDirectory>();
            this.mockMembershipService = new MockClusterMembershipService();

            this.grainLocator = new GrainLocator(
                this.grainDirectory,
                new DhtGrainLocator(this.localGrainDirectory),
                this.mockMembershipService.Target);

            this.grainLocator.Participate(this.lifecycle);
        }
Beispiel #4
0
        public CachedGrainLocatorTests(ITestOutputHelper output)
        {
            this.loggerFactory = new LoggerFactory(new[] { new XunitLoggerProvider(output) });
            this.lifecycle     = new SiloLifecycleSubject(this.loggerFactory.CreateLogger <SiloLifecycleSubject>());

            this.grainDirectory         = Substitute.For <IGrainDirectory>();
            this.grainDirectoryResolver = Substitute.For <IGrainDirectoryResolver>();
            this.grainDirectoryResolver.Resolve(Arg.Any <LegacyGrainId>()).Returns(this.grainDirectory);
            this.grainDirectoryResolver.Directories.Returns(new[] { this.grainDirectory });
            this.localGrainDirectory   = Substitute.For <ILocalGrainDirectory>();
            this.mockMembershipService = new MockClusterMembershipService();

            this.grainLocator = new CachedGrainLocator(
                this.grainDirectoryResolver,
                new DhtGrainLocator(this.localGrainDirectory),
                this.mockMembershipService.Target);

            this.grainLocator.Participate(this.lifecycle);
        }
Beispiel #5
0
        public GrainDirectoryResolverTests(ITestOutputHelper output)
        {
            this.azureDirectory = Substitute.For <IGrainDirectory>();

            var hostBuilder = new HostBuilder();

            hostBuilder.UseOrleans(siloBuilder =>
            {
                siloBuilder
                .ConfigureServices((ctx, svc) => svc.AddSingletonNamedService(AzureTableDirectoryGrain.DIRECTORY, (sp, nameof) => this.azureDirectory))
                .ConfigureServices((ctx, svc) => svc.AddSingletonNamedService("OtherDirectory", (sp, nameof) => this.otherDirectory))
                .ConfigureServices((ctx, svc) => svc.AddSingletonNamedService("AgainAnotherDirectory", (sp, nameof) => this.againAnotherDirectory))
                .ConfigureLogging(builder => builder.AddProvider(new XunitLoggerProvider(output)))
                .UseLocalhostClustering();
            });

            var host = hostBuilder.Build();

            this.target = host.Services.GetRequiredService <GrainDirectoryResolver>();
        }
        public CachedGrainLocatorTests(ITestOutputHelper output)
        {
            this.loggerFactory = new LoggerFactory(new[] { new XunitLoggerProvider(output) });
            this.lifecycle     = new SiloLifecycleSubject(this.loggerFactory.CreateLogger <SiloLifecycleSubject>());

            this.grainDirectory = Substitute.For <IGrainDirectory>();
            var services = new ServiceCollection()
                           .AddSingleton(typeof(IKeyedServiceCollection <,>), typeof(KeyedServiceCollection <,>))
                           .AddSingletonKeyedService <string, IGrainDirectory>(GrainDirectoryAttribute.DEFAULT_GRAIN_DIRECTORY, (sp, name) => this.grainDirectory)
                           .BuildServiceProvider();

            this.grainDirectoryResolver = new GrainDirectoryResolver(
                services,
                new GrainPropertiesResolver(new NoOpClusterManifestProvider()),
                Array.Empty <IGrainDirectoryResolver>());
            this.mockMembershipService = new MockClusterMembershipService();

            this.grainLocator = new CachedGrainLocator(
                this.grainDirectoryResolver,
                this.mockMembershipService.Target);

            this.grainLocator.Participate(this.lifecycle);
        }
 protected GrainDirectoryTests()
 {
     this.grainDirectory = GetGrainDirectory();
 }
Beispiel #8
0
 public GrainLocator(IGrainDirectory grainDirectory, InClusterGrainLocator inClusterGrainLocator)
 {
     this.grainDirectory        = grainDirectory;
     this.inClusterGrainLocator = inClusterGrainLocator;
     this.cache = new LRUBasedGrainDirectoryCache(GrainDirectoryOptions.DEFAULT_CACHE_SIZE, GrainDirectoryOptions.DEFAULT_MAXIMUM_CACHE_TTL);
 }
Beispiel #9
0
        public bool TryResolveGrainDirectory(GrainType grainType, GrainProperties properties, out IGrainDirectory grainDirectory)
        {
            if (GenericGrainType.TryParse(grainType, out var constructed) && constructed.IsConstructed)
            {
                var generic  = constructed.GetUnconstructedGrainType().GrainType;
                var resolver = GetResolver();
                if (resolver.TryGetNonDefaultGrainDirectory(generic, out grainDirectory))
                {
                    return(true);
                }
            }

            grainDirectory = default;
            return(false);
        }