コード例 #1
0
        public LogV2StreamExistenceFilterInitializerTests()
        {
            _log        = new FakeInMemoryTfReader(recordOffset: _recordOffset);
            _tableIndex = new TableIndex <string>(
                directory: Fixture.Directory,
                lowHasher: new XXHashUnsafe(),
                highHasher: new Murmur3AUnsafe(),
                emptyStreamId: string.Empty,
                memTableFactory: () => new HashListMemTable(
                    version: PTableVersions.IndexV4,
                    maxSize: 1_000_000 * 2),
                maxSizeForMemory: 100_000,
                tfReaderFactory: () => new TFReaderLease(_log),
                ptableVersion: PTableVersions.IndexV4,
                maxAutoMergeIndexLevel: int.MaxValue,
                pTableMaxReaderCount: 5);
            _tableIndex.Initialize(0);

            _sut = new LogV2StreamExistenceFilterInitializer(
                tfReaderFactory: () => new TFReaderLease(_log),
                tableIndex: _tableIndex);
            var hasher = new CompositeHasher <string>(new XXHashUnsafe(), new Murmur3AUnsafe());

            _filter = new MockExistenceFilter(hasher);
        }
コード例 #2
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _tableIndex = new TableIndex(PathName,
                                         () => new HashListMemTable(maxSize: 40),
                                         () => { throw new InvalidOperationException(); },
                                         maxSizeForMemory: 20);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(0, 0xDEAD, 0, 0xFF00);
            _tableIndex.Add(0, 0xDEAD, 1, 0xFF01);

            _tableIndex.Add(0, 0xBEEF, 0, 0xFF00);
            _tableIndex.Add(0, 0xBEEF, 1, 0xFF01);

            _tableIndex.Add(0, 0xABBA, 0, 0xFF00);
            _tableIndex.Add(0, 0xABBA, 1, 0xFF01);
            _tableIndex.Add(0, 0xABBA, 2, 0xFF02);
            _tableIndex.Add(0, 0xABBA, 3, 0xFF03);

            _tableIndex.Add(0, 0xDEAD, 0, 0xFF10);
            _tableIndex.Add(0, 0xDEAD, 1, 0xFF11);

            _tableIndex.Add(0, 0xADA, 0, 0xFF00);
        }
コード例 #3
0
 protected override void when()
 {
     //ptable 1 with 32bit indexes
     _tableIndex.Add(1, streamId, 0, 2);
     _tableIndex.Add(1, streamId, 1, 4);
     _tableIndex.Add(1, streamId, 2, 6);
     System.Threading.Thread.Sleep(500);
     _tableIndex.Close(false);
     _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, "",
                                           () => new HashListMemTable(PTableVersions.IndexV2, maxSize: _maxMemTableSize),
                                           () => _fakeReader,
                                           PTableVersions.IndexV2,
                                           5, Constants.PTableMaxReaderCountDefault,
                                           maxSizeForMemory: _maxMemTableSize,
                                           maxTablesPerLevel: 2);
     _tableIndex.Initialize(long.MaxValue);
     _indexReader = new IndexReader <string>(
         _indexBackend, _tableIndex,
         _logFormat.StreamNamesProvider,
         _logFormat.StreamIdValidator,
         _logFormat.StreamExistenceFilterReader,
         new EventStore.Core.Data.StreamMetadata(),
         _hashCollisionReadLimit, skipIndexScanOnRead: false);
     //memtable with 64bit indexes
     _tableIndex.Add(1, streamId, 0, 8);
 }
コード例 #4
0
        public void SetUp()
        {
            _indexDir   = Path.Combine(Path.GetTempPath(), "idx-" + Guid.NewGuid().ToString());
            _tableIndex = new TableIndex(_indexDir, () => new HashListMemTable(), new InMemoryCheckpoint(), maxSizeForMemory: 2, maxTablesPerLevel: 2);
            _tableIndex.Initialize();

            // ptable level 2
            _tableIndex.Add(0xDEAD, 0, 0xFF00);
            _tableIndex.Add(0xDEAD, 1, 0xFF01);
            _tableIndex.Add(0xBEEF, 0, 0xFF00);
            _tableIndex.Add(0xBEEF, 1, 0xFF01);
            _tableIndex.Add(0xABBA, 0, 0xFF00);
            _tableIndex.Add(0xABBA, 1, 0xFF01);
            _tableIndex.Add(0xABBA, 0, 0xFF02);
            _tableIndex.Add(0xABBA, 1, 0xFF03);

            // ptable level 1
            _tableIndex.Add(0xADA, 0, 0xFF00);
            _tableIndex.Add(0xCEED, 10, 0xFFF1);
            _tableIndex.Add(0xBABA, 0, 0xFF00);
            _tableIndex.Add(0xDEAD, 0, 0xFF10);

            // ptable level 0
            _tableIndex.Add(0xBABA, 1, 0xFF01);
            _tableIndex.Add(0xDEAD, 1, 0xFF11);

            // memtable
            _tableIndex.Add(0xADA, 0, 0xFF01);

            Thread.Sleep(500);
        }
コード例 #5
0
        public void Setup()
        {
            given();
            _indexDir     = PathName;
            _fakeReader   = new TFReaderLease(new FakeReader());
            _indexBackend = new FakeIndexBackend <string>(_fakeReader);

            _logFormat = LogFormatHelper <LogFormat.V2, string> .LogFormatFactory.Create(new() {
                InMemory = true,
            });

            _lowHasher  = _logFormat.LowHasher;
            _highHasher = _logFormat.HighHasher;
            _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, _logFormat.EmptyStreamId,
                                                  () => new HashListMemTable(PTableVersions.IndexV1, maxSize: _maxMemTableSize),
                                                  () => _fakeReader,
                                                  PTableVersions.IndexV1,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: _maxMemTableSize,
                                                  maxTablesPerLevel: 2);
            _logFormat.StreamNamesProvider.SetTableIndex(_tableIndex);
            _tableIndex.Initialize(long.MaxValue);
            _indexReader = new IndexReader <string>(_indexBackend, _tableIndex,
                                                    _logFormat.StreamNamesProvider,
                                                    _logFormat.StreamIdValidator,
                                                    _logFormat.StreamExistenceFilterReader,
                                                    new EventStore.Core.Data.StreamMetadata(),
                                                    _hashCollisionReadLimit, skipIndexScanOnRead: false);

            when();
            //wait for the mem table to be dumped
            System.Threading.Thread.Sleep(500);
        }
コード例 #6
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex <string>(PathName, _lowHasher, _highHasher, "",
                                                  () => new HashListMemTable(version: _ptableVersion, maxSize: 40),
                                                  () => { throw new InvalidOperationException(); },
                                                  _ptableVersion,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: 20,
                                                  skipIndexVerify: _skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(0, "0xDEAD", 0, 0xFF00);
            _tableIndex.Add(0, "0xDEAD", 1, 0xFF01);

            _tableIndex.Add(0, "0xJEEP", 0, 0xFF00);
            _tableIndex.Add(0, "0xJEEP", 1, 0xFF01);

            _tableIndex.Add(0, "0xABBA", 0, 0xFF00);
            _tableIndex.Add(0, "0xABBA", 1, 0xFF01);
            _tableIndex.Add(0, "0xABBA", 2, 0xFF02);
            _tableIndex.Add(0, "0xABBA", 3, 0xFF03);

            _tableIndex.Add(0, "0xDEAD", 0, 0xFF10);
            _tableIndex.Add(0, "0xDEAD", 1, 0xFF11);

            _tableIndex.Add(0, "0xADA", 0, 0xFF00);
        }
コード例 #7
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir   = PathName;
            _tableIndex = new TableIndex(_indexDir, () => new HashListMemTable(maxSize: 10), maxSizeForMemory: 5);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(0, 0xDEAD, 0, 0xFF00);
            _tableIndex.Add(0, 0xDEAD, 1, 0xFF01);

            _tableIndex.Add(0, 0xBEEF, 0, 0xFF00);
            _tableIndex.Add(0, 0xBEEF, 1, 0xFF01);

            _tableIndex.Add(0, 0xABBA, 0, 0xFF00); // 1st ptable0

            _tableIndex.Add(0, 0xABBA, 1, 0xFF01);
            _tableIndex.Add(0, 0xABBA, 2, 0xFF02);
            _tableIndex.Add(0, 0xABBA, 3, 0xFF03);

            _tableIndex.Add(0, 0xADA, 0, 0xFF00);  // simulates duplicate due to concurrency in TableIndex (see memtable below)
            _tableIndex.Add(0, 0xDEAD, 0, 0xFF10); // 2nd ptable0

            _tableIndex.Add(0, 0xDEAD, 1, 0xFF11); // in memtable
            _tableIndex.Add(0, 0xADA, 0, 0xFF00);  // in memtable
        }
コード例 #8
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeTfReader());

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 10),
                                         () => fakeReader,
                                         _ptableVersion,
                                         maxSizeForMemory: 5);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(0, "0xDEAD", 0, 0xFF00);
            _tableIndex.Add(0, "0xDEAD", 1, 0xFF01);

            _tableIndex.Add(0, "0xBEEF", 0, 0xFF00);
            _tableIndex.Add(0, "0xBEEF", 1, 0xFF01);

            _tableIndex.Add(0, "0xABBA", 0, 0xFF00); // 1st ptable0

            _tableIndex.Add(0, "0xABBA", 1, 0xFF01);
            _tableIndex.Add(0, "0xABBA", 2, 0xFF02);
            _tableIndex.Add(0, "0xABBA", 3, 0xFF03);

            _tableIndex.Add(0, "0xADA", 0, 0xFF00);  // simulates duplicate due to concurrency in TableIndex (see memtable below)
            _tableIndex.Add(0, "0xDEAD", 0, 0xFF10); // 2nd ptable0

            _tableIndex.Add(0, "0xDEAD", 1, 0xFF11); // in memtable
            _tableIndex.Add(0, "0xADA", 0, 0xFF00);  // in memtable
        }
コード例 #9
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(PathName, _lowHasher, _highHasher,
                                         () => new HashListMemTable(version: _ptableVersion, maxSize: 40),
                                         () => { throw new InvalidOperationException(); },
                                         _ptableVersion,
                                         maxSizeForMemory: 20,
                                         skipIndexVerify: _skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(0, "0xDEAD", 0, 0xFF00);
            _tableIndex.Add(0, "0xDEAD", 1, 0xFF01);

            _tableIndex.Add(0, "0xJEEP", 0, 0xFF00);
            _tableIndex.Add(0, "0xJEEP", 1, 0xFF01);

            _tableIndex.Add(0, "0xABBA", 0, 0xFF00);
            _tableIndex.Add(0, "0xABBA", 1, 0xFF01);
            _tableIndex.Add(0, "0xABBA", 2, 0xFF02);
            _tableIndex.Add(0, "0xABBA", 3, 0xFF03);

            _tableIndex.Add(0, "0xDEAD", 0, 0xFF10);
            _tableIndex.Add(0, "0xDEAD", 1, 0xFF11);

            _tableIndex.Add(0, "0xADA", 0, 0xFF00);
        }
コード例 #10
0
        public void ConstructTableIndexWithCorruptIndexEntries(byte version, bool skipIndexVerify, bool createForceVerifyFile = false)
        {
            base.TestFixtureSetUp();
            var lowHasher  = new XXHashUnsafe();
            var highHasher = new Murmur3AUnsafe();
            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _tableIndex = new TableIndex(PathName, lowHasher, highHasher,
                                         () => new HashListMemTable(version, maxSize: NumIndexEntries),
                                         () => fakeReader,
                                         version,
                                         5,
                                         maxSizeForMemory: NumIndexEntries,
                                         skipIndexVerify: skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);

            //create index entries
            for (int i = 1; i <= NumIndexEntries; i++)
            {
                _tableIndex.Add(i * 1337, StreamName, i, i * 1337);
            }
            _tableIndex.Close(false);

            //load index map to obtain ptable filenames
            _indexMap = IndexMap.FromFile(Path.Combine(PathName, TableIndex.IndexMapFilename));
            List <string> ptableFiles = new List <string>();

            foreach (string ptableFilename in _indexMap.GetAllFilenames())
            {
                ptableFiles.Add(ptableFilename);
            }

            _indexMap.Dispose(TimeSpan.FromSeconds(5));

            //corrupt ptable files
            foreach (string ptableFilename in ptableFiles)
            {
                CorruptPTableFile(ptableFilename, version, "zeroOutMiddleEntry");
            }

            //create force verify file if requested
            if (createForceVerifyFile)
            {
                using (FileStream fs = new FileStream(Path.Combine(PathName, TableIndex.ForceIndexVerifyFilename), FileMode.OpenOrCreate)){
                };
            }

            //load table index again
            _tableIndex = new TableIndex(PathName, lowHasher, highHasher,
                                         () => new HashListMemTable(version, maxSize: NumIndexEntries),
                                         () => fakeReader,
                                         version,
                                         5,
                                         maxSizeForMemory: NumIndexEntries,
                                         skipIndexVerify: skipIndexVerify,
                                         indexCacheDepth: 8);
            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #11
0
 public override void TestFixtureSetUp()
 {
     base.TestFixtureSetUp();
     _tableIndex = new TableIndex(PathName,
                                  () => new HashListMemTable(maxSize: 20),
                                  () => { throw new InvalidOperationException(); },
                                  maxSizeForMemory: 10);
     _tableIndex.Initialize(long.MaxValue);
 }
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV1, maxSize: 5),
                                         () => fakeReader,
                                         PTableVersions.IndexV1,
                                         5,
                                         maxSizeForMemory: 5 + _extraStreamHashesAtBeginning + _extraStreamHashesAtEnd,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            Assert.Greater(_lowHasher.Hash("abcd"), _lowHasher.Hash("LPN-FC002_LPK51001"));
            for (int i = 0; i < _extraStreamHashesAtBeginning; i++)
            {
                _tableIndex.Add(1, "abcd", i, i + 1);
            }

            Assert.Less(_lowHasher.Hash("wxyz"), _lowHasher.Hash("LPN-FC002_LPK51001"));
            for (int i = 0; i < _extraStreamHashesAtEnd; i++)
            {
                _tableIndex.Add(1, "wxyz", i, i + 1);
            }

            _tableIndex.Add(1, "LPN-FC002_LPK51001", 0, 1);
            _tableIndex.Add(1, "account--696193173", 0, 2);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 1, 3);
            _tableIndex.Add(1, "account--696193173", 1, 4);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 2, 5);

            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 5),
                                         () => fakeReader,
                                         _ptableVersion,
                                         5,
                                         maxSizeForMemory: 5,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "account--696193173", 2, 6);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 3, 7);
            _tableIndex.Add(1, "account--696193173", 3, 8);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 4, 9);
            _tableIndex.Add(1, "account--696193173", 4, 10);

            Thread.Sleep(500);
        }
コード例 #13
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;

            var fakeReader  = new TFReaderLease(new FakeIndexReader());
            int readerCount = 0;

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                         () => {
                readerCount++;
                if (readerCount < 4)                         // One for each table add.
                {
                    return(fakeReader);
                }

                throw new Exception("Expected exception");
            },
                                         PTableVersions.IndexV4,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 5);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "testStream-1", 0, 0);
            _tableIndex.Add(1, "testStream-1", 1, 100);
            _tableIndex.Add(1, "testStream-1", 2, 200);
            _tableIndex.Add(1, "testStream-1", 3, 300);
            _tableIndex.Add(1, "testStream-1", 4, 400);
            _tableIndex.Add(1, "testStream-1", 5, 500);

            _log = new FakeTFScavengerLog();
            Assert.That(() => _tableIndex.Scavenge(_log, CancellationToken.None),
                        Throws.Exception.With.Message.EqualTo("Expected exception"));

            // Check it's loadable still.
            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                         () => fakeReader,
                                         PTableVersions.IndexV4,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 5);

            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #14
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();
            var lowHasher  = new XXHashUnsafe();
            var highHasher = new Murmur3AUnsafe();

            _tableIndex = new TableIndex(PathName, lowHasher, highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 20),
                                         () => { throw new InvalidOperationException(); },
                                         _ptableVersion,
                                         maxSizeForMemory: 10);
            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #15
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;

            var cancellationTokenSource = new CancellationTokenSource();

            var fakeReader = new TFReaderLease(new FakeIndexReader(l => {
                cancellationTokenSource.Cancel();
                return(true);
            }));

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                         () => fakeReader,
                                         PTableVersions.IndexV4,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 5);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "testStream-1", 0, 0);
            _tableIndex.Add(1, "testStream-1", 1, 100);
            _tableIndex.Add(1, "testStream-1", 2, 200);
            _tableIndex.Add(1, "testStream-1", 3, 300);
            _tableIndex.Add(1, "testStream-1", 4, 400);
            _tableIndex.Add(1, "testStream-1", 5, 500);

            _log = new FakeTFScavengerLog();


            Assert.That(() => _tableIndex.Scavenge(_log, cancellationTokenSource.Token),
                        Throws.InstanceOf <OperationCanceledException>());

            // Check it's loadable still.
            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                         () => fakeReader,
                                         PTableVersions.IndexV4,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 5);

            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #16
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            ReadIndex.Close();
            ReadIndex.Dispose();

            Thread.Sleep(500);
            TableIndex.ClearAll(removeFiles: false);

            TableIndex = new TableIndex(Path.Combine(PathName, "index"), () => new HashListMemTable(), maxSizeForMemory: 5);
            TableIndex.Initialize();

            ReadIndex = new ReadIndex(new NoopPublisher(), 2, () => new TFChunkSequentialReader(Db, WriterCheckpoint, 0), () => new TFChunkReader(Db, WriterCheckpoint), TableIndex, new ByLengthHasher());
            ReadIndex.Build();
        }
コード例 #17
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            var lowHasher  = new XXHashUnsafe();
            var highHasher = new Murmur3AUnsafe();

            _tableIndex = new TableIndex(PathName, lowHasher, highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 20),
                                         () => { throw new InvalidOperationException(); },
                                         _ptableVersion,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 10,
                                         skipIndexVerify: _skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #18
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;

            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, "",
                                                  () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                                  () => throw new Exception("Expected exception") /* throw an exception when the first PTable scavenge starts and tries to acquire a reader */,
                                                  PTableVersions.IndexV4,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: 2,
                                                  maxTablesPerLevel: 5,
                                                  useBloomFilter: _useBloomFilter);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "testStream-1", 0, 0);
            _tableIndex.Add(1, "testStream-1", 1, 100);
            _tableIndex.Add(1, "testStream-1", 2, 200);
            _tableIndex.Add(1, "testStream-1", 3, 300);
            _tableIndex.Add(1, "testStream-1", 4, 400);
            _tableIndex.Add(1, "testStream-1", 5, 500);

            _log = new FakeTFScavengerLog();
            Assert.That(() => _tableIndex.Scavenge(_log, CancellationToken.None),
                        Throws.Exception.With.Message.EqualTo("Expected exception"));

            // Check it's loadable still.
            _tableIndex.Close(false);

            _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, "",
                                                  () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                                  () => fakeReader,
                                                  PTableVersions.IndexV4,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: 2,
                                                  maxTablesPerLevel: 5,
                                                  useBloomFilter: _useBloomFilter);

            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #19
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;

            var fakeReader = new TFReaderLease(new FakeIndexReader(l => !Deleted.Contains(l)));

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, "",
                                                  () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                                  () => fakeReader,
                                                  PTableVersions.IndexV4,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: 2,
                                                  maxTablesPerLevel: 5, skipIndexVerify: _skipIndexVerify,
                                                  useBloomFilter: _useBloomFilter);
            _tableIndex.Initialize(long.MaxValue);


            _tableIndex.Add(1, "testStream-1", 0, 0);
            _tableIndex.Add(1, "testStream-1", 1, 100);
            _tableIndex.Add(1, "testStream-1", 2, 200);
            _tableIndex.Add(1, "testStream-1", 3, 300);
            _tableIndex.Add(1, "testStream-1", 4, 400);
            _tableIndex.Add(1, "testStream-1", 5, 500);

            _log = new FakeTFScavengerLog();
            _tableIndex.Scavenge(_log, CancellationToken.None);

            // Check it's loadable.
            _tableIndex.Close(false);

            _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, "",
                                                  () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5),
                                                  () => fakeReader,
                                                  PTableVersions.IndexV4,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: 2,
                                                  maxTablesPerLevel: 5,
                                                  useBloomFilter: _useBloomFilter);

            _tableIndex.Initialize(long.MaxValue);
        }
コード例 #20
0
 protected override void when()
 {
     //ptable 1 with 32bit indexes
     _tableIndex.Add(1, streamId, 0, 2);
     _tableIndex.Add(1, streamId, 1, 4);
     _tableIndex.Add(1, streamId, 2, 6);
     System.Threading.Thread.Sleep(500);
     _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                  () => new HashListMemTable(PTableVersions.Index64Bit, maxSize: _maxMemTableSize),
                                  () => _fakeReader,
                                  PTableVersions.Index64Bit,
                                  maxSizeForMemory: _maxMemTableSize,
                                  maxTablesPerLevel: 2);
     _tableIndex.Initialize(long.MaxValue);
     _indexReader = new IndexReader(_indexBackend, _tableIndex, new EventStore.Core.Data.StreamMetadata(), _hashCollisionReadLimit);
     //memtable with 64bit indexes
     _tableIndex.Add(1, streamId, 0, 8);
 }
コード例 #21
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _lowHasher  = new FakeIndexHasher();
            _highHasher = new FakeIndexHasher();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 10),
                                         () => fakeReader,
                                         _ptableVersion,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 2,
                                         skipIndexVerify: _skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);

            // ptable level 2
            _tableIndex.Add(0, "1", 0, 0xFF00);
            _tableIndex.Add(0, "1", 1, 0xFF01);
            _tableIndex.Add(0, "2", 0, 0xFF00);
            _tableIndex.Add(0, "2", 1, 0xFF01);
            _tableIndex.Add(0, "3", 0, 0xFF00);
            _tableIndex.Add(0, "3", 1, 0xFF01);
            _tableIndex.Add(0, "3", 0, 0xFF02);
            _tableIndex.Add(0, "3", 1, 0xFF03);

            // ptable level 1
            _tableIndex.Add(0, "4", 0, 0xFF00);
            _tableIndex.Add(0, "5", 10, 0xFFF1);
            _tableIndex.Add(0, "6", 0, 0xFF00);
            _tableIndex.Add(0, "1", 0, 0xFF10);

            // ptable level 0
            _tableIndex.Add(0, "6", 1, 0xFF01);
            _tableIndex.Add(0, "1", 1, 0xFF11);

            // memtable
            _tableIndex.Add(0, "4", 0, 0xFF01);

            await Task.Delay(500);
        }
コード例 #22
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _lowHasher  = new FakeIndexHasher();
            _highHasher = new FakeIndexHasher();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 10),
                                         () => fakeReader,
                                         _ptableVersion,
                                         5,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 2,
                                         skipIndexVerify: _skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);

            // ptable level 2
            _tableIndex.Add(0, "1", 0, 0xFF00);
            _tableIndex.Add(0, "1", 1, 0xFF01);
            _tableIndex.Add(0, "2", 0, 0xFF00);
            _tableIndex.Add(0, "2", 1, 0xFF01);
            _tableIndex.Add(0, "3", 0, 0xFF00);
            _tableIndex.Add(0, "3", 1, 0xFF01);
            _tableIndex.Add(0, "3", 0, 0xFF02);
            _tableIndex.Add(0, "3", 1, 0xFF03);

            // ptable level 1
            _tableIndex.Add(0, "4", 0, 0xFF00);
            _tableIndex.Add(0, "5", 10, 0xFFF1);
            _tableIndex.Add(0, "6", 0, 0xFF00);
            _tableIndex.Add(0, "1", 0, 0xFF10);

            // ptable level 0
            _tableIndex.Add(0, "6", 1, 0xFF01);
            _tableIndex.Add(0, "1", 1, 0xFF11);

            // memtable
            _tableIndex.Add(0, "4", 0, 0xFF01);

            Thread.Sleep(500);
        }
コード例 #23
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV2, maxSize: 5),
                                         () => fakeReader,
                                         PTableVersions.IndexV2,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 5,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "testStream-1", 0, 1);
            _tableIndex.Add(1, "testStream-2", 0, 2);
            _tableIndex.Add(1, "testStream-1", 1, 3);
            _tableIndex.Add(1, "testStream-2", 1, 4);
            _tableIndex.Add(1, "testStream-1", 2, 5);

            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 5),
                                         () => fakeReader,
                                         _ptableVersion,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 5,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "testStream-2", 2, 6);
            _tableIndex.Add(1, "testStream-1", 3, 7);
            _tableIndex.Add(1, "testStream-2", 3, 8);
            _tableIndex.Add(1, "testStream-1", 4, 9);
            _tableIndex.Add(1, "testStream-2", 4, 10);

            await Task.Delay(500);
        }
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader());

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV1, maxSize: 5),
                                         () => fakeReader,
                                         PTableVersions.IndexV1,
                                         maxSizeForMemory: 5,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "LPN-FC002_LPK51001", 0, 1);
            _tableIndex.Add(1, "account--696193173", 0, 2);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 1, 3);
            _tableIndex.Add(1, "account--696193173", 1, 4);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 2, 5);

            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 5),
                                         () => fakeReader,
                                         _ptableVersion,
                                         maxSizeForMemory: 5,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, "account--696193173", 2, 6);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 3, 7);
            _tableIndex.Add(1, "account--696193173", 3, 8);
            _tableIndex.Add(1, "LPN-FC002_LPK51001", 4, 9);
            _tableIndex.Add(1, "account--696193173", 4, 10);

            Thread.Sleep(500);
        }
コード例 #25
0
        public void Setup()
        {
            given();
            _indexDir     = PathName;
            _fakeReader   = new TFReaderLease(new FakeReader());
            _indexBackend = new FakeIndexBackend(_fakeReader);
            _lowHasher    = new XXHashUnsafe();
            _highHasher   = new Murmur3AUnsafe();
            _tableIndex   = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                           () => new HashListMemTable(PTableVersions.IndexV1, maxSize: _maxMemTableSize),
                                           () => _fakeReader,
                                           PTableVersions.IndexV1,
                                           maxSizeForMemory: _maxMemTableSize,
                                           maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);
            _indexReader = new IndexReader(_indexBackend, _tableIndex, new EventStore.Core.Data.StreamMetadata(), _hashCollisionReadLimit);

            when();
            //wait for the mem table to be dumped
            System.Threading.Thread.Sleep(500);
        }
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader2());

            _lowHasher  = new ByLengthHasher();
            _highHasher = new ByLengthHasher();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV1, maxSize: 3),
                                         () => fakeReader,
                                         PTableVersions.IndexV1,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 3,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, Stream1, 0, 1);
            _tableIndex.Add(1, Stream2, 0, 2);
            _tableIndex.Add(1, Stream3, 0, 3);

            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 3),
                                         () => fakeReader,
                                         _ptableVersion,
                                         5, Constants.PTableMaxReaderCountDefault,
                                         maxSizeForMemory: 3,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, Stream3, 1, 4);
            _tableIndex.Add(1, Stream2, 1, 5);
            _tableIndex.Add(1, Stream1, 1, 6);

            await Task.Delay(500);
        }
コード例 #27
0
        public void SetUp()
        {
            _indexDir   = Path.Combine(Path.GetTempPath(), "idx-" + Guid.NewGuid().ToString());
            _tableIndex = new TableIndex(_indexDir, () => new HashListMemTable(), new InMemoryCheckpoint(), maxSizeForMemory: 2000);
            _tableIndex.Initialize();

            _tableIndex.Add(0xDEAD, 0, 0xFF00);
            _tableIndex.Add(0xDEAD, 1, 0xFF01);

            _tableIndex.Add(0xBEEF, 0, 0xFF00);
            _tableIndex.Add(0xBEEF, 1, 0xFF01);

            _tableIndex.Add(0xABBA, 0, 0xFF00);
            _tableIndex.Add(0xABBA, 1, 0xFF01);
            _tableIndex.Add(0xABBA, 2, 0xFF02);
            _tableIndex.Add(0xABBA, 3, 0xFF03);

            _tableIndex.Add(0xDEAD, 0, 0xFF10);
            _tableIndex.Add(0xDEAD, 1, 0xFF11);

            _tableIndex.Add(0xADA, 0, 0xFF00);
        }
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeTfReader());

            _tableIndex = new TableIndex(_indexDir,
                                         () => new HashListMemTable(maxSize: 10),
                                         () => fakeReader,
                                         maxSizeForMemory: 2,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            // ptable level 2
            _tableIndex.Add(0, 0xDEAD, 0, 0xFF00);
            _tableIndex.Add(0, 0xDEAD, 1, 0xFF01);
            _tableIndex.Add(0, 0xBEEF, 0, 0xFF00);
            _tableIndex.Add(0, 0xBEEF, 1, 0xFF01);
            _tableIndex.Add(0, 0xABBA, 0, 0xFF00);
            _tableIndex.Add(0, 0xABBA, 1, 0xFF01);
            _tableIndex.Add(0, 0xABBA, 0, 0xFF02);
            _tableIndex.Add(0, 0xABBA, 1, 0xFF03);

            // ptable level 1
            _tableIndex.Add(0, 0xADA, 0, 0xFF00);
            _tableIndex.Add(0, 0xCEED, 10, 0xFFF1);
            _tableIndex.Add(0, 0xBABA, 0, 0xFF00);
            _tableIndex.Add(0, 0xDEAD, 0, 0xFF10);

            // ptable level 0
            _tableIndex.Add(0, 0xBABA, 1, 0xFF01);
            _tableIndex.Add(0, 0xDEAD, 1, 0xFF11);

            // memtable
            _tableIndex.Add(0, 0xADA, 0, 0xFF01);

            Thread.Sleep(500);
        }
コード例 #29
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeIndexReader2());

            _lowHasher  = new ByLengthHasher();
            _highHasher = new ByLengthHasher();
            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(PTableVersions.IndexV1, maxSize: 3),
                                         () => fakeReader,
                                         PTableVersions.IndexV1,
                                         5,
                                         maxSizeForMemory: 3,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, Stream1, 0, 1);
            _tableIndex.Add(1, Stream2, 0, 2);
            _tableIndex.Add(1, Stream3, 0, 3);

            _tableIndex.Close(false);

            _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher,
                                         () => new HashListMemTable(_ptableVersion, maxSize: 3),
                                         () => fakeReader,
                                         _ptableVersion,
                                         5,
                                         maxSizeForMemory: 3,
                                         maxTablesPerLevel: 2);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(1, Stream3, 1, 4);
            _tableIndex.Add(1, Stream2, 1, 5);
            _tableIndex.Add(1, Stream1, 1, 6);

            Thread.Sleep(500);
        }
コード例 #30
0
        public override async Task TestFixtureSetUp()
        {
            await base.TestFixtureSetUp();

            _indexDir = PathName;
            var fakeReader = new TFReaderLease(new FakeTfReader());

            _lowHasher  = new XXHashUnsafe();
            _highHasher = new Murmur3AUnsafe();
            _tableIndex = new TableIndex <string>(_indexDir, _lowHasher, _highHasher, "",
                                                  () => new HashListMemTable(_ptableVersion, maxSize: 10),
                                                  () => fakeReader,
                                                  _ptableVersion,
                                                  5, Constants.PTableMaxReaderCountDefault,
                                                  maxSizeForMemory: 5,
                                                  skipIndexVerify: _skipIndexVerify);
            _tableIndex.Initialize(long.MaxValue);

            _tableIndex.Add(0, "0xDEAD", 0, 0xFF00);
            _tableIndex.Add(0, "0xDEAD", 1, 0xFF01);

            _tableIndex.Add(0, "0xBEEF", 0, 0xFF00);
            _tableIndex.Add(0, "0xBEEF", 1, 0xFF01);

            _tableIndex.Add(0, "0xABBA", 0, 0xFF00);             // 1st ptable0

            _tableIndex.Add(0, "0xABBA", 1, 0xFF01);
            _tableIndex.Add(0, "0xABBA", 2, 0xFF02);
            _tableIndex.Add(0, "0xABBA", 3, 0xFF03);

            _tableIndex.Add(0, "0xADA", 0,
                            0xFF00);                 // simulates duplicate due to concurrency in TableIndex (see memtable below)
            _tableIndex.Add(0, "0xDEAD", 0, 0xFF10); // 2nd ptable0

            _tableIndex.Add(0, "0xDEAD", 1, 0xFF11); // in memtable
            _tableIndex.Add(0, "0xADA", 0, 0xFF00);  // in memtable
        }