Skip to content

Commit

Permalink
Sync translog without lock before trim unreferenced readers (#47790)
Browse files Browse the repository at this point in the history
This commit is similar to the optimization made in #45765. With this
change, we fsync most of the data of the current generation without
holding writeLock when trimming unreferenced readers.

Relates #45765
  • Loading branch information
dengweisysu authored and dnhatn committed Oct 9, 2019
1 parent c74527e commit f749bac
Showing 1 changed file with 3 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1670,6 +1670,8 @@ public void rollGeneration() throws IOException {
* required generation
*/
public void trimUnreferencedReaders() throws IOException {
// move most of the data to disk to reduce the time the lock is held
sync();
try (ReleasableLock ignored = writeLock.acquire()) {
if (closed.get()) {
// we're shutdown potentially on some tragic event, don't delete anything
Expand Down Expand Up @@ -1697,6 +1699,7 @@ public void trimUnreferencedReaders() throws IOException {
// We now update the checkpoint to ignore the file we are going to remove.
// Note that there is a provision in recoverFromFiles to allow for the case where we synced the checkpoint
// but crashed before we could delete the file.
// sync at once to make sure that there's at most one unreferenced generation.
current.sync();
deleteReaderFiles(reader);
}
Expand Down

0 comments on commit f749bac

Please sign in to comment.