Skip to content

Commit

Permalink
ffldb: refactor out file close code into its own method
Browse files Browse the repository at this point in the history
The existing file close code is refactored out into it's own method
closeFile() so that it can be reused elsewhere.
  • Loading branch information
kcalvinalvin committed Jul 1, 2024
1 parent 8b5f2aa commit 8ed8ef1
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions database/ffldb/blockio.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,17 +281,7 @@ func (s *blockStore) openFile(fileNum uint32) (*lockableFile, error) {
lruList := s.openBlocksLRU
if lruList.Len() >= maxOpenFiles {
lruFileNum := lruList.Remove(lruList.Back()).(uint32)
oldBlockFile := s.openBlockFiles[lruFileNum]

// Close the old file under the write lock for the file in case
// any readers are currently reading from it so it's not closed
// out from under them.
oldBlockFile.Lock()
_ = oldBlockFile.file.Close()
oldBlockFile.Unlock()

delete(s.openBlockFiles, lruFileNum)
delete(s.fileNumToLRUElem, lruFileNum)
s.closeFile(lruFileNum)
}
s.fileNumToLRUElem[fileNum] = lruList.PushFront(fileNum)
s.lruMutex.Unlock()
Expand All @@ -302,6 +292,26 @@ func (s *blockStore) openFile(fileNum uint32) (*lockableFile, error) {
return blockFile, nil
}

// closeFile checks that the file corresponding to the file number is open and
// if it is, it closes it in a concurrency safe manner and cleans up associated
// data in the blockstore struct.
func (s *blockStore) closeFile(fileNum uint32) {
blockFile := s.openBlockFiles[fileNum]
if blockFile == nil {
return
}

// Close the old file under the write lock for the file in case
// any readers are currently reading from it so it's not closed
// out from under them.
blockFile.Lock()
_ = blockFile.file.Close()
blockFile.Unlock()

delete(s.openBlockFiles, fileNum)
delete(s.fileNumToLRUElem, fileNum)
}

// deleteFile removes the block file for the passed flat file number. The file
// must already be closed and it is the responsibility of the caller to do any
// other state cleanup necessary.
Expand Down

0 comments on commit 8ed8ef1

Please sign in to comment.