private ILogViewAdaptorFactory SetupLogConsistencyProvider(IGrainActivationContext activationContext) { var attr = this.GetType().GetTypeInfo().GetCustomAttributes <LogConsistencyProviderAttribute>(true).FirstOrDefault(); ILogViewAdaptorFactory defaultFactory = attr != null ? this.ServiceProvider.GetServiceByName <ILogConsistencyProvider>(attr.ProviderName) : this.ServiceProvider.GetService <ILogConsistencyProvider>(); if (attr != null && defaultFactory == null) { var errMsg = attr != null ? $"Cannot find consistency provider with Name={attr.ProviderName} for grain type {this.GetType().FullName}" : $"No consistency provider manager found loading grain type {this.GetType().FullName}"; throw new BadProviderConfigException(errMsg); } // use default if none found defaultFactory = defaultFactory ?? this.DefaultAdaptorFactory; if (defaultFactory == null) { var errMsg = $"No log consistency provider found loading grain type {this.GetType().FullName}"; throw new BadProviderConfigException(errMsg); } ; return(defaultFactory); }
/// <summary> /// Install the log-view adaptor into a log-consistent grain. /// </summary> /// <param name="grain">The grain.</param> /// <param name="grainType">The grain type.</param> /// <param name="stateType">The type of the grain state.</param> /// <param name="mcRegistrationStrategy">The multi-cluster registration strategy.</param> /// <param name="factory">The consistency adaptor factory</param> /// <param name="storageProvider">The storage provider, or null if none needed</param> /// <returns>The newly created grain.</returns> public void InstallLogViewAdaptor(Grain grain, Type grainType, Type stateType, IMultiClusterRegistrationStrategy mcRegistrationStrategy, ILogViewAdaptorFactory factory, IStorageProvider storageProvider) { // encapsulate runtime services used by consistency adaptors var svc = this.protocolServicesFactory(grain, mcRegistrationStrategy); var state = Activator.CreateInstance(stateType); ((ILogConsistentGrain)grain).InstallAdaptor(factory, state, grainType.FullName, storageProvider, svc); }
private void InstallLogViewAdaptor( Factory <Grain, ILogConsistencyProtocolServices> protocolServicesFactory, ILogViewAdaptorFactory factory, IGrainStorage grainStorage) { // encapsulate runtime services used by consistency adaptors ILogConsistencyProtocolServices svc = protocolServicesFactory(this); TView state = (TView)Activator.CreateInstance(typeof(TView)); this.InstallAdaptor(factory, state, this.GetType().FullName, grainStorage, svc); }
private void InstallLogViewAdaptor( IMultiClusterRegistrationStrategy mcRegistrationStrategy, Factory <Grain, IMultiClusterRegistrationStrategy, ILogConsistencyProtocolServices> protocolServicesFactory, ILogViewAdaptorFactory factory, IStorageProvider storageProvider) { // encapsulate runtime services used by consistency adaptors ILogConsistencyProtocolServices svc = protocolServicesFactory(this, mcRegistrationStrategy); TView state = (TView)Activator.CreateInstance(typeof(TView)); this.InstallAdaptor(factory, state, this.GetType().FullName, storageProvider, svc); }
private Task OnSetupState(CancellationToken ct) { if (ct.IsCancellationRequested) { return(Task.CompletedTask); } IGrainActivationContext activationContext = this.ServiceProvider.GetRequiredService <IGrainActivationContext>(); Factory <Grain, IMultiClusterRegistrationStrategy, ILogConsistencyProtocolServices> protocolServicesFactory = this.ServiceProvider.GetRequiredService <Factory <Grain, IMultiClusterRegistrationStrategy, ILogConsistencyProtocolServices> >(); ILogViewAdaptorFactory consistencyProvider = SetupLogConsistencyProvider(activationContext); IStorageProvider storageProvider = consistencyProvider.UsesStorageProvider ? this.GetStorageProvider(this.ServiceProvider) : null; InstallLogViewAdaptor(activationContext.RegistrationStrategy, protocolServicesFactory, consistencyProvider, storageProvider); return(Task.CompletedTask); }
private Task OnSetupState(CancellationToken ct) { if (ct.IsCancellationRequested) { return(Task.CompletedTask); } IGrainContextAccessor grainContextAccessor = this.ServiceProvider.GetRequiredService <IGrainContextAccessor>(); Factory <Grain, ILogConsistencyProtocolServices> protocolServicesFactory = this.ServiceProvider.GetRequiredService <Factory <Grain, ILogConsistencyProtocolServices> >(); ILogViewAdaptorFactory consistencyProvider = SetupLogConsistencyProvider(grainContextAccessor.GrainContext); IGrainStorage grainStorage = consistencyProvider.UsesStorageProvider ? this.GetGrainStorage(this.ServiceProvider) : null; InstallLogViewAdaptor(protocolServicesFactory, consistencyProvider, grainStorage); return(Task.CompletedTask); }
/// <summary> /// Install the log-view adaptor into a log-consistent grain. /// </summary> /// <param name="grain">The grain.</param> /// <param name="grainType">The grain type.</param> /// <param name="stateType">The type of the grain state.</param> /// <param name="mcRegistrationStrategy">The multi-cluster registration strategy.</param> /// <param name="factory">The consistency adaptor factory</param> /// <param name="storageProvider">The storage provider, or null if none needed</param> /// <returns>The newly created grain.</returns> public void InstallLogViewAdaptor(Grain grain, Type grainType, Type stateType, IMultiClusterRegistrationStrategy mcRegistrationStrategy, ILogViewAdaptorFactory factory, IStorageProvider storageProvider) { // try to find a suitable logger that we can use to trace consistency protocol information var logger = (factory as ILogConsistencyProvider)?.Log ?? storageProvider?.Log; // encapsulate runtime services used by consistency adaptors var svc = new ProtocolServices(grain, logger, mcRegistrationStrategy); var state = Activator.CreateInstance(stateType); ((ILogConsistentGrain)grain).InstallAdaptor(factory, state, grainType.FullName, storageProvider, svc); }
/// <summary> /// called right after grain construction to install the log view adaptor /// </summary> /// <param name="factory"> The adaptor factory to use </param> /// <param name="state"> The initial state of the view </param> /// <param name="grainTypeName"> The type name of the grain </param> /// <param name="storageProvider"> The storage provider, if needed </param> /// <param name="services"> Protocol services </param> protected abstract void InstallAdaptor(ILogViewAdaptorFactory factory, object state, string grainTypeName, IStorageProvider storageProvider, ILogConsistencyProtocolServices services);