public static (string, MonikerVersionPartId) ToGrainKey(this MonikerVersionId monikerId) { var(grainKey, monikerVersionPartId) = ($"{monikerId.Id.Key}||{monikerId.Version}", new MonikerVersionPartId { Id = monikerId.Id, Version = monikerId.Version }); return(grainKey, monikerVersionPartId); }
public async Task <DataSourceGetResponse> GetAsync([Required] string key, int version) { var requestUid = Guid.NewGuid().ToString(); // TODO: Bind the UID to the request _logger.LogInformation($"Started processing Get request: '{requestUid}' from '{Request.HttpContext.Connection.RemoteIpAddress}:{Request.HttpContext.Connection.RemotePort}'"); var monikerVersionId = new MonikerVersionId { Id = new MonikerIdentifier { Key = key }, Version = (ulong)version, Timestamp = DateTimeOffset.Now.ToPointInTime() }; try { var(grainKey, monikerVersionPartId) = monikerVersionId.ToGrainKey(); var result = await Task.Run(() => _orleansClient.GetGrain <ICacheItemGrain>(grainKey).GetAsync(monikerVersionPartId)); var storedValue = result.FirstOrDefault(); return(result != null ? new DataSourceGetResponse { Success = storedValue } : new DataSourceGetResponse { NotFound = new MonikerId { Version = monikerVersionId } }); } catch (Exception e) { _logger.LogError($"{e} while processing: '{requestUid}' from '{Request.HttpContext.Connection.RemoteIpAddress}:{Request.HttpContext.Connection.RemotePort}'"); return(new DataSourceGetResponse { Error = new CacheError { Error = new InternalError { StorageError = e.Message } } }); // throw; } finally { _logger.LogInformation($"Finished processing Get request: '{requestUid}' from '{Request.HttpContext.Connection.RemoteIpAddress}:{Request.HttpContext.Connection.RemotePort}'"); } }