//---------------------------------------------------------------------
        // 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);
        }
Exemplo n.º 3
0
 /// <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;
        }