/* * __wt_cache_config -- * Configure or reconfigure the current cache and shared cache. */ int __wt_cache_config(WT_SESSION_IMPL *session, bool reconfigure, const char *cfg[]) { WT_CONFIG_ITEM cval; WT_CONNECTION_IMPL *conn; bool now_shared, was_shared; conn = S2C(session); WT_ASSERT(session, conn->cache != NULL); WT_RET(__wt_config_gets_none(session, cfg, "shared_cache.name", &cval)); now_shared = cval.len != 0; was_shared = F_ISSET(conn, WT_CONN_CACHE_POOL); /* Cleanup if reconfiguring */ if (reconfigure && was_shared && !now_shared) /* Remove ourselves from the pool if necessary */ WT_RET(__wt_conn_cache_pool_destroy(session)); else if (reconfigure && !was_shared && now_shared) /* * Cache size will now be managed by the cache pool - the * start size always needs to be zero to allow the pool to * manage how much memory is in-use. */ conn->cache_size = 0; /* * Always setup the local cache - it's used even if we are * participating in a shared cache. */ WT_RET(__cache_config_local(session, now_shared, cfg)); if (now_shared) { WT_RET(__wt_cache_pool_config(session, cfg)); WT_ASSERT(session, F_ISSET(conn, WT_CONN_CACHE_POOL)); if (!was_shared) WT_RET(__wt_conn_cache_pool_open(session)); } /* * Resize the thread group if reconfiguring, otherwise the thread group * will be initialized as part of creating the cache. */ if (reconfigure) WT_RET(__wt_thread_group_resize( session, &conn->evict_threads, conn->evict_threads_min, conn->evict_threads_max, WT_THREAD_CAN_WAIT | WT_THREAD_PANIC_FAIL)); return (0); }
/* * __wt_cache_config -- * Configure or reconfigure the current cache and shared cache. */ int __wt_cache_config(WT_SESSION_IMPL *session, int reconfigure, const char *cfg[]) { WT_CONFIG_ITEM cval; WT_CONNECTION_IMPL *conn; int now_shared, was_shared; conn = S2C(session); WT_ASSERT(session, conn->cache != NULL); WT_RET(__wt_config_gets_none(session, cfg, "shared_cache.name", &cval)); now_shared = cval.len != 0; was_shared = F_ISSET(conn, WT_CONN_CACHE_POOL); /* Cleanup if reconfiguring */ if (reconfigure && was_shared && !now_shared) /* Remove ourselves from the pool if necessary */ WT_RET(__wt_conn_cache_pool_destroy(session)); else if (reconfigure && !was_shared && now_shared) /* * Cache size will now be managed by the cache pool - the * start size always needs to be zero to allow the pool to * manage how much memory is in-use. */ conn->cache_size = 0; /* * Always setup the local cache - it's used even if we are * participating in a shared cache. */ WT_RET(__cache_config_local(session, now_shared, cfg)); if (now_shared) { WT_RET(__wt_cache_pool_config(session, cfg)); WT_ASSERT(session, F_ISSET(conn, WT_CONN_CACHE_POOL)); if (!was_shared) WT_RET(__wt_conn_cache_pool_open(session)); } return (0); }
/*读取配置信息,将配置信息设置到当前conn的cache信息*/ int __wt_cache_config(WT_SESSION_IMPL *session, int reconfigure, const char *cfg[]) { WT_CONFIG_ITEM cval; WT_CONNECTION_IMPL *conn; int now_shared, was_shared; conn = S2C(session); WT_ASSERT(session, conn->cache != NULL); WT_RET(__wt_config_gets_none(session, cfg, "shared_cache.name", &cval)); now_shared = cval.len != 0; was_shared = F_ISSET(conn, WT_CONN_CACHE_POOL); /* Cleanup if reconfiguring */ if (reconfigure && was_shared && !now_shared) /* Remove ourselves from the pool if necessary */ WT_RET(__wt_conn_cache_pool_destroy(session)); /*如果原来是cache pool管理connection cache,现在的配置设置成独立的cache管理,那么从cache pool中删除管理关系*/ else if (reconfigure && !was_shared && now_shared) /* * Cache size will now be managed by the cache pool - the * start size always needs to be zero to allow the pool to * manage how much memory is in-use. */ conn->cache_size = 0; /*配置connection的cache*/ WT_RET(__cache_config_local(session, now_shared, cfg)); if (now_shared) { WT_RET(__wt_cache_pool_config(session, cfg)); /*对cache pool的配置更新*/ WT_ASSERT(session, F_ISSET(conn, WT_CONN_CACHE_POOL)); if (!was_shared) WT_RET(__wt_conn_cache_pool_open(session)); /*将connection cache加入到cache pool当中进行管理*/ } return 0; }