Bug #96874 | The write_notifier_mutex in log_sys is useless | ||
---|---|---|---|
Submitted: | 14 Sep 2019 10:38 | Modified: | 25 Sep 2019 11:47 |
Reporter: | Zongzhi Chen (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S5 (Performance) |
Version: | OS: | Any | |
Assigned to: | CPU Architecture: | Any |
[14 Sep 2019 10:38]
Zongzhi Chen
[24 Sep 2019 12:16]
MySQL Verification Team
Hi Mr. zongzhi, Thank you for your bug report. However, your report is quite unclear, when it comes to details. First of all, what version and release have you analysed and discovered this code ??? Second, we need exact source code number, function and line number, with the excerpt of the code itself. You are claiming that only one function is using that mutex. Have you considered the possibilities that there could be N threads calling the same function ??? Why are you so sure that this function will be used only in a single thread ??? Thanks in advance .....
[24 Sep 2019 18:14]
Zongzhi Chen
The code version is 8.0.17 There is only three places that call log_write_notifier_mutex_enter(log), all of these places ad in log_write_notifier function(). And there is only one log_write_notifier thread in the system. This thread is used for notify user thread when the write has been write to the file cache. I am sure that there is only one log_write_notifier thread The code that contain log_write_notifier_mutex_enter(log) is below: ``` 2297 void log_write_notifier(log_t *log_ptr) { 2298 ut_a(log_ptr != nullptr); 2299 2300 log_t &log = *log_ptr; 2301 lsn_t lsn = log.write_lsn.load() + 1; 2302 2303 log_write_notifier_mutex_enter(log); 2304 2305 Log_thread_waiting waiting{log, log.write_notifier_event, 2306 srv_log_write_notifier_spin_delay, 2307 srv_log_write_notifier_timeout}; 2308 2309 for (uint64_t step = 0;; ++step) { 2310 if (log.should_stop_threads.load()) { 2311 if (!log_writer_is_active()) { 2312 if (lsn > log.write_lsn.load()) { 2313 ut_a(lsn == log.write_lsn.load() + 1); 2314 break; 2315 } 2316 } 2317 } 2323 auto stop_condition = [&log, lsn, &released](bool wait) { 2324 LOG_SYNC_POINT("log_write_notifier_after_event_reset"); 2325 if (released) { 2326 log_write_notifier_mutex_enter(log); 2327 released = false; 2328 } 2375 if (step % 1024 == 0) { 2376 log_write_notifier_mutex_exit(log); 2377 2378 os_thread_sleep(0); 2379 2380 log_write_notifier_mutex_enter(log); 2381 } ```
[25 Sep 2019 11:47]
MySQL Verification Team
Hi Mr. zongzhi, Thank you for your answers. This bug is now verified, as reported.