Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 3
0
        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));
                            }