Beispiel #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);
        }