在WL#6407中,其目的是为了解决shutdown mysql实例的问题,不过主要的代码修改却是重构了对数据库连接相关的管理代码重构。本文的目的主要是梳理这些相关的新增代码。
下图是各个新增类直接的关系及简单描述:
1.新增文件:mysqld_thd_manager.cc mysqld_thd_manager.h, 移除文件sql/global_threads.h
2. 新增THD管理类:Global_THD_manager, 用于管理所有已经注册的线程THD。
3. 针对每个THD,区分两种操作类型,一种是查找类,一种是操作类,分别对应基类Do_THD_Impl 及Find_THD_Impl
通过接口函数来进行调用各个子类
Global_THD_manager::do_for_all_thd_copy 先拷贝thd链表,再对拷贝后的thd执行操作
Global_THD_manager::do_for_all_thd:直接在加锁状态下,操作链表上的THD
Global_THD_manager::find_thd:根据某些条件找到对应THD对象
所有的Do_THD_Impl和Find_THD_Impl的子类,都要重载operator(),以定义对应的调用行为。
4. 从worklog拷贝过来的流程图:
mysqld main thread
|
|
init_resources(mutex,etc)
|
| – – – – – – – – – – – – ->create signal thread
| |
| Wait for signal
create_handlers/slaves/etc |
| close_connections()
| |
join signal thread<- – – – – exit thread
|
cleanup_resources()
|
mysqld_exit()