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); }
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); }
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); }
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(); }
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); }
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); }