private ICollection <IStorageSerializer> ConfigureSerializers(AdoNetGrainStorageOptions options, IProviderRuntime providerRuntime)
        {
            var serializers = new List <IStorageSerializer>();

            if (options.UseJsonFormat)
            {
                var typeResolver = providerRuntime.ServiceProvider.GetRequiredService <ITypeResolver>();
                var jsonSettings = OrleansJsonSerializer.UpdateSerializerSettings(OrleansJsonSerializer.GetDefaultSerializerSettings(typeResolver, providerRuntime.GrainFactory),
                                                                                  options.UseFullAssemblyNames, options.IndentJson, options.TypeNameHandling);
                options.ConfigureJsonSerializerSettings?.Invoke(jsonSettings);
                serializers.Add(new OrleansStorageDefaultJsonSerializer(jsonSettings, JsonFormatSerializerTag));
            }
            if (options.UseXmlFormat)
            {
                serializers.Add(new OrleansStorageDefaultXmlSerializer(XmlFormatSerializerTag));
            }

            //if none are set true, configure binary format serializer by default
            if (!options.UseXmlFormat && !options.UseJsonFormat)
            {
                serializers.Add(new OrleansStorageDefaultBinarySerializer(this.serializationManager, BinaryFormatSerializerTag));
            }

            return(serializers);
        }
 public AdoNetGrainStorage(ILogger <AdoNetGrainStorage> logger, IProviderRuntime providerRuntime, IOptions <AdoNetGrainStorageOptions> options, IOptions <SiloOptions> siloOptions, string name)
 {
     this.options         = options.Value;
     this.providerRuntime = providerRuntime;
     this.name            = name;
     this.logger          = logger;
     this.serviceId       = siloOptions.Value.ServiceId.ToString();
 }
 public AdoNetGrainStorage(
     ILogger <AdoNetGrainStorage> logger,
     IProviderRuntime providerRuntime,
     IOptions <AdoNetGrainStorageOptions> options,
     IOptions <ClusterOptions> clusterOptions,
     string name)
 {
     this.options         = options.Value;
     this.providerRuntime = providerRuntime;
     this.name            = name;
     this.logger          = logger;
     this.serviceId       = clusterOptions.Value.ServiceId;
 }
Beispiel #4
0
        /// <summary>
        /// Returns a correct implementation of the persistence provider according to environment variables.
        /// </summary>
        /// <remarks>If the environment invariants have failed to hold upon creation of the storage provider,
        /// a <em>null</em> value will be provided.</remarks>
        public async Task <IGrainStorage> GetStorageProvider(string storageInvariant)
        {
            //Make sure the environment invariants hold before trying to give a functioning SUT instantiation.
            //This is done instead of the constructor to have more granularity on how the environment should be initialized.
            try
            {
                using (await StorageLock.LockAsync())
                {
                    if (AdoNetInvariants.Invariants.Contains(storageInvariant))
                    {
                        if (!StorageProviders.ContainsKey(storageInvariant))
                        {
                            Storage = Invariants.EnsureStorageForTesting(Invariants.ActiveSettings.ConnectionStrings.First(i => i.StorageInvariant == storageInvariant));

                            var options = new AdoNetGrainStorageOptions()
                            {
                                ConnectionString = Storage.Storage.ConnectionString,
                                Invariant        = storageInvariant
                            };
                            var clusterOptions = new ClusterOptions()
                            {
                                ServiceId = Guid.NewGuid().ToString()
                            };
                            var storageProvider = new AdoNetGrainStorage(DefaultProviderRuntime.ServiceProvider.GetService <ILogger <AdoNetGrainStorage> >(), DefaultProviderRuntime, Options.Create(options), Options.Create(clusterOptions), storageInvariant + "_StorageProvider");
                            ISiloLifecycleSubject siloLifeCycle = new SiloLifecycleSubject(NullLoggerFactory.Instance.CreateLogger <SiloLifecycleSubject>());
                            storageProvider.Participate(siloLifeCycle);
                            await siloLifeCycle.OnStart(CancellationToken.None);

                            StorageProviders[storageInvariant] = storageProvider;
                        }
                    }
                }
            }
            catch
            {
                StorageProviders.Add(storageInvariant, null);
            }

            return(StorageProviders[storageInvariant]);
        }
        private ICollection <IStorageDeserializer> ConfigureDeserializers(AdoNetGrainStorageOptions options, IProviderRuntime providerRuntime)
        {
            var deserializers = new List <IStorageDeserializer>();

            if (options.UseJsonFormat)
            {
                var jsonSettings = OrleansJsonSerializer.UpdateSerializerSettings(OrleansJsonSerializer.GetDefaultSerializerSettings(providerRuntime.ServiceProvider), options.UseFullAssemblyNames, options.IndentJson, options.TypeNameHandling);
                options.ConfigureJsonSerializerSettings?.Invoke(jsonSettings);

                deserializers.Add(new OrleansStorageDefaultJsonDeserializer(jsonSettings, JsonFormatSerializerTag));
            }

            if (options.UseXmlFormat)
            {
                deserializers.Add(new OrleansStorageDefaultXmlDeserializer(XmlFormatSerializerTag));
            }
            //if none are set true, configure binary format serializer by default
            if (!options.UseXmlFormat && !options.UseJsonFormat)
            {
                deserializers.Add(new OrleansStorageDefaultBinaryDeserializer(this.serializer, BinaryFormatSerializerTag));
            }

            return(deserializers);
        }
        private static void ConvertToAdoNetGrainStorageOptions <T>(Action <T> configureOptions, AdoNetGrainStorageOptions options)
            where T : AdoNetGrainStorageOptions, new()
        {
            var t = new T();

            configureOptions(t);
            options.Invariant        = t.Invariant;
            options.ConnectionString = t.ConnectionString;
            options.ConfigureJsonSerializerSettings = t.ConfigureJsonSerializerSettings;
            options.IndentJson           = t.IndentJson;
            options.InitStage            = t.InitStage;
            options.TypeNameHandling     = t.TypeNameHandling;
            options.UseFullAssemblyNames = t.UseFullAssemblyNames;
            options.UseJsonFormat        = t.UseJsonFormat;
            options.UseXmlFormat         = t.UseXmlFormat;
        }