コード例 #1
0
        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
                });
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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));
        }