Bug #48388 additional logging for shutting down threads
Submitted: 28 Oct 2009 18:43 Modified: 25 Apr 2011 19:06
Reporter: Lig Isler-Turmelle Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: General Severity:S4 (Feature request)
Version: OS:Any
Assigned to: Tatiana Azundris Nuernberg CPU Architecture:Any

[28 Oct 2009 18:43] Lig Isler-Turmelle
Description:
Request that during the shutdown procedure add logging indicate that threads are being shutdown and when this is complete.  These extra lines will make it clear what is happening if the server shuts down unexpectedly and also how long these particular stages take.

How to repeat:
na

Suggested fix:
Maybe something like:
YYMMDD HH:MM:SS InnoDB: Starting shutdown...
YYMMDD HH:MM:SS Shutting down any running threads <<<<===== Add this line
YYMMDD HH:MM:SS All threads shut down.            <<<<===== Add this line
[20 Jan 2011 11:47] Tatiana Azundris Nuernberg
mysqld_main:
  ...
  mysql_mutex_lock(&LOCK_thread_count);
  while (!ready_to_exit)
    mysql_cond_wait(&COND_thread_count, &LOCK_thread_count);
  mysql_mutex_unlock(&LOCK_thread_count);
  ...
  clean_up(1);
  mysqld_exit(0);

kill_server_thread:
  // created in kill_mysql(). maybe.

handle_shutdown:
  // Win only

kill_server:
  // called from kill_server_thread() / handle_shutdown() / kill_broken_server()
  if MYSQL_KILL_SIGNAL or !signal
    print ER_NORMAL_SHUTDOWN
  else
    print ER_GOT_SIGNAL
  close_connections();
  if (sig != MYSQL_KILL_SIGNAL &&
      sig != 0)
    unireg_abort(1);  // funky signal -> fail -> abort; terminal
  else
    unireg_end();     // regular shutdown; terminal
  // terminal

unireg_abort:
  // called from ... pretty much anywhere, generic fatal handler
  clean_up(...)
  mysqld_exit()   // terminal

unireg_end:
  // called from kill_server(), regular shutdown
  clean_up(1);      // may be terminal ...
  pthread_exit(0);  // if SIGNALS_DONT_BREAK_READ, this is main thr, exit() instead
  // terminal

clean_up:
  // called from mysqld_main(), unireg_abort(), unireg_end()
  ...
  print_inf("shutdown complete")
  ...
  MYSQL_CALLBACK(thread_scheduler, end, ());
  mysql_client_plugin_deinit();
  ...
  mysql_mutex_lock(&LOCK_thread_count);
  DBUG_PRINT("quit", ("got thread count lock"));
  ready_to_exit=1;
  /* do the broadcast inside the lock to ensure that my_end() is not called */
  mysql_cond_broadcast(&COND_thread_count);
  mysql_mutex_unlock(&LOCK_thread_count);
  rts -- if main thread hasn't killed us ...

mysqld_exit:
  // called from unireg_abort(), or mysqld_main() if !EMBEDDED
  wait_for_signal_thread_to_end();
  ...
  clean_up_mutexes();
  clean_up_error_log_mutex();
  ...
  my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
  exit(exit_code); /* purecov: inspected */
  // terminal

my_end:
  // myISAM debugging mostly
  // called from mysqld_exit(), if !EMBEDDED
  ...
  my_thread_end();
  my_thread_global_end();
  rts

my_thread_global_end:
  // wait until all threads have exited, then destroy mutexes
  // called from my_end()
  rts
[10 Feb 2011 8:33] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/130961

3475 Tatiana Azundris Nurnberg	2011-02-10 [merge]
      merge & fix Bug#48388
[3 Mar 2011 12:08] Tatiana Azundris Nuernberg
correcting, pushed for 5.6.2-m5
[25 Apr 2011 19:06] Paul DuBois
Noted in 5.6.2 changelog.

The server now writes thread shutdown messages to the error log
during the shutdown procedure. 

CHANGESET - http://lists.mysql.com/commits/130961