public void FasterLogTest6([Values] LogChecksumType logChecksum) { log = new FasterLog(new FasterLogSettings { LogDevice = device, MemorySizeBits = 20, PageSizeBits = 14, LogChecksum = logChecksum, LogCommitManager = manager }); byte[] data1 = new byte[1000]; for (int i = 0; i < 100; i++) { data1[i] = (byte)i; } for (int i = 0; i < 100; i++) { log.Enqueue(data1); } log.RefreshUncommitted(); Assert.IsTrue(log.SafeTailAddress == log.TailAddress); Assert.IsTrue(log.CommittedUntilAddress < log.SafeTailAddress); using (var iter = log.Scan(0, long.MaxValue, scanUncommitted: true)) { while (iter.GetNext(out _, out _, out _)) { log.TruncateUntil(iter.NextAddress); } Assert.IsTrue(iter.NextAddress == log.SafeTailAddress); log.Enqueue(data1); Assert.IsFalse(iter.GetNext(out _, out _, out _)); log.RefreshUncommitted(); Assert.IsTrue(iter.GetNext(out _, out _, out _)); } log.Dispose(); }
public void PopulateUncommittedLog(FasterLog logUncommitted) { //****** Populate uncommitted log / device for ScanUncommittedTest // Set Default entry data for (int j = 0; j < entryLength; j++) { entry[j] = (byte)j; } // Enqueue but set each Entry in a way that can differentiate between entries for (int j = 0; j < numEntries; j++) { // Flag one part of entry data that corresponds to index if (j < entryLength) { entry[j] = (byte)entryFlag; } // puts back the previous entry value if ((j > 0) && (j < entryLength)) { entry[j - 1] = (byte)(j - 1); } // Add to FasterLog logUncommitted.Enqueue(entry); } // refresh uncommitted so can see it when scan - do NOT commit though logUncommitted.RefreshUncommitted(true); }
private async Task ProducerAsync(FasterLog log, CancellationTokenSource cts) { for (var i = 0L; i < NumElements; ++i) { log.Enqueue(Encoding.UTF8.GetBytes(i.ToString())); log.RefreshUncommitted(); await Task.Delay(TimeSpan.FromMilliseconds(ProducerPauseMs)); } await Task.Delay(TimeSpan.FromMilliseconds(CommitPeriodMs * 4)); cts.Cancel(); }
private async Task ProducerAsync(FasterLog log, CancellationTokenSource cts) { for (var i = 0L; i < NumElements; ++i) { log.Enqueue(Encoding.UTF8.GetBytes(i.ToString())); log.RefreshUncommitted(); await Task.Delay(TimeSpan.FromMilliseconds(ProducerPauseMs)); } // Ensure the reader had time to see all data await done.WaitAsync(); cts.Cancel(); }
static async Task ProducerAsync(FasterLog log, CancellationToken cancellationToken) { var i = 0L; while (!cancellationToken.IsCancellationRequested) { log.Enqueue(Encoding.UTF8.GetBytes(i.ToString())); log.RefreshUncommitted(true); i++; await Task.Delay(TimeSpan.FromMilliseconds(10)); } }
static async Task ProducerAsync(FasterLog log, CancellationToken cancellationToken) { try { var i = 0L; while (!cancellationToken.IsCancellationRequested) { // Console.WriteLine($"Producing {i}"); log.Enqueue(Encoding.UTF8.GetBytes(i.ToString())); log.RefreshUncommitted(); i++; await Task.Delay(TimeSpan.FromMilliseconds(10)); } } catch (OperationCanceledException) { } Console.WriteLine("Producer complete"); }
public void Setup() { // Clean up log files from previous test runs in case they weren't cleaned up try { new DirectoryInfo(path).Delete(true); } catch {} // Set up the Devices \ logs device = Devices.CreateLogDevice(path + "LogScan", deleteOnClose: true); log = new FasterLog(new FasterLogSettings { LogDevice = device }); deviceUnCommitted = Devices.CreateLogDevice(path + "LogScanUncommitted", deleteOnClose: true); logUncommitted = new FasterLog(new FasterLogSettings { LogDevice = deviceUnCommitted }); //****** Populate log for Basic data for tests // Set Default entry data for (int i = 0; i < entryLength; i++) { entry[i] = (byte)i; } // Enqueue but set each Entry in a way that can differentiate between entries for (int i = 0; i < numEntries; i++) { // Flag one part of entry data that corresponds to index if (i < entryLength) { entry[i] = (byte)entryFlag; } // puts back the previous entry value if ((i > 0) && (i < entryLength)) { entry[i - 1] = (byte)(i - 1); } // Add to FasterLog log.Enqueue(entry); } // Commit to the log log.Commit(true); //****** Populate uncommitted log / device for ScanUncommittedTest // Set Default entry data for (int j = 0; j < entryLength; j++) { entry[j] = (byte)j; } // Enqueue but set each Entry in a way that can differentiate between entries for (int j = 0; j < numEntries; j++) { // Flag one part of entry data that corresponds to index if (j < entryLength) { entry[j] = (byte)entryFlag; } // puts back the previous entry value if ((j > 0) && (j < entryLength)) { entry[j - 1] = (byte)(j - 1); } // Add to FasterLog logUncommitted.Enqueue(entry); } // refresh uncommitted so can see it when scan - do NOT commit though logUncommitted.RefreshUncommitted(true); }