示例#1
0
 void ForbidDeletePreservingHistory(long dontTouchGeneration, long[] usedFilesFromOldGenerations)
 {
     foreach (var fileStat in _fileStats.Index)
     {
         if (!_keyValueDB.ContainsValuesAndDoesNotTouchGeneration(_fileStats.KeyRef(fileStat), dontTouchGeneration) ||
             (usedFilesFromOldGenerations != null && Array.BinarySearch(usedFilesFromOldGenerations,
                                                                        _keyValueDB.GetGeneration(_fileStats.KeyRef(fileStat))) >= 0))
         {
             _fileStats.ValueRef(fileStat).MarkForbidToDelete();
         }
     }
 }
示例#2
0
文件: Compactor.cs 项目: pavolpr/BTDB
        internal void FastStartCleanUp()
        {
            if (_keyValueDB.FileCollection.GetCount() == 0)
            {
                return;
            }
            _root = _keyValueDB.LastCommited;
            var dontTouchGeneration = _keyValueDB.GetGeneration(_root.TrLogFileId);

            InitFileStats(dontTouchGeneration);
            CalculateFileUsefullness();
            MarkTotallyUselessFilesAsUnknown();
        }
示例#3
0
        internal void FastStartCleanUp()
        {
            if (_keyValueDB.FileCollection.GetCount() == 0)
            {
                return;
            }
            _root = _keyValueDB.LastCommited;
            var dontTouchGeneration = _keyValueDB.GetGeneration(_root.TrLogFileId);

            InitFileStats(dontTouchGeneration);
            CalculateFileUsefullness(_root, false); // useless files are calculated from "old" values, but they are uptodate
            MarkTotallyUselessFilesAsUnknown();
        }
示例#4
0
 void ForbidDeletePreservingHistory(long dontTouchGeneration, long[] usedFilesFromOldGenerations)
 {
     for (var i = 0; i < _fileStats.Length; i++)
     {
         if (!_keyValueDB.ContainsValuesAndDoesNotTouchGeneration((uint)i, dontTouchGeneration) ||
             (usedFilesFromOldGenerations != null && Array.BinarySearch(usedFilesFromOldGenerations, _keyValueDB.GetGeneration((uint)i)) >= 0))
         {
             _fileStats[i].MarkForbidToDelete();
         }
     }
 }
示例#5
0
        internal void FastStartCleanUp()
        {
            if (_keyValueDB.FileCollection.GetCount() == 0)
            {
                return;
            }
            _root = _keyValueDB.LastCommited;
            var dontTouchGeneration = _keyValueDB.GetGeneration(_root.TrLogFileId);

            InitFileStats(dontTouchGeneration);
            CalculateFileUsefullness();
            var toRemoveFileIds = new List <uint>();

            for (var i = 0; i < _fileStats.Length; i++)
            {
                if (_fileStats[i].Useless())
                {
                    toRemoveFileIds.Add((uint)i);
                }
            }
            _keyValueDB.MarkAsUnknown(toRemoveFileIds);
        }