//--------------------------------------------------------------------- // Initializes the storage provider. // <param name="name">The name of this provider instance.</param> // <param name="providerRuntime">A Orleans runtime object managing all storage providers.</param> // <param name="config">Configuration info for this provider instance.</param> // <returns>Completion promise for this operation.</returns> public async Task Init(string name, IProviderRuntime provider_runtime, IProviderConfiguration config) { this.Name = name; this.ConfigSectionName = config.Properties["ConfigSectionName"]; string useGuidAsStorageKeyString; config.Properties.TryGetValue("UseGuidAsStorageKey", out useGuidAsStorageKeyString); var useGuidAsStorageKey = true;//default is true if (!string.IsNullOrWhiteSpace(useGuidAsStorageKeyString)) { Boolean.TryParse(useGuidAsStorageKeyString, out useGuidAsStorageKey); } this.UseGuidAsStorageKey = useGuidAsStorageKey; if (string.IsNullOrWhiteSpace(ConfigSectionName)) { throw new ArgumentException("ConfigSectionName property not set"); } var configSection = ReadConfig(ConfigSectionName); DataManager = await GrainStateCouchbaseDataManager.Initialize(configSection); Log = provider_runtime.GetLogger(this.GetType().FullName); }
//--------------------------------------------------------------------- public static async Task <GrainStateCouchbaseDataManager> Initialize(CouchbaseClientSection configSection) { var instance = new GrainStateCouchbaseDataManager(); var config = new ClientConfiguration(configSection); Cluster = new Cluster(config); var tcs = new TaskCompletionSource <IBucket>(); Action initAction; if (configSection.Buckets.Count > 0) { var buckets = new BucketElement[configSection.Buckets.Count]; configSection.Buckets.CopyTo(buckets, 0); var bucketSetting = buckets.First(); initAction = () => { tcs.SetResult(Cluster.OpenBucket(bucketSetting.Name, bucketSetting.Password)); }; } else { initAction = () => { tcs.SetResult(Cluster.OpenBucket()); }; } WaitCallback initBucket = (state) => { try { initAction(); } catch (Exception ex) { tcs.SetException(new Exception("GrainStateCouchbaseDataManager initialize exception", ex)); } }; ThreadPool.QueueUserWorkItem(initBucket, null); instance.Bucket = await tcs.Task; return(instance); }
/// <summary> /// Closes the storage provider during silo shutdown. /// </summary> /// <returns>Completion promise for this operation.</returns> public Task Close() { if (DataManager != null) { DataManager.Dispose(); } DataManager = null; return(TaskDone.Done); }
/// <summary> /// Initializes the storage provider. /// </summary> /// <param name="name">The name of this provider instance.</param> /// <param name="providerRuntime">A Orleans runtime object managing all storage providers.</param> /// <param name="config">Configuration info for this provider instance.</param> /// <returns>Completion promise for this operation.</returns> public async Task Init(string name, IProviderRuntime providerRuntime, IProviderConfiguration config) { this.Name = name; this.ConfigSectionName = config.Properties["ConfigSectionName"]; string useGuidAsStorageKeyString; config.Properties.TryGetValue("UseGuidAsStorageKey", out useGuidAsStorageKeyString); var useGuidAsStorageKey = true;//default is true if (!string.IsNullOrWhiteSpace(useGuidAsStorageKeyString)) Boolean.TryParse(useGuidAsStorageKeyString, out useGuidAsStorageKey); this.UseGuidAsStorageKey = useGuidAsStorageKey; if (string.IsNullOrWhiteSpace(ConfigSectionName)) throw new ArgumentException("ConfigSectionName property not set"); var configSection = ReadConfig(ConfigSectionName); DataManager = await GrainStateCouchbaseDataManager.Initialize(configSection); Log = providerRuntime.GetLogger(this.GetType().FullName); }
/// <summary> /// Closes the storage provider during silo shutdown. /// </summary> /// <returns>Completion promise for this operation.</returns> public Task Close() { if (DataManager != null) DataManager.Dispose(); DataManager = null; return TaskDone.Done; }
public static async Task<GrainStateCouchbaseDataManager> Initialize(CouchbaseClientSection configSection) { var instance = new GrainStateCouchbaseDataManager(); var config = new ClientConfiguration(configSection); _cluster = new Cluster(config); var tcs = new TaskCompletionSource<IBucket>(); Action initAction; if (configSection.Buckets.Count > 0) { var buckets = new BucketElement[configSection.Buckets.Count]; configSection.Buckets.CopyTo(buckets, 0); var bucketSetting = buckets.First(); initAction = () => { tcs.SetResult(_cluster.OpenBucket(bucketSetting.Name)); }; } else initAction = () => { tcs.SetResult(_cluster.OpenBucket()); }; WaitCallback initBucket = (state) => { try { initAction(); } catch (Exception ex) { tcs.SetException(new Exception("GrainStateCouchbaseDataManager initialize exception", ex)); } }; ThreadPool.QueueUserWorkItem(initBucket, null); instance._bucket = await tcs.Task; return instance; }