private void EnsureDataChunksCacheLoaded(string userId) { if (_dataChunksCache.ContainsKey(userId) && _dataChunksCache[userId] != null) { return; } EnsureChunksDirectoryExists(userId); List <LocalDataChunkInfo> result = new List <LocalDataChunkInfo>(); var info = new DirectoryInfo(GetChunksDirectory(userId)); var filesInfo = info.GetFiles(); foreach (var file in filesInfo) { var requestId = file.Name; var json = File.ReadAllText(file.FullName); var baseRequest = RData.LitJson.JsonMapper.ToObject <JsonRpc.JsonRpcBaseRequest>(json); var chunkInfo = new LocalDataChunkInfo() { requestCreatedAt = baseRequest.CreatedAt, requestId = requestId, requestJson = json }; result.Add(chunkInfo); } _dataChunksCache[userId] = result .OrderBy(chunkInfo => chunkInfo.requestCreatedAt) // Order by creation time .ToDictionary(chunkInfo => chunkInfo.requestId, chunkInfo => chunkInfo); // Convert into the dictionary }
public void SaveDataChunk(string userId, BulkRequest dataChunk) { // First, load the cache EnsureDataChunksCacheLoaded(userId); // Save on the disk EnsureChunksDirectoryExists(userId); var json = RData.LitJson.JsonMapper.ToJson(dataChunk); var path = GetChunkFilePath(userId, dataChunk); File.WriteAllText(path, json); // Save into the cache var chunkInfo = new LocalDataChunkInfo() { requestCreatedAt = dataChunk.CreatedAt, requestId = dataChunk.Id, requestJson = json }; _dataChunksCache[userId].Add(dataChunk.Id, chunkInfo); }