From 378b220933e54009894b6932c844f578bbc73da1 Mon Sep 17 00:00:00 2001 From: akaError Date: Sun, 23 Apr 2023 02:41:31 +0000 Subject: [PATCH] pre get a position for sys var: _force_order_preserve_set --- deps/easy/src/io/easy_negotiation.c | 18 ++++++------- .../system_variable/ob_sys_var_class_type.h | 1 + .../ob_system_variable_alias.h | 1 + .../ob_system_variable_factory.cpp | 26 ++++++++++++++++++- .../ob_system_variable_factory.h | 9 ++++++- .../ob_system_variable_init.cpp | 14 +++++++++- .../ob_system_variable_init.json | 12 +++++++++ 7 files changed, 69 insertions(+), 12 deletions(-) diff --git a/deps/easy/src/io/easy_negotiation.c b/deps/easy/src/io/easy_negotiation.c index b6c51089c..e8052fb9c 100644 --- a/deps/easy/src/io/easy_negotiation.c +++ b/deps/easy/src/io/easy_negotiation.c @@ -16,9 +16,9 @@ #include #include -const uint64_t g_support_eio_maigc[] = { - 0x12567348667799aa, - 0x1237734866785431, +const uint64_t g_support_eio_maigc[] = { + 0x12567348667799aa, + 0x1237734866785431, 0x5933893228167181, 0x6683221dd298cc23, }; @@ -212,9 +212,9 @@ int net_send_negotiate_message(uint8_t negotiation_enable, int fd, uint64_t magi return ret; } - if ((ret = easy_socket_error(fd) ) != 0) { - easy_info_log("retry! socket status is abnormal yet, fd:%d, addr:%s, err:%d.", fd, addr_str, ret); - if (conn_has_error) *conn_has_error = 1; + if ((ret = easy_socket_error(fd) ) != 0) { + easy_info_log("retry! socket status is abnormal yet, fd:%d, addr:%s, err:%d.", fd, addr_str, ret); + if (conn_has_error) *conn_has_error = 1; return ret; } @@ -228,9 +228,9 @@ int net_send_negotiate_message(uint8_t negotiation_enable, int fd, uint64_t magi ne_msg.msg_body.io_thread_index, encode_len, addr_str); } } - } else { - easy_info_log("negotiation not enabled!(addr:%s)", addr_str); - } + } else { + easy_info_log("negotiation not enabled!(addr:%s)", addr_str); + } return ret; } diff --git a/src/share/system_variable/ob_sys_var_class_type.h b/src/share/system_variable/ob_sys_var_class_type.h index 9df7e511b..26f39984b 100644 --- a/src/share/system_variable/ob_sys_var_class_type.h +++ b/src/share/system_variable/ob_sys_var_class_type.h @@ -244,6 +244,7 @@ enum ObSysVarClassType SYS_VAR__OPTIMIZER_GATHER_STATS_ON_LOAD = 10138, SYS_VAR__SET_REVERSE_DBLINK_INFOS = 10139, SYS_VAR__SHOW_DDL_IN_COMPAT_MODE = 10140, + SYS_VAR__FORCE_ORDER_PRESERVE_SET = 10141, }; } diff --git a/src/share/system_variable/ob_system_variable_alias.h b/src/share/system_variable/ob_system_variable_alias.h index 3c365cbb8..46fff486a 100644 --- a/src/share/system_variable/ob_system_variable_alias.h +++ b/src/share/system_variable/ob_system_variable_alias.h @@ -239,6 +239,7 @@ namespace share static const char* const OB_SV__OPTIMIZER_GATHER_STATS_ON_LOAD = "_optimizer_gather_stats_on_load"; static const char* const OB_SV__SET_REVERSE_DBLINK_INFOS = "_set_reverse_dblink_infos"; static const char* const OB_SV__SHOW_DDL_IN_COMPAT_MODE = "_show_ddl_in_compat_mode"; + static const char* const OB_SV__FORCE_ORDER_PRESERVE_SET = "_force_order_preserve_set"; } } diff --git a/src/share/system_variable/ob_system_variable_factory.cpp b/src/share/system_variable/ob_system_variable_factory.cpp index 0a2827883..2a218dd38 100644 --- a/src/share/system_variable/ob_system_variable_factory.cpp +++ b/src/share/system_variable/ob_system_variable_factory.cpp @@ -125,6 +125,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "_enable_parallel_ddl", "_enable_parallel_dml", "_enable_parallel_query", + "_force_order_preserve_set", "_force_parallel_ddl_dop", "_force_parallel_dml_dop", "_force_parallel_query_dop", @@ -351,6 +352,7 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { SYS_VAR__ENABLE_PARALLEL_DDL, SYS_VAR__ENABLE_PARALLEL_DML, SYS_VAR__ENABLE_PARALLEL_QUERY, + SYS_VAR__FORCE_ORDER_PRESERVE_SET, SYS_VAR__FORCE_PARALLEL_DDL_DOP, SYS_VAR__FORCE_PARALLEL_DML_DOP, SYS_VAR__FORCE_PARALLEL_QUERY_DOP, @@ -792,7 +794,8 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = { "ob_max_read_stale_time", "_optimizer_gather_stats_on_load", "_set_reverse_dblink_infos", - "_show_ddl_in_compat_mode" + "_show_ddl_in_compat_mode", + "_force_order_preserve_set" }; bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2) @@ -1183,6 +1186,7 @@ int ObSysVarFactory::create_all_sys_vars() + sizeof(ObSysVarOptimizerGatherStatsOnLoad) + sizeof(ObSysVarSetReverseDblinkInfos) + sizeof(ObSysVarShowDdlInCompatMode) + + sizeof(ObSysVarForceOrderPreserveSet) ; void *ptr = NULL; if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) { @@ -3198,6 +3202,15 @@ int ObSysVarFactory::create_all_sys_vars() ptr = (void *)((char *)ptr + sizeof(ObSysVarShowDdlInCompatMode)); } } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarForceOrderPreserveSet())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarForceOrderPreserveSet", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR__FORCE_ORDER_PRESERVE_SET))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarForceOrderPreserveSet)); + } + } } return ret; @@ -5677,6 +5690,17 @@ int ObSysVarFactory::create_sys_var(ObSysVarClassType sys_var_id, ObBasicSysVar } break; } + case SYS_VAR__FORCE_ORDER_PRESERVE_SET: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarForceOrderPreserveSet)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarForceOrderPreserveSet))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarForceOrderPreserveSet())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarForceOrderPreserveSet", K(ret)); + } + break; + } default: { ret = OB_ERR_UNEXPECTED; diff --git a/src/share/system_variable/ob_system_variable_factory.h b/src/share/system_variable/ob_system_variable_factory.h index c5e1fa02c..6e6ee79ac 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -1612,6 +1612,13 @@ public: inline virtual ObSysVarClassType get_type() const { return SYS_VAR__SHOW_DDL_IN_COMPAT_MODE; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(222); } }; +class ObSysVarForceOrderPreserveSet : public ObBoolSysVar +{ +public: + ObSysVarForceOrderPreserveSet() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR__FORCE_ORDER_PRESERVE_SET; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(223); } +}; class ObSysVarFactory @@ -1631,7 +1638,7 @@ public: static const common::ObString get_sys_var_name_by_id(ObSysVarClassType sys_var_id); const static int64_t MYSQL_SYS_VARS_COUNT = 97; - const static int64_t OB_SYS_VARS_COUNT = 126; + const static int64_t OB_SYS_VARS_COUNT = 127; const static int64_t ALL_SYS_VARS_COUNT = MYSQL_SYS_VARS_COUNT + OB_SYS_VARS_COUNT; const static int16_t OB_SPECIFIC_SYS_VAR_ID_OFFSET = 10000; diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index f352aea87..c73d72a41 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -2927,13 +2927,25 @@ static struct VarsInit{ ObSysVars[222].alias_ = "OB_SV__SHOW_DDL_IN_COMPAT_MODE" ; }(); + [&] (){ + ObSysVars[223].info_ = "can control the behavior of set query, when true, set query will generate a serial plan, which ensure the output order of result set is ordered " ; + ObSysVars[223].name_ = "_force_order_preserve_set" ; + ObSysVars[223].data_type_ = ObIntType ; + ObSysVars[223].value_ = "0" ; + ObSysVars[223].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN | ObSysVarFlag::NEED_SERIALIZE | ObSysVarFlag::ORACLE_ONLY | ObSysVarFlag::INVISIBLE ; + ObSysVars[223].id_ = SYS_VAR__FORCE_ORDER_PRESERVE_SET ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR__FORCE_ORDER_PRESERVE_SET)) ; + ObSysVarsIdToArrayIdx[SYS_VAR__FORCE_ORDER_PRESERVE_SET] = 223 ; + ObSysVars[223].alias_ = "OB_SV__FORCE_ORDER_PRESERVE_SET" ; + }(); + if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) { HasInvalidSysVar = true; } } }vars_init; -static int64_t var_amount = 223; +static int64_t var_amount = 224; int64_t ObSysVariables::get_all_sys_var_count(){ return ObSysVarFactory::ALL_SYS_VARS_COUNT;} ObSysVarClassType ObSysVariables::get_sys_var_id(int64_t i){ return ObSysVars[i].id_;} diff --git a/src/share/system_variable/ob_system_variable_init.json b/src/share/system_variable/ob_system_variable_init.json index c8a722cda..195db13e7 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -2956,5 +2956,17 @@ "info_cn": "启用后, show create table 将展示与兼容模式严格兼容的结果", "background_cn": "", "ref_url": "/" + }, + "_force_order_preserve_set": { + "id": 10141, + "name": "_force_order_preserve_set", + "value": "0", + "data_type": "bool", + "info": "can control the behavior of set query, when true, set query will generate a serial plan, which ensure the output order of result set is ordered ", + "flags": "GLOBAL | SESSION | INFLUENCE_PLAN | NEED_SERIALIZE | ORACLE_ONLY | INVISIBLE", + "publish_version": "420", + "info_cn": "用于控制set query的改写行为和计划生成逻辑,保证分支串行执行和结果集顺序", + "background_cn": "", + "ref_url": "" } }