public void SetUp()
 {
     _model = new Model();
     _sut = SnapshotReaderFactory.Create();
     CreateSnapshotStreamWithOneSnapshot(_sut.Configuration.StreamNameResolver.Resolve(_model.KnownIdentifier));
 }
Example #2
0
 public virtual ushort? ReadVersion(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
 {
     return snapshot.ReadVersion(TableName, key, writeBatch);
 }
Example #3
0
 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();
 }
Example #5
0
		public virtual IIterator Iterate(SnapshotReader snapshot, WriteBatch writeBatch)
		{
			return snapshot.Iterate(TableName);
		}
Example #6
0
		public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch, out ushort? version)
		{
			return snapshot.Contains(TableName, key, out version, writeBatch);
		}
Example #7
0
 public virtual ushort?ReadVersion(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
 {
     return(snapshot.ReadVersion(TableName, key, writeBatch));
 }
Example #8
0
		public virtual ReadResult Read(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
		{
			return snapshot.Read(TableName, key, writeBatch);
		}
Example #9
0
 public virtual IIterator Iterate(SnapshotReader snapshot, WriteBatch writeBatch)
 {
     return(snapshot.Iterate(TableName));
 }
Example #10
0
 public int GetDataSize(SnapshotReader snapshot, Slice key)
 {
     return(snapshot.GetDataSize(TableName, key));
 }
Example #11
0
 public virtual IIterator MultiRead(SnapshotReader snapshot, Slice key)
 {
     return(snapshot.MultiRead(TableName, key));
 }
Example #12
0
 public virtual ReadResult Read(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
 {
     return(snapshot.Read(TableName, key, writeBatch));
 }
Example #13
0
 public virtual ushort?ReadVersion(SnapshotReader snapshot, Slice key)
 {
     return(snapshot.ReadVersion(TableName, key));
 }
Example #14
0
		public virtual ushort? ReadVersion(SnapshotReader snapshot, Slice key)
		{
			return snapshot.ReadVersion(TableName, key);
		}
Example #15
0
        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);
            }
        }
Example #16
0
		//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;
			}
		}
Example #17
0
 protected StorageActionsBase(SnapshotReader snapshot, IdGenerator idGenerator, IBufferPool bufferPool)
 {
     this.bufferPool = bufferPool;
     Snapshot        = snapshot;
     IdGenerator     = idGenerator;
 }
Example #18
0
		public virtual IIterator MultiRead(SnapshotReader snapshot, Slice key)
		{
			return snapshot.MultiRead(TableName, key);
		}
Example #19
0
        public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
        {
            ushort?version;

            return(Contains(snapshot, key, writeBatch, out version));
        }
Example #20
0
		public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
		{
			ushort? version;
			return Contains(snapshot, key, writeBatch, out version);
		}
Example #21
0
 public bool Contains(SnapshotReader snapshot, Slice key, WriteBatch writeBatch, out ushort?version)
 {
     return(snapshot.Contains(TableName, key, out version, writeBatch));
 }
Example #22
0
		public int GetDataSize(SnapshotReader snapshot, Slice key)
		{
			return snapshot.GetDataSize(TableName, key);
		}
Example #23
0
 public virtual StructReadResult <T> ReadStruct(SnapshotReader snapshot, Slice key, WriteBatch writeBatch)
 {
     return(snapshot.ReadStruct(TableName, key, Schema, writeBatch));
 }