Beispiel #1
0
        public int StartDefragmentation()
        {
            int defragmentationTime = 0;

            if (_fileToBeDefragmented == 0)
            {
                if (_metadataPersister.DefragmentationNeeded())
                {
                    defragmentationTime = _metadataPersister.StartDefragmentation();
                }
            }
            else
            {
                string dbId = GetFullDbId(_fileToBeDefragmented);
                FileMetadata <long, byte[]> fileMetadata = _fileMetadataDictionary[dbId];

                if (fileMetadata == null)
                {
                    throw new Exception("unable to find database file.");
                }

                if (fileMetadata.Provider.DefragmentationNeeded())
                {
                    defragmentationTime = fileMetadata.Provider.StartDefragmentation();
                }
            }
            _fileToBeDefragmented++;
            if (_fileToBeDefragmented > _fileMetadataDictionary.Count)
            {
                _fileToBeDefragmented = 0;
            }

            return(defragmentationTime);
        }