public override void TestFixtureSetUp() { base.TestFixtureSetUp(); _indexDir = PathName; var scavengeBlocker = new ManualResetEventSlim(false); var scavengeStarted = new ManualResetEventSlim(false); var fakeReader = new TFReaderLease(new FakeIndexReader(l => { scavengeStarted.Set(); if (!scavengeBlocker.Wait(5000)) { throw new Exception("Failed to continue."); } return(false); })); _lowHasher = new XXHashUnsafe(); _highHasher = new Murmur3AUnsafe(); _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher, () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5), () => fakeReader, PTableVersions.IndexV4, maxSizeForMemory: 2, maxTablesPerLevel: 5); _tableIndex.Initialize(long.MaxValue); _tableIndex.Add(1, "testStream-1", 0, 0); _tableIndex.Add(1, "testStream-1", 1, 100); _tableIndex.WaitForBackgroundTasks(); _log = new FakeTFScavengerLog(); var task = Task.Run(() => _tableIndex.Scavenge(_log, CancellationToken.None)); Assert.That(scavengeStarted.Wait(5000)); // Add enough for 2 more tables _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); // Release the scavenge process scavengeBlocker.Set(); task.Wait(); // Check it's loadable. _tableIndex.Close(false); _tableIndex = new TableIndex(_indexDir, _lowHasher, _highHasher, () => new HashListMemTable(PTableVersions.IndexV4, maxSize: 5), () => fakeReader, PTableVersions.IndexV4, maxSizeForMemory: 2, maxTablesPerLevel: 5); _tableIndex.Initialize(long.MaxValue); }