/// <summary> /// Create new log instance /// </summary> /// <param name="logSettings"></param> public FasterLog(FasterLogSettings logSettings) { bool oldCommitManager = false; if (oldCommitManager) { logCommitManager = logSettings.LogCommitManager ?? new LocalLogCommitManager(logSettings.LogCommitFile ?? logSettings.LogDevice.FileName + ".commit"); } else { logCommitManager = logSettings.LogCommitManager ?? new DeviceLogCommitCheckpointManager (new LocalStorageNamedDeviceFactory(), new DefaultCheckpointNamingScheme( new FileInfo(logSettings.LogDevice.FileName).Directory.FullName)); } if (logSettings.LogCommitManager == null) { disposeLogCommitManager = true; } // Reserve 8 byte checksum in header if requested logChecksum = logSettings.LogChecksum; headerSize = logChecksum == LogChecksumType.PerEntry ? 12 : 4; getMemory = logSettings.GetMemory; epoch = new LightEpoch(); CommittedUntilAddress = Constants.kFirstValidAddress; CommittedBeginAddress = Constants.kFirstValidAddress; SafeTailAddress = Constants.kFirstValidAddress; allocator = new BlittableAllocator <Empty, byte>( logSettings.GetLogSettings(), null, null, epoch, CommitCallback); allocator.Initialize(); // FasterLog is used as a read-only iterator if (logSettings.ReadOnlyMode) { readOnlyMode = true; allocator.HeadAddress = long.MaxValue; } Restore(out RecoveredIterators); }
/// <summary> /// Create new log instance /// </summary> /// <param name="logSettings"></param> public FasterLog(FasterLogSettings logSettings) { logCommitManager = logSettings.LogCommitManager ?? new LocalLogCommitManager(logSettings.LogCommitFile ?? logSettings.LogDevice.FileName + ".commit"); // Reserve 8 byte checksum in header if requested logChecksum = logSettings.LogChecksum; headerSize = logChecksum == LogChecksumType.PerEntry ? 12 : 4; getMemory = logSettings.GetMemory; epoch = new LightEpoch(); CommittedUntilAddress = Constants.kFirstValidAddress; CommittedBeginAddress = Constants.kFirstValidAddress; allocator = new BlittableAllocator <Empty, byte>( logSettings.GetLogSettings(), null, null, epoch, CommitCallback); allocator.Initialize(); Restore(out RecoveredIterators); }
public async Task FasterLog_Test1Write() { const int entryLength = 1 << 10; byte[] staticEntry1 = new byte[entryLength]; byte[] staticEntry1Brotli = new byte[entryLength]; for (int i = 0; i < entryLength; i++) { staticEntry1[i] = (byte)i; } byte[] staticEntry2 = new byte[entryLength]; byte[] staticEntry2Brotli = new byte[entryLength]; for (int i = 0; i < entryLength; i++) { staticEntry2[i] = (byte)(entryLength - i); } var path = GetPath(); using (var logCommitManager = new DeviceLogCommitCheckpointManager( new LocalStorageNamedDeviceFactory(), new DefaultCheckpointNamingScheme(path), true, false) ) { using (IDevice device = Devices.CreateLogDevice(path + "hlog.log")) { //FasterLogScanIterator iter; var logSettings = new FASTER.core.FasterLogSettings() { LogDevice = device, LogChecksum = LogChecksumType.PerEntry, LogCommitManager = logCommitManager, }; using (var log = await FASTER.core.FasterLog.CreateAsync(logSettings)) { //log.TruncateUntilPageStart(0); //await log.CommitAsync(); for (int i = 0; i < 1000; i++) { if (BrotliEncoder.TryCompress(staticEntry1, staticEntry1Brotli, out var bytesWritten1, 4, 10)) { await log.EnqueueAsync(new Memory <byte>(staticEntry1Brotli).Slice(0, bytesWritten1)); }