Fsync translog without writeLock before rolling (#45765)
Today, when rolling a new translog generation, we block all write threads until a new generation is created. This choice is perfectly fine except in a highly concurrent environment with the translog async setting. We can reduce the blocking time by pre-sync the current generation without writeLock before rolling. The new step would fsync most of the data of the current generation without blocking write threads. Close #45371
This commit is contained in:
parent
8e3c54fff7
commit
72c6302d12
|
@ -1649,6 +1649,9 @@ public class Translog extends AbstractIndexShardComponent implements IndexShardC
|
|||
* @throws IOException if an I/O exception occurred during any file operations
|
||||
*/
|
||||
public void rollGeneration() throws IOException {
|
||||
// make sure we move most of the data to disk outside of the writeLock
|
||||
// in order to reduce the time the lock is held since it's blocking all threads
|
||||
sync();
|
||||
try (Releasable ignored = writeLock.acquire()) {
|
||||
try {
|
||||
final TranslogReader reader = current.closeIntoReader();
|
||||
|
|
Loading…
Reference in New Issue