private JsonDocumentMetadata ReadDocumentMetadata(string key) { var loweredKey = CreateKey(key); var metadataReadResult = metadataIndex.Read(Snapshot, loweredKey, writeBatch.Value); if (metadataReadResult == null) { return(null); } using (var stream = metadataReadResult.Reader.AsStream()) { stream.Position = 0; var etag = stream.ReadEtag(); var originalKey = stream.ReadString(); var lastModifiedDateTimeBinary = stream.ReadInt64(); var existingCachedDocument = documentCacher.GetCachedDocument(loweredKey, etag); var metadata = existingCachedDocument != null ? existingCachedDocument.Metadata : stream.ToJObject(); var lastModified = DateTime.FromBinary(lastModifiedDateTimeBinary); return(new JsonDocumentMetadata { Key = originalKey, Etag = etag, Metadata = metadata, LastModified = lastModified }); } }
private JsonDocumentMetadata ReadDocumentMetadata(string normalizedKey, Slice sliceKey, out int size) { try { var metadataReadResult = metadataIndex.Read(Snapshot, sliceKey, writeBatch.Value); size = 0; if (metadataReadResult == null) { return(null); } using (var stream = metadataReadResult.Reader.AsStream()) { stream.Position = 0; var etag = stream.ReadEtag(); var originalKey = stream.ReadString(); var lastModifiedDateTimeBinary = stream.ReadInt64(); var existingCachedDocument = documentCacher.GetCachedDocument(normalizedKey, etag); size = (int)stream.Length; var metadata = existingCachedDocument != null ? existingCachedDocument.Metadata : stream.ToJObject(); var lastModified = DateTime.FromBinary(lastModifiedDateTimeBinary); return(new JsonDocumentMetadata { Key = originalKey, Etag = etag, Metadata = metadata, LastModified = lastModified }); } } catch (Exception e) { throw new InvalidDataException("Failed to de-serialize metadata of document " + normalizedKey, e); } }
private Tuple <MemoryStream, RavenJObject, int> ReadMetadata(string key, Guid etag, Func <byte[]> getData, out RavenJObject metadata) { var cachedDocument = documentCacher.GetCachedDocument(key, etag); if (cachedDocument != null) { metadata = cachedDocument.Metadata; return(Tuple.Create <MemoryStream, RavenJObject, int>(null, cachedDocument.Document, cachedDocument.Size)); } var buffer = getData(); var memoryStream = new MemoryStream(buffer, 0, buffer.Length, true, true); metadata = memoryStream.ToJObject(); return(Tuple.Create <MemoryStream, RavenJObject, int>(memoryStream, null, (int)memoryStream.Length)); }