Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #7
0
        /// <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);
        }
Example #8
0
 /// <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);