Yanqin Jin
570d490a3d
Fix a race condition caused by unlocking db mutex ( #5294 )
...
Summary:
Previous code may call `~ColumnFamilyData` in `DBImpl::AtomicFlushMemTablesToOutputFiles` if the column family is dropped or `cfd->IsFlushPending() == false`. In `~ColumnFamilyData`, the db mutex is released briefly and re-acquired. This can cause correctness issue. The reason is as follows.
Assume there are more bg flush threads. After bg_flush_thr1 releases the db mutex, bg_flush_thr2 can grab it and pop an element from the flush queue. This will cause bg_flush_thr2 to accidentally pick some memtables which should have been picked by bg_flush_thr1. To make the matter worse, bg_flush_thr2 can clear `flush_requested_` flag for the memtable list, causing a subsequent call to `MemTableList::IsFlushPending()` by bg_flush_thr1 to return false, which is wrong.
The fix is to delay `ColumnFamilyData::Unref` and `~ColumnFamilyData` for column families not selected for flush until `AtomicFlushMemTablesToOutputFiles` returns. Furthermore, a bg flush thread should not clear `MemTableList::flush_requested_` in `MemTableList::PickMemtablesToFlush` unless atomic flush is not used **or** the memtable list does not have unpicked memtables.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5294
Differential Revision: D15295297
Pulled By: riversand963
fbshipit-source-id: 03b101205ca22c242647cbf488bcf0ed80b2ecbd
2019-05-15 11:23:47 -07:00
..
2019-04-10 19:31:18 -07:00
2019-04-10 19:31:18 -07:00
2019-04-25 11:25:43 -07:00
2019-04-30 10:13:28 -07:00
2019-02-14 14:41:36 -08:00
2019-04-24 17:11:36 -07:00
2019-04-16 23:32:20 -07:00
2019-02-14 14:41:36 -08:00
2018-10-08 22:54:43 -07:00
2018-12-07 17:06:02 -08:00
2017-08-19 14:10:08 -07:00
2019-02-14 14:41:36 -08:00
2019-04-26 17:30:30 -07:00
2019-04-26 17:30:30 -07:00
2019-02-14 14:41:36 -08:00
2019-04-25 18:17:22 -07:00
2019-04-25 18:17:22 -07:00
2019-04-25 18:17:22 -07:00
2019-04-16 23:32:20 -07:00
2019-04-16 23:32:20 -07:00
2019-02-14 14:41:36 -08:00
2019-02-28 10:27:59 -08:00
2018-05-29 15:44:34 -07:00
2019-04-16 23:32:20 -07:00
2019-04-16 23:32:20 -07:00
2019-02-14 11:23:55 -08:00
2018-10-09 15:19:38 -07:00
2019-02-14 14:41:36 -08:00
2018-11-09 11:19:58 -08:00
2019-02-14 14:41:36 -08:00
2019-02-14 14:41:36 -08:00
2019-04-15 11:35:21 -07:00
2017-10-17 08:57:09 -07:00
2019-04-22 08:20:35 -07:00
2019-04-22 08:20:35 -07:00
2019-02-14 14:41:36 -08:00
2019-04-18 22:39:34 -07:00
2018-11-12 16:42:16 -08:00
2018-11-09 11:19:58 -08:00
2018-11-12 12:24:26 -08:00
2019-05-15 11:23:47 -07:00
2019-05-15 11:23:47 -07:00
2019-04-16 23:32:20 -07:00
2018-08-03 17:42:34 -07:00
2019-04-25 10:11:41 -07:00
2019-04-15 18:51:04 -07:00
2019-02-28 10:27:59 -08:00
2019-03-27 16:24:45 -07:00
2019-04-24 12:08:44 -07:00
2019-04-24 12:08:44 -07:00
2019-04-15 18:51:04 -07:00
2019-04-25 10:11:41 -07:00
2019-04-25 18:17:22 -07:00
2018-10-09 17:15:51 -07:00
2017-07-15 16:11:23 -07:00
2017-07-15 16:11:23 -07:00
2018-10-29 14:36:31 -07:00
2018-05-21 14:43:11 -07:00
2019-02-14 14:41:36 -08:00
2019-04-23 10:55:01 -07:00
2018-12-17 17:33:46 -08:00
2019-04-26 21:24:10 -07:00
2019-02-14 14:41:36 -08:00
2019-02-14 14:41:36 -08:00
2019-04-02 14:47:16 -07:00
2019-03-29 10:08:50 -07:00
2019-02-15 09:51:41 -08:00
2019-04-16 23:32:20 -07:00
2019-04-24 12:08:44 -07:00
2019-04-16 23:32:20 -07:00
2019-03-01 10:42:09 -08:00
2018-09-20 15:15:28 -07:00
2018-07-17 14:43:18 -07:00
2019-04-16 23:32:20 -07:00
2019-04-11 14:28:26 -07:00
2019-04-26 21:24:10 -07:00
2019-04-11 14:28:26 -07:00
2019-02-14 14:41:36 -08:00
2018-12-28 18:02:28 -08:00
2019-04-06 06:40:36 -07:00
2018-07-13 17:42:38 -07:00
2019-03-27 16:24:45 -07:00
2019-04-11 14:28:26 -07:00
2019-04-02 21:15:44 -07:00
2018-09-17 13:14:07 -07:00
2018-10-04 20:46:50 -07:00
2018-10-04 20:46:50 -07:00
2019-04-22 15:30:07 -07:00
2018-09-15 13:43:04 -07:00
2018-04-12 17:59:16 -07:00
2019-02-14 14:41:36 -08:00
2019-03-19 17:28:19 -07:00
2019-02-12 19:16:17 -08:00
2019-04-08 11:16:34 -07:00
2019-02-14 14:41:36 -08:00
2019-02-14 14:41:36 -08:00
2017-07-15 16:11:23 -07:00
2017-07-15 16:11:23 -07:00
2017-07-15 16:11:23 -07:00
2019-03-19 17:28:19 -07:00
2019-04-10 19:31:18 -07:00
2019-03-19 17:28:19 -07:00
2017-07-15 16:11:23 -07:00
2017-07-15 16:11:23 -07:00
2018-07-13 17:27:39 -07:00
2019-04-16 11:37:47 -07:00
2018-03-05 13:13:41 -08:00
2019-02-20 15:52:54 -08:00
2019-02-20 15:52:54 -08:00
2019-04-18 10:55:01 -07:00
2019-03-19 17:28:19 -07:00
2019-01-15 21:34:38 -08:00
2019-04-16 23:32:20 -07:00
2018-08-24 18:13:20 -07:00
2019-03-26 16:45:31 -07:00
2019-04-24 12:08:44 -07:00
2019-03-26 16:45:31 -07:00
2019-04-25 10:11:41 -07:00
2019-04-25 10:11:41 -07:00
2018-05-03 15:43:09 -07:00
2018-05-03 15:43:09 -07:00
2019-04-11 14:28:26 -07:00
2019-01-03 16:30:12 -08:00
2017-07-15 16:11:23 -07:00
2019-02-14 14:41:36 -08:00
2019-02-14 14:41:36 -08:00
2019-05-15 11:23:47 -07:00
2019-01-31 14:49:51 -08:00
2019-04-17 10:15:05 -07:00
2019-02-19 12:15:39 -08:00
2019-04-11 14:28:26 -07:00
2019-02-14 14:41:36 -08:00
2019-02-28 10:27:59 -08:00
2018-12-17 17:33:46 -08:00
2017-07-15 16:11:23 -07:00
2019-02-14 14:41:36 -08:00
2019-03-28 13:16:02 -07:00
2018-07-13 17:27:39 -07:00
2019-03-27 12:27:54 -07:00
2017-07-15 16:11:23 -07:00
2019-03-01 15:45:45 -08:00
2019-04-02 15:17:47 -07:00
2019-02-14 14:41:36 -08:00
2018-12-19 13:29:51 -08:00
2018-12-17 17:33:46 -08:00
2019-04-18 12:27:25 -07:00
2019-04-18 12:27:25 -07:00
2018-12-11 12:10:48 -08:00
2019-04-16 11:37:47 -07:00
2018-12-17 13:20:51 -08:00
2019-04-12 14:40:41 -07:00
2018-10-12 10:41:54 -07:00
2019-04-19 11:55:13 -07:00
2019-01-16 09:55:32 -08:00
2017-07-15 16:11:23 -07:00
2019-04-25 18:17:22 -07:00
2019-04-26 21:24:10 -07:00
2019-04-11 14:28:26 -07:00
2019-03-18 12:15:34 -07:00
2019-03-18 12:15:34 -07:00
2019-03-18 12:15:34 -07:00
2019-03-27 12:27:54 -07:00
2019-03-27 12:27:54 -07:00
2019-02-19 13:39:49 -08:00
2019-03-26 16:45:31 -07:00
2019-03-26 16:45:31 -07:00
2019-02-11 11:20:24 -08:00
2019-02-08 11:33:11 -08:00
2019-03-26 16:45:31 -07:00
2019-02-19 13:39:49 -08:00
2019-04-23 11:22:02 -07:00
2019-04-17 18:15:20 -07:00
2018-11-09 11:19:58 -08:00
2019-03-28 15:17:13 -07:00
2018-01-11 18:57:33 -08:00
2017-07-15 16:11:23 -07:00
2018-06-28 18:58:29 -07:00
2019-02-19 13:39:49 -08:00
2019-04-19 20:33:04 -07:00
2019-04-02 15:17:47 -07:00
2017-07-15 16:11:23 -07:00
2019-02-19 13:39:49 -08:00
2017-07-15 16:11:23 -07:00
2017-07-15 16:11:23 -07:00
2018-11-07 14:07:53 -08:00
2019-01-03 12:40:42 -08:00