Exemplo n.º 1
0
        public async Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
        {
            var con = await GetFreeConnection();

            var    table       = GetTableName(grainState);
            string keyAsString = GetKey(grainReference);

            string query;

            if (CustomTable)
            {
                query = string.Format("select * from `{0}` where `guid` = \"{1}\";", table,
                                      MySqlHelper.EscapeString(keyAsString));
            }
            else
            {
                query = string.Format("select * from `{0}` where `guid` = \"{1}\" AND `type` = \"{2}\";", table,
                                      MySqlHelper.EscapeString(keyAsString), MySqlHelper.EscapeString(grainType));
            }

            using (var cmd = new MySqlCommand(query, con))
            {
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    if (await reader.ReadAsync())
                    {
                        Dictionary <string, object> dict = new Dictionary <string, object>();

                        for (int i = 0; i < reader.FieldCount; ++i)
                        {
                            dict.Add(reader.GetName(i), reader.GetValue(i));
                        }

                        if (dict.ContainsKey("data"))
                        {
                            try
                            {
                                var data =
                                    (GrainState)
                                    Newtonsoft.Json.JsonConvert.DeserializeObject(dict["data"].ToString(),
                                                                                  grainState.GetType());
                                grainState.SetAll(data.AsDictionary());
                            }
                            catch
                            {
                                grainState.SetAll(null); /* corruption? */
                            }
                        }
                        else
                        {
                            grainState.SetAll(null);
                        }
                    }
                }
            }

            await AddFreeConnection(con);
        }
        public async Task ReadStateAsync(string grainType, GrainReference grainId, GrainState grainState)
        {
            try
            {
                var blobName = GetBlobName(grainType, grainId);
                var blob     = container.GetBlockBlobReference(blobName);

                var exists = await blob.ExistsAsync();

                if (!exists)
                {
                    return;
                }

                var text = await blob.DownloadTextAsync();

                if (string.IsNullOrWhiteSpace(text))
                {
                    return;
                }

                var data = JsonConvert.DeserializeObject(text, grainState.GetType(), settings);
                var dict = (( GrainState )data).AsDictionary();
                grainState.SetAll(dict);
                grainState.Etag = blob.Properties.ETag;
            }
            catch (Exception ex)
            {
                Log.Error(0, ex.ToString());
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Constructs a grain state instance by deserializing a JSON document.
        /// </summary>
        /// <param name="grainState">Grain state to be populated for storage.</param>
        /// <param name="entityData">JSON storage format representaiton of the grain state.</param>
        protected static void ConvertFromStorageFormat(GrainState grainState, string entityData)
        {
            object data = JsonConvert.DeserializeObject(entityData, grainState.GetType(), GrainStateMongoDataManager.JsonSetting);
            var    dict = ((GrainState)data).AsDictionary();

            grainState.SetAll(dict);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Constructs a grain state instance by deserializing a JSON document.
        /// </summary>
        /// <param name="grainState">Grain state to be populated for storage.</param>
        /// <param name="entityData">JSON storage format representaiton of the grain state.</param>
        protected static void ConvertFromStorageFormat(GrainState grainState, string entityData)
        {
            JavaScriptSerializer deserializer = new JavaScriptSerializer();
            object data = deserializer.Deserialize(entityData, grainState.GetType());
            var    dict = ((GrainState)data).AsDictionary();

            grainState.SetAll(dict);
        }
Exemplo n.º 5
0
 public virtual Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
 {
     Log.Info(0, "ReadStateAsync for {0} {1}", grainType, grainReference);
     Interlocked.Increment(ref readCount);
     lock (StateStore)
     {
         var storedState = GetLastState(grainType, grainReference);
         grainState.SetAll(storedState); // Read current state data
     }
     return(TaskDone.Done);
 }
Exemplo n.º 6
0
        /// <summary> Read state data function for this storage provider. </summary>
        /// <see cref="IStorageProvider#ReadStateAsync"/>
        public async Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
        {
            var primaryKey = grainReference.ToKeyString();

            if (Log.IsVerbose3)
            {
                Log.Verbose3((int)SimpleSQLServerProviderErrorCodes.SimpleSQLServerProvide_ReadingData,
                             "Reading: GrainType={0} Pk={1} Grainid={2} from DataSource={3}",
                             grainType, primaryKey, grainReference, this.sqlconnBuilder.DataSource + "." + this.sqlconnBuilder.InitialCatalog);
            }

            var data = new Dictionary <string, object>();

            using (var db = new KeyValueDbContext(this.sqlconnBuilder.ConnectionString))
            {
                switch (this.useJsonOrBinaryFormat)
                {
                case StorageFormatEnum.Binary:
                case StorageFormatEnum.Both:
                {
                    var value = await db.KeyValues.Where(s => s.GrainKeyId.Equals(primaryKey)).Select(s => s.BinaryContent).SingleOrDefaultAsync();

                    if (value != null)
                    {
                        data = SerializationManager.DeserializeFromByteArray <Dictionary <string, object> >(value);
                    }
                }
                break;

                case StorageFormatEnum.Json:
                {
                    var value = await db.KeyValues.Where(s => s.GrainKeyId.Equals(primaryKey)).Select(s => s.JsonContext).SingleOrDefaultAsync();

                    if (!string.IsNullOrEmpty(value))
                    {
                        data = JsonConvert.DeserializeObject <Dictionary <string, object> >(value, jsonSettings);
                    }
                }
                break;

                default:
                    break;
                }
            }
            grainState.SetAll(data);

            grainState.Etag = Guid.NewGuid().ToString();
        }
Exemplo n.º 7
0
        async Task IStorageProvider.ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
        {
            var grainIdentity = GrainIdentity.FromGrainReference(grainType, grainReference);

            if (_ignore)
            {
                return;
            }

            var state = await _dataManager.ReadStateAsync(grainIdentity);

            if (null != state)
            {
                grainState.SetAll(state);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Deserialize from Azure storage format
        /// </summary>
        /// <param name="grainState">The grain state data to be deserialized in to</param>
        /// <param name="entity">The Azure table entity the stored data</param>
        internal void ConvertFromStorageFormat(GrainState grainState, GrainStateEntity entity)
        {
            Dictionary <string, object> dataValues = null;

            try
            {
                if (entity.Data != null)
                {
                    // Rehydrate
                    dataValues = SerializationManager.DeserializeFromByteArray <Dictionary <string, object> >(entity.Data);
                }
                else if (entity.StringData != null)
                {
                    dataValues = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, object> >(entity.StringData, jsonSettings);
                }
                if (dataValues != null)
                {
                    grainState.SetAll(dataValues);
                }
                // Else, no data found
            }
            catch (Exception exc)
            {
                var sb = new StringBuilder();
                if (entity.Data != null)
                {
                    sb.AppendFormat("Unable to convert from storage format GrainStateEntity.Data={0}", entity.Data);
                }
                else if (entity.StringData != null)
                {
                    sb.AppendFormat("Unable to convert from storage format GrainStateEntity.StringData={0}", entity.StringData);
                }
                if (dataValues != null)
                {
                    int i = 1;
                    foreach (var dvKey in dataValues.Keys)
                    {
                        object dvValue = dataValues[dvKey];
                        sb.AppendLine();
                        sb.AppendFormat("Data #{0} Key={1} Value={2} Type={3}", i, dvKey, dvValue, dvValue.GetType());
                        i++;
                    }
                }
                Log.Error(0, sb.ToString(), exc);
                throw new AggregateException(sb.ToString(), exc);
            }
        }
Exemplo n.º 9
0
        /// <summary> Read state data function for this storage provider. </summary>
        /// <see cref="IStorageProvider#ReadStateAsync"/>
        public virtual async Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
        {
            var keys = MakeKeys(grainType, grainReference);

            if (Log.IsVerbose2)
            {
                Log.Verbose2("Read Keys={0}", StorageProviderUtils.PrintKeys(keys));
            }

            string id = HierarchicalKeyStore.MakeStoreKey(keys);
            IMemoryStorageGrain          storageGrain = GetStorageGrain(id);
            IDictionary <string, object> state        = await storageGrain.ReadStateAsync(STATE_STORE_NAME, id);

            if (state != null)
            {
                grainState.SetAll(state);
            }
        }
        public async Task ReadStateAsync(string grainType, GrainReference grainId, GrainState grainState)
        {
            try
            {
                var blobName = GetBlobName(grainType, grainId);
                var blob     = container.GetBlockBlobReference(blobName);

                string text;

                try
                {
                    text = await blob.DownloadTextAsync();
                }
                catch (StorageException exception)
                {
                    var errorCode = exception.RequestInformation.ExtendedErrorInformation.ErrorCode;

                    if (errorCode == BlobErrorCodeStrings.ContainerNotFound || errorCode == BlobErrorCodeStrings.BlobNotFound)
                    {
                        return;
                    }
                    throw;
                }

                if (string.IsNullOrWhiteSpace(text))
                {
                    return;
                }

                var data = JsonConvert.DeserializeObject(text, grainState.GetType(), settings);
                var dict = ((GrainState)data).AsDictionary();
                grainState.SetAll(dict);
                grainState.Etag = blob.Properties.ETag;
            }
            catch (Exception ex)
            {
                Log.Error(0, ex.ToString());
                throw;
            }
        }
Exemplo n.º 11
0
    public async Task ReadStateAsync( string grainType, GrainReference grainId, GrainState grainState )
    {
      try
      {
        var blobName = GetBlobName( grainType, grainId );
        var blob = container.GetBlockBlobReference( blobName );

        var exists = await blob.ExistsAsync();
        if( !exists )
        {
          return;
        }

        var text = await blob.DownloadTextAsync();
        if( string.IsNullOrWhiteSpace( text ) )
        {
          return;
        }

        var data = JsonConvert.DeserializeObject( text, grainState.GetType(), settings );
        var dict = ( ( GrainState )data ).AsDictionary();
        grainState.SetAll( dict );
        grainState.Etag = blob.Properties.ETag;
      }
      catch( Exception ex )
      {
        Log.Error( 0, ex.ToString() );
      }
    }
 /// <summary>
 /// Constructs a grain state instance by deserializing a JSON document.
 /// </summary>
 /// <param name="grainState">Grain state to be populated for storage.</param>
 /// <param name="entityData">JSON storage format representaiton of the grain state.</param>
 protected static void ConvertFromStorageFormat(GrainState grainState, string entityData)
 {
     object data = JsonConvert.DeserializeObject(entityData, grainState.GetType(), GrainStateMongoDataManager.JsonSetting);
     var dict = ((GrainState)data).AsDictionary();
     grainState.SetAll(dict);
 }
Exemplo n.º 13
0
 /// <summary>
 /// Deserialize from Azure storage format
 /// </summary>
 /// <param name="grainState">The grain state data to be deserialized in to</param>
 /// <param name="entity">The Azure table entity the stored data</param>
 internal void ConvertFromStorageFormat(GrainState grainState, GrainStateEntity entity)
 {
     Dictionary<string, object> dataValues = null;
     try
     {
         if (entity.Data != null)
         {
             // Rehydrate
             dataValues = SerializationManager.DeserializeFromByteArray<Dictionary<string, object>>(entity.Data);
         }
         else if (entity.StringData != null)
         {
             dataValues = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(entity.StringData, jsonSettings);
         }
         if (dataValues != null)
         {
             grainState.SetAll(dataValues);
         }
         // Else, no data found
     }
     catch (Exception exc)
     {
         var sb = new StringBuilder();
         if (entity.Data != null)
         {
             sb.AppendFormat("Unable to convert from storage format GrainStateEntity.Data={0}", entity.Data);
         }
         else if (entity.StringData != null)
         {
             sb.AppendFormat("Unable to convert from storage format GrainStateEntity.StringData={0}", entity.StringData);
         }
         if (dataValues != null)
         {
             int i = 1;
             foreach (var dvKey in dataValues.Keys)
             {
                 object dvValue = dataValues[dvKey];
                 sb.AppendLine();
                 sb.AppendFormat("Data #{0} Key={1} Value={2} Type={3}", i, dvKey, dvValue, dvValue.GetType());
                 i++;
             }
         }
         Log.Error(0, sb.ToString(), exc);
         throw new AggregateException(sb.ToString(), exc);
     }
 }