...
 
Commits (11)
    https://gitcode.net/oceanbase/obproxy/-/commit/fb74c5bd98f73949baa4493147de9969db89d685 add some log 2023-04-02T17:07:21+08:00 xiaoleizi2016 hello.leichen@foxmail.com https://gitcode.net/oceanbase/obproxy/-/commit/42950cf0504f5909cc999d3d8ad1a1acdfb005e9 logic db 2023-04-02T17:59:29+08:00 xiaoleizi2016 hello.leichen@foxmail.com https://gitcode.net/oceanbase/obproxy/-/commit/472fff2ebeff11c2df83e3eeaad12010141c2eb3 Merge branch 'master' into issue0402 2023-04-03T09:24:06+08:00 xiaoleizi2016 hello.leichen@foxmail.com https://gitcode.net/oceanbase/obproxy/-/commit/f8e15a3502298ffb1f416c6794844f8950295201 add: add variable weak_read_user_list 2023-05-08T15:38:53+08:00 ftai ftai@trip.com https://gitcode.net/oceanbase/obproxy/-/commit/bf82ac88a91ef349960f207a933f2702a893b266 update: change way to get proxy config 2023-06-02T15:14:12+08:00 ftai ftai@trip.com https://gitcode.net/oceanbase/obproxy/-/commit/b3b0b709193ca76e21f2f4e0fddb0ede1ac8115c update: update func name 2023-06-05T10:16:35+08:00 ftai ftai@trip.com https://gitcode.net/oceanbase/obproxy/-/commit/94c958da2f69b68923298cfe71491fba011d395a modified: src/obproxy/obutils/ob_config_processor.h 2023-06-06T16:57:15+08:00 ftai ftai@trip.com https://gitcode.net/oceanbase/obproxy/-/commit/227355ac2df0790b2707e8a35d5b664e26f3535e Merge pull request #39 from xiaoleizi2016/issue0402 2023-06-30T09:43:00+08:00 Wesley Wang wgs13579@gmail.com Issue0402 https://gitcode.net/oceanbase/obproxy/-/commit/b990a438da6e2f6c9c4f72628a569fdab5d35b55 modified: src/obproxy/proxy/mysql/ob_mysql_transact.cpp 2023-06-30T16:09:19+08:00 TyphoonTai 531778559@qq.com https://gitcode.net/oceanbase/obproxy/-/commit/348ab14aafae4a11d5416c06c31180b33c514d26 modified: src/obproxy/proxy/mysql/ob_mysql_transact.cpp 2023-06-30T16:32:19+08:00 TyphoonTai 531778559@qq.com https://gitcode.net/oceanbase/obproxy/-/commit/c31aef1bf498f68b98e65dcd8cc3bb612536366e Merge pull request #42 from TyphoonTai/master 2023-06-30T16:37:09+08:00 Wesley Wang wgs13579@gmail.com feat: enable weakly consistent read for users on obproxy V4
......@@ -768,6 +768,22 @@ int ObConfigProcessor::get_proxy_config_int_item(const ObVipAddr &addr, const Ob
return ret;
}
int ObConfigProcessor::get_proxy_config_strlist_item(const ObVipAddr &addr, const ObString &cluster_name,
const ObString &tenant_name, const ObString& name,
ObConfigStrListItem &ret_item)
{
int ret = OB_SUCCESS;
ObConfigItem item;
if (OB_FAIL(get_proxy_config(addr, cluster_name, tenant_name, name, item))) {
LOG_WARN("get proxy config failed", K(addr), K(cluster_name), K(tenant_name), K(name), K(ret));
} else {
ret_item = item.str();
LOG_DEBUG("get list item succ", K(ret_item));
}
return ret;
}
} // end of obutils
} // end of obproxy
} // end of oceanbase
......@@ -116,6 +116,9 @@ public:
int get_proxy_config_int_item(const ObVipAddr &addr, const common::ObString &cluster_name,
const common::ObString &tenant_name, const common::ObString& name,
common::ObConfigIntItem &ret_item);
int get_proxy_config_strlist_item(const ObVipAddr &addr, const common::ObString &cluster_name,
const common::ObString &tenant_name, const common::ObString& name,
common::ObConfigStrListItem &ret_item);
int get_proxy_config_with_level(const ObVipAddr &addr, const common::ObString &cluster_name,
const common::ObString &tenant_name, const common::ObString& name,
common::ObConfigItem &ret_item, const ObString level, bool &found);
......
......@@ -420,7 +420,7 @@ public:
DEF_BOOL(enable_mysql_proxy_pool, "true", "if enabled, will long conn for sequence ", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
// sidecar
DEF_BOOL(enable_sharding, "false", "if enabled means use beyond trust", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
DEF_BOOL(enable_sharding, "false", "if enabled means use logic db", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
DEF_STR(sidecar_node_id, "", "node id for dbmesh", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
DEF_STR(dataplane_host, "", "dataplane address or hostname", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
DEF_BOOL(use_local_dbconfig, "false", "if enabled, start dbmesh with local dbconfig", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
......@@ -486,6 +486,8 @@ public:
DEF_BOOL(enable_read_write_split, "false", "if enabled, use read write split mode", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_SYS);
DEF_BOOL(enable_transaction_split, "false", "if enabled, support transaction split", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_SYS);
DEF_STR_LIST(weak_read_user_list, "", "weak read for list of users, format user1;user2", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_USER);
// binlog service
DEF_STR(binlog_service_ip, "", "binlog service ip, format ip1:sql_port1", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_SYS);
DEF_BOOL(enable_binlog_service, "false", "if enabled, obproxy will send binlog request to OBLogProxy", CFG_NO_NEED_REBOOT, CFG_SECTION_OBPROXY, CFG_VISIBLE_LEVEL_SYS);
......
......@@ -6131,26 +6131,57 @@ int ObMysqlTransact::ObTransState::get_config_item(const ObString& cluster_name,
}
if (OB_SUCC(ret)) {
ObConfigIntItem int_item;
if (OB_FAIL(get_global_config_processor().get_proxy_config_int_item(
addr, cluster_name, tenant_name, "obproxy_read_consistency", int_item))) {
LOG_WARN("get vip obproxy_read_consistency failed", K(addr), K(cluster_name), K(tenant_name), K(ret));
ObConfigStrListItem strlist_item;
if (OB_FAIL(get_global_config_processor().get_proxy_config_strlist_item(
addr, cluster_name, tenant_name, "weak_read_user_list", strlist_item))) {
LOG_WARN("get vip weak_read_user_list failed", K(addr), K(cluster_name), K(tenant_name), K(ret));
} else {
bool is_request_follower = (RequestFollower == int_item.get_value());
bool is_sys_var_update = (session_info.is_request_follower_user() != is_request_follower);
session_info.set_is_request_follower_user(is_request_follower);
if (is_sys_var_update) {
ObString ob_read_consistency("ob_read_consistency");
ObString weak;
if (session_info.is_request_follower_user()) {
weak = "2";
} else {
weak = "3";
bool is_weak_read_user = false;
int64_t total_size = strlist_item.size();
if (OB_UNLIKELY(total_size > 0)) {
ObMysqlAuthRequest &auth_req = session_info.get_login_req();
ObHSRResult &hsr = auth_req.get_hsr_result();
char user_buf[MAX_VALUE_LENGTH];
for (int64_t i = 0; OB_SUCC(ret) && i < total_size; ++i) {
user_buf[0] = '\0';
if (OB_FAIL(strlist_item.get(i, user_buf, static_cast<int64_t>(sizeof(user_buf))))) {
LOG_WARN("get weak read user list variables failed", K(ret));
} else{
if (hsr.response_.get_username().prefix_match(user_buf)){
is_weak_read_user = true;
break;
}
}
}
if (OB_FAIL(session_info.update_sys_variable(ob_read_consistency, weak))) {
LOG_WARN("replace user variables failed", K(weak), K(ret));
} else {
session_info.set_read_consistency_set_flag(true);
}
bool is_request_follower = false;
if (is_weak_read_user){
is_request_follower = true;
} else{
ObConfigIntItem int_item;
if (OB_FAIL(get_global_config_processor().get_proxy_config_int_item(
addr, cluster_name, tenant_name, "obproxy_read_consistency", int_item))) {
LOG_WARN("get vip obproxy_read_consistency failed", K(addr), K(cluster_name), K(tenant_name), K(ret));
} else{
is_request_follower = (RequestFollower == int_item.get_value());
}
}
if (OB_SUCC(ret)) {
bool is_sys_var_update = (session_info.is_request_follower_user() != is_request_follower);
session_info.set_is_request_follower_user(is_request_follower);
if (is_sys_var_update) {
ObString ob_read_consistency("ob_read_consistency");
ObString weak;
if (session_info.is_request_follower_user()) {
weak = "2";
} else {
weak = "3";
}
if (OB_FAIL(session_info.update_sys_variable(ob_read_consistency, weak))) {
LOG_WARN("replace user variables failed", K(weak), K(ret));
} else {
session_info.set_read_consistency_set_flag(true);
}
}
}
}
......
......@@ -269,9 +269,10 @@ int ObLayout::construct_dirs()
} else if (OB_FAIL(construct_single_dir(CONF_PATH, conf_dir_))) {
MPRINT("fail to construct .conf dir, ret=%d", ret);
} else if (OB_FAIL(construct_single_dir(CONTROL_CONFIG_PATH, control_config_dir_))) {
MPRINT("fail to construct .conf dir, ret=%d", ret);
MPRINT("fail to construct control-config dir, ret=%d", ret);
} else if (OB_FAIL(construct_single_dir(DBCONFIG_PATH, dbconfig_dir_))) {
} else { }
MPRINT("fail to construct sharding-config dir, ret=%d", ret);
}
return ret;
}
......