public void SetUp() { _model = new Model(); _sut = SnapshotReaderFactory.Create(); CreateSnapshotStreamWithOneSnapshot(_sut.Configuration.StreamNameResolver.Resolve(_model.KnownIdentifier)); }
public virtual ushort? ReadVersion(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { return snapshot.ReadVersion(TableName, key, writeBatch); }
public StorageActionsAccessor(TableStorage storage, Reference <WriteBatch> writeBatch, SnapshotReader snapshot, IdGenerator generator, IBufferPool bufferPool) : base(snapshot, generator, bufferPool) { this.storage = storage; this.writeBatch = writeBatch; }
public void SetUp() { _model = new Model(); _sut = SnapshotReaderFactory.Create(); }
public virtual IIterator Iterate(SnapshotReader snapshot, WriteBatch writeBatch) { return snapshot.Iterate(TableName); }
public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch, out ushort? version) { return snapshot.Contains(TableName, key, out version, writeBatch); }
public virtual ushort?ReadVersion(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { return(snapshot.ReadVersion(TableName, key, writeBatch)); }
public virtual ReadResult Read(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { return snapshot.Read(TableName, key, writeBatch); }
public virtual IIterator Iterate(SnapshotReader snapshot, WriteBatch writeBatch) { return(snapshot.Iterate(TableName)); }
public int GetDataSize(SnapshotReader snapshot, Slice key) { return(snapshot.GetDataSize(TableName, key)); }
public virtual IIterator MultiRead(SnapshotReader snapshot, Slice key) { return(snapshot.MultiRead(TableName, key)); }
public virtual ReadResult Read(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { return(snapshot.Read(TableName, key, writeBatch)); }
public virtual ushort?ReadVersion(SnapshotReader snapshot, Slice key) { return(snapshot.ReadVersion(TableName, key)); }
public virtual ushort? ReadVersion(SnapshotReader snapshot, Slice key) { return snapshot.ReadVersion(TableName, key); }
public void FaultyOverflowPagesHandling_CannotModifyReadOnlyPages(int initialNumberOfDocs, int numberOfModifications, int seed) { const string documents = "documents"; const string keyByEtag = "documents_key_by_etag"; const string metadata = "documents_metadata"; var inMemoryKeysByEtag = new Dictionary <Guid, string>(); var inMemoryKeys = new HashSet <string>(); var r = new Random(seed); var uuidGenerator = new UuidGenerator(); using (var tx = Env.NewTransaction(TransactionFlags.ReadWrite)) { var docsTree = Env.CreateTree(tx, documents); var metadataTree = Env.CreateTree(tx, metadata); var indexTree = Env.CreateTree(tx, keyByEtag); for (int i = 0; i < initialNumberOfDocs; i++) { var etag = uuidGenerator.CreateSequentialUuid(); var docKey = get_id(etag, r); put_doc(r, etag, inMemoryKeysByEtag, inMemoryKeys, docKey, docsTree, metadataTree, indexTree); } tx.Commit(); } for (int i = 0; i < numberOfModifications; i++) { using (var tx = Env.NewTransaction(TransactionFlags.ReadWrite)) { var docsTree = tx.ReadTree(documents); var metadataTree = tx.ReadTree(metadata); var indexTree = tx.ReadTree(keyByEtag); if (r.Next(3) == 0) { // insert new var etag = uuidGenerator.CreateSequentialUuid(); var docKey = get_id(etag, r); put_doc(r, etag, inMemoryKeysByEtag, inMemoryKeys, docKey, docsTree, metadataTree, indexTree); } else { // update existing var docCount = inMemoryKeysByEtag.Values.Count; var docKeyToUpdate = inMemoryKeysByEtag.Values.Skip(r.Next(0, docCount - 1)).First(); var etag = uuidGenerator.CreateSequentialUuid(); put_doc(r, etag, inMemoryKeysByEtag, inMemoryKeys, docKeyToUpdate, docsTree, metadataTree, indexTree); } tx.Commit(); } } using (var tx = Env.NewTransaction(TransactionFlags.Read)) { var docsTree = tx.ReadTree(documents); var metadataTree = tx.ReadTree(metadata); var reader = new SnapshotReader(tx); var count = 0; using (var iterator = reader.Iterate(keyByEtag)) { iterator.Seek(Slice.BeforeAllKeys); do { var etag = Guid.Parse(iterator.CurrentKey.ToString()); string key; using (var currentDataStream = iterator.CreateReaderForCurrent().AsStream()) { var keyBytes = currentDataStream.ReadData(); key = Encoding.UTF8.GetString(keyBytes); } var inMemoryKey = inMemoryKeysByEtag[etag]; Assert.Equal(inMemoryKey, key); var docReadResult = docsTree.Read(key); Assert.NotNull(docReadResult); var metadataReader = metadataTree.Read(key).Reader; Assert.NotNull(metadataReader); var etagFromMetadata = new byte[16]; metadataReader.Read(etagFromMetadata, 0, 16); var readEtag = new Guid(etagFromMetadata); if (etag != readEtag) { string existingDocKey; if (inMemoryKeysByEtag.TryGetValue(readEtag, out existingDocKey)) { Console.WriteLine("Etag " + readEtag + " belongs to " + existingDocKey + " document"); } else { Console.WriteLine("There is no document with etag " + readEtag); } } Assert.Equal(etag, readEtag); count++; }while (iterator.MoveNext()); } Assert.Equal(inMemoryKeysByEtag.Count, count); } }
//for debugging purposes public Dictionary<string, string> Dump(SnapshotReader snapshot) { using (var iterator = snapshot.Iterate(TableName)) { if (!iterator.Seek(Slice.BeforeAllKeys)) return new Dictionary<string, string>(); var results = new Dictionary<string, string>(); do { bool isMultiTreeKey; using (var multiIterator = snapshot.MultiRead(TableName, iterator.CurrentKey)) { if (!multiIterator.Seek(Slice.BeforeAllKeys)) { isMultiTreeKey = false; } else { isMultiTreeKey = true; const string subtreeKeyPrefix = "[sub tree val: ]"; do { results.Add(subtreeKeyPrefix + iterator.CurrentKey + " " + results.Count , new StreamReader(multiIterator.CreateReaderForCurrent().AsStream()).ReadToEnd()); } while (multiIterator.MoveNext()); } } if(!isMultiTreeKey) results.Add(iterator.CurrentKey.ToString(), new StreamReader(iterator.CreateReaderForCurrent().AsStream()).ReadToEnd()); } while (iterator.MoveNext()); return results; } }
protected StorageActionsBase(SnapshotReader snapshot, IdGenerator idGenerator, IBufferPool bufferPool) { this.bufferPool = bufferPool; Snapshot = snapshot; IdGenerator = idGenerator; }
public virtual IIterator MultiRead(SnapshotReader snapshot, Slice key) { return snapshot.MultiRead(TableName, key); }
public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { ushort?version; return(Contains(snapshot, key, writeBatch, out version)); }
public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { ushort? version; return Contains(snapshot, key, writeBatch, out version); }
public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch, out ushort?version) { return(snapshot.Contains(TableName, key, out version, writeBatch)); }
public int GetDataSize(SnapshotReader snapshot, Slice key) { return snapshot.GetDataSize(TableName, key); }
public virtual StructReadResult <T> ReadStruct(SnapshotReader snapshot, Slice key, WriteBatch writeBatch) { return(snapshot.ReadStruct(TableName, key, Schema, writeBatch)); }