fix MysqlQueue threads creation bug

This commit is contained in:
zhjc1124
2023-07-11 16:18:21 +00:00
committed by ob-robot
parent 8c04a419a2
commit 27bce01acf

View File

@ -293,7 +293,7 @@ static int start_sql_nio_server(ObSqlNioServer *&sql_nio_server)
net_thread_count = tenant_config->tenant_sql_net_thread_count; net_thread_count = tenant_config->tenant_sql_net_thread_count;
} }
if (0 == net_thread_count) { if (0 == net_thread_count) {
ObTenant *tenant = (ObTenant *)MTL_CTX(); ObTenantBase *tenant = MTL_CTX();
net_thread_count = tenant ? std::max((int)tenant->unit_min_cpu(), 1) : 1; net_thread_count = tenant ? std::max((int)tenant->unit_min_cpu(), 1) : 1;
} }
sql_nio_server->get_nio()->set_run_wrapper(MTL_CTX()); sql_nio_server->get_nio()->set_run_wrapper(MTL_CTX());
@ -349,24 +349,26 @@ static int start_mysql_queue(QueueThread *&qthread)
K(qthread->tg_id_)); K(qthread->tg_id_));
} else { } else {
qthread->queue_.set_qhandler(&GCTX.net_frame_->get_deliver().get_qhandler()); qthread->queue_.set_qhandler(&GCTX.net_frame_->get_deliver().get_qhandler());
if (OB_FAIL(TG_SET_RUNNABLE_AND_START(qthread->tg_id_, qthread->thread_))) {
int sql_thread_count = 0;
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
if (tenant_config.is_valid()) {
sql_thread_count = tenant_config->tenant_sql_login_thread_count;
}
if (0 == sql_thread_count) {
ObTenantBase *tenant = MTL_CTX();
sql_thread_count = tenant ? std::max((int)tenant->unit_min_cpu(), 1) : 1;
}
if (OB_FAIL(TG_SET_RUNNABLE(qthread->tg_id_, qthread->thread_))) {
LOG_WARN("fail to set runnable", K(ret), K(tenant_id), K(qthread->tg_id_));
} else if (OB_FAIL(qthread->set_thread_count(sql_thread_count))) {
LOG_WARN("fail to set thread count", K(ret), K(tenant_id), K(qthread->tg_id_));
} else if(OB_FAIL(TG_START(qthread->tg_id_))) {
LOG_ERROR("fail to start qthread", K(ret), K(tenant_id), K(qthread->tg_id_)); LOG_ERROR("fail to start qthread", K(ret), K(tenant_id), K(qthread->tg_id_));
} else { } else {
int sql_thread_count = 0; LOG_INFO("tenant mysql_queue mtl_start success", K(ret),
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); K(tenant_id), K(qthread->tg_id_), K(sql_thread_count));
if (tenant_config.is_valid()) {
sql_thread_count = tenant_config->tenant_sql_login_thread_count;
}
if (0 == sql_thread_count) {
ObTenant *tenant = (ObTenant *)MTL_CTX();
sql_thread_count = tenant ? std::max((int)tenant->unit_min_cpu(), 1) : 1;
}
if (OB_FAIL(qthread->set_thread_count(sql_thread_count))) {
LOG_WARN("fail to set thread count", K(ret), K(tenant_id), K(qthread->tg_id_));
} else {
LOG_INFO("tenant mysql_queue mtl_start success", K(ret),
K(tenant_id), K(qthread->tg_id_), K(sql_thread_count));
}
} }
} }
} }
@ -2228,18 +2230,20 @@ int ObSrvNetworkFrame::reload_tenant_sql_thread_config(const uint64_t tenant_id)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
ObTenant *tenant = NULL;
// reload tenant_sql_login_thread_count // reload tenant_sql_login_thread_count
int sql_login_thread_count = 0; int sql_login_thread_count = 0;
if (tenant_config.is_valid()) { if (tenant_config.is_valid()) {
sql_login_thread_count = tenant_config->tenant_sql_login_thread_count; sql_login_thread_count = tenant_config->tenant_sql_login_thread_count;
} }
if (0 == sql_login_thread_count) {
ObTenant *tenant = (ObTenant *)MTL_CTX(); ObTenantBase *tenant = NULL;
sql_login_thread_count = tenant ? std::max((int)tenant->unit_min_cpu(), 1) : 1;
}
MTL_SWITCH(tenant_id) { MTL_SWITCH(tenant_id) {
if (0 == sql_login_thread_count) {
tenant = MTL_CTX();
sql_login_thread_count = tenant ? std::max((int)tenant->unit_min_cpu(), 1) : 1;
}
QueueThread *mysql_queue = MTL(QueueThread *); QueueThread *mysql_queue = MTL(QueueThread *);
if (OB_NOT_NULL(mysql_queue) && mysql_queue->set_thread_count(sql_login_thread_count)) { if (OB_NOT_NULL(mysql_queue) && mysql_queue->set_thread_count(sql_login_thread_count)) {
LOG_WARN("update tenant_sql_login_thread_count fail", K(ret)); LOG_WARN("update tenant_sql_login_thread_count fail", K(ret));
@ -2250,11 +2254,12 @@ int ObSrvNetworkFrame::reload_tenant_sql_thread_config(const uint64_t tenant_id)
// int sql_net_thread_count = 0; // int sql_net_thread_count = 0;
// if (tenant_config.is_valid()) { // if (tenant_config.is_valid()) {
// sql_net_thread_count = tenant_config->tenant_sql_net_thread_count; // sql_net_thread_count = tenant_config->tenant_sql_net_thread_count;
// MTL_SWITCH(tenant_id) {
// if (0 == sql_net_thread_count) { // if (0 == sql_net_thread_count) {
// sql_net_thread_count = // sql_net_thread_count =
// NULL == tenant ? 1 : std::max((int)tenant->unit_min_cpu(), 1); // NULL == tenant ? 1 : std::max((int)tenant->unit_min_cpu(), 1);
// } // }
// MTL_SWITCH(tenant_id) {
// ObSqlNioServer *sql_nio_server = MTL(ObSqlNioServer *); // ObSqlNioServer *sql_nio_server = MTL(ObSqlNioServer *);
// int cur_sql_net_thread_count = // int cur_sql_net_thread_count =
// sql_nio_server->get_nio()->get_thread_count(); // sql_nio_server->get_nio()->get_thread_count();