// home:引擎存储的数据库目录
// event_handler:事件处理函数
// config:wt引擎实例的配置参数
// connectionp:数据库操作的实例的二级指针
int wiredtiger_open(const char *home, WT_EVENT_HANDLER *event_handler, const char *config,WT_CONNECTION **connectionp)
{
// 定义wt引擎的静态实例
static const WT_CONNECTION stdc = {.....};
// 每个引擎实例对应一个 __wt_process,在该方法内初始化__wt_process
__wt_library_init();
// 初始化 WT_CONNECTION_IMPL 结构,是实例连接的实现方法,WT_CONNECTION指向的也是conn->iface
__wt_calloc_one(NULL, &conn);
conn->iface = stdc;
__wt_connection_init(conn);
//.解析系统配置模板,根据输入的参数来检查是不是合法
__wt_config_check(session, WT_CONFIG_REF(session, wiredtiger_open), config, 0);
// 设置wt引擎的数据目录,如果home为空,则根据环境变量WIREDTIGER_HOME来设定;
_conn_home(session, home, cfg);
// 默认配置512个哈希桶来存储的wt的扩展
__conn_hash_config(session, cfg);
// 加载应用端加载的扩展
__conn_load_extensions(session, cfg, true);
// 设置wt引擎实例的文件系统操作的posix的方法
__wt_os_posix(session);
// 检查Wt实例中的posix方法是否设置
__conn_chk_file_system(session, F_ISSET(conn, WT_CONN_READONLY));
// wt引擎实例初始化,涉及的步骤相对较多
__conn_single(session, cfg){
// 检查wt数据目录下的 WiredTiger 版本号文件是否存在
__wt_fs_exist(session, WT_WIREDTIGER, &exist);
// 打开WiredTiger.lock 锁文件
__wt_open(session, WT_SINGLETHREAD, WT_FS_OPEN_FILE_TYPE_REGULAR,
is_create || exist ? WT_FS_OPEN_CREATE : 0, &conn->lock_fh);
// WiredTiger.lock锁文件中写入"WiredTiger lock file"
__wt_write(session, conn->lock_fh, (wt_off_t)0,strlen(WT_SINGLETHREAD_STRING),WT_SINGLETHREAD_STRING);
// 创建 WiredTiger 版本号文件
__wt_open(
session, WT_WIREDTIGER, WT_FS_OPEN_FILE_TYPE_REGULAR, is_create ? WT_FS_OPEN_CREATE : 0, &fh);
// 检查系统配置 WiredTiger.turtle、WiredTiger.turtle.set 是否存在,如果存设置WiredTiger.turtle 元数据系统表
__wt_turtle_exists(WT_SESSION_IMPL *session, bool *existp);
// 初始化版本号
__wt_snprintf_len_set(buf, sizeof(buf), &len, "%s\n%s\n", WT_WIREDTIGER, WIREDTIGER_VERSION_STRING));
__wt_write(session, fh, (wt_off_t)0, len, buf);
}
// 代码内置的基本配置写入到WiredTiger.basecfg
__conn_config_file(session, WT_BASECONFIG, false, cfg, i1);
// 用户输入的配置结合系统的基础配置吸入到文件 WiredTiger.config
__conn_config_file(session, WT_USERCONFIG, true, cfg, i2);
/****读取各种配置设置conn掩码 ****/
// lsm引擎的配置,需要读取lsm_manager.merge和lsm_manager.worker_thread_max
__wt_lsm_manager_config(session, cfg);
// 打开引擎实例
__wt_connection_open(conn, cfg) {
// 打开默认的一个Session
__wt_open_internal_session(conn, "connection", false, 0, &session);
// cache初始化
__wt_cache_create(session, cfg);
// 根据配置决定是否要初始化事务系统
__wt_txn_global_init(session, cfg);
}
// 用户扩展的加载和初始化
__conn_builtin_extensions(conn, cfg));
__conn_load_extensions(session, cfg, false));
// 日志管理的初始化
__wt_logmgr_config(session, cfg, false);
// 写入本实例的基本配置
__conn_write_base_config(session, cfg);
// 完成WT_SESSION_IMPL 初始化和更新WiredTiger.wt元数据表的文件
__wt_metadata_init_base_write_gen(session);
__wt_metadata_cursor(session, NULL);
// 设置同步的session
__wt_backup_open(session);
// 启动wt引擎的内部线程
__wt_connection_workers(session, cfg);
}