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); }
public void cannot_initialize_with_v1_indexes() { var tableIndex = new TableIndex <string>( directory: Fixture.Directory, lowHasher: new XXHashUnsafe(), highHasher: new Murmur3AUnsafe(), emptyStreamId: string.Empty, memTableFactory: () => new HashListMemTable( version: PTableVersions.IndexV1, maxSize: 1_000_000 * 2), tfReaderFactory: () => throw new Exception("index tried to read the log"), ptableVersion: PTableVersions.IndexV1, maxAutoMergeIndexLevel: int.MaxValue, pTableMaxReaderCount: 5); tableIndex.Initialize(0); var sut = new LogV2StreamExistenceFilterInitializer( tfReaderFactory: () => throw new Exception("initializer tried to read the log"), tableIndex: tableIndex); var filter = new MockExistenceFilter(hasher: null); var ex = Assert.Throws <NotSupportedException>(() => { sut.Initialize(filter); }); Assert.Equal( "The Stream Existence Filter is not supported with V1 index files. " + "Please disable the filter by setting StreamExistenceFilterSize to 0, or rebuild the indexes.", ex.Message); }
public void can_initalize_during_merge() { var eventsPerStream = 1_000; var numStreams = 1_000; var numEvents = eventsPerStream * numStreams; for (int i = 0; i < numStreams; i++) { for (int j = 0; j < eventsPerStream; j++) { AddEventToSut(stream: $"stream-{i}", eventNumber: j); } } var hasher = new CompositeHasher <string>(new XXHashUnsafe(), new Murmur3AUnsafe()); // addDelayMs: we want to initialize the filter slowly, to give the ptables longer to move around var slowFilter = new MockExistenceFilter(hasher, addDelayMs: 1); _sut.Initialize(slowFilter, 0); Assert.Equal(numEvents * _recordOffset, slowFilter.CurrentCheckpoint); Assert.Equal(numStreams, slowFilter.Hashes.Count); Assert.Equal(2, _log.NumReads); }