From 9a57e64e56f2a34053683e567db0736ff9a63ebb Mon Sep 17 00:00:00 2001 From: tino247 Date: Tue, 18 Apr 2023 03:44:59 +0000 Subject: [PATCH] [UPGRADE] Upgrade cluster_version/data_version to 4.2.0.0 --- CMakeLists.txt | 2 +- rpm/oceanbase.spec | 2 +- src/rootserver/restore/ob_restore_util.cpp | 7 +- src/share/ob_cluster_version.cpp | 8 +-- src/share/ob_cluster_version.h | 10 ++- src/share/ob_upgrade_utils.cpp | 27 ++++--- src/share/ob_upgrade_utils.h | 4 +- src/share/parameter/ob_parameter_seed.ipp | 4 +- tools/upgrade/actions.py | 4 +- tools/upgrade/oceanbase_upgrade_dep.yml | 6 ++ tools/upgrade/upgrade_checker.py | 78 ++++++++++---------- tools/upgrade/upgrade_post.py | 82 ++++++++++------------ tools/upgrade/upgrade_pre.py | 82 ++++++++++------------ 13 files changed, 159 insertions(+), 157 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 63b0e716f..94c3c133c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ include(cmake/Utils.cmake) include(cmake/Env.cmake) project("OceanBase_CE" - VERSION 4.1.0.0 + VERSION 4.2.0.0 DESCRIPTION "OceanBase distributed database system" HOMEPAGE_URL "https://open.oceanbase.com/" LANGUAGES CXX C ASM) diff --git a/rpm/oceanbase.spec b/rpm/oceanbase.spec index c2086c573..eaa92cdbd 100644 --- a/rpm/oceanbase.spec +++ b/rpm/oceanbase.spec @@ -1,4 +1,4 @@ Name: %NAME -Version:4.1.0.0 +Version:4.2.0.0 Release: %RELEASE BuildRequires: binutils = 2.30 diff --git a/src/rootserver/restore/ob_restore_util.cpp b/src/rootserver/restore/ob_restore_util.cpp index 4334cbdd5..2836b7700 100644 --- a/src/rootserver/restore/ob_restore_util.cpp +++ b/src/rootserver/restore/ob_restore_util.cpp @@ -569,10 +569,9 @@ int ObRestoreUtil::check_backup_set_version_match_(share::ObBackupSetFileDesc &b if (!backup_file_desc.is_valid()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid argument", K(ret), K(backup_file_desc)); - } else if (CLUSTER_VERSION_4_0_0_0 > backup_file_desc.cluster_version_ - || CLUSTER_VERSION_4_1_0_0 < backup_file_desc.cluster_version_) { // TODO(chongrong.th) wait yanmu provide the check cluster version exist interface + } else if (!ObUpgradeChecker::check_cluster_version_exist(backup_file_desc.cluster_version_)) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("data version are not exist", K(ret)); + LOG_WARN("cluster version are not exist", K(ret)); LOG_USER_ERROR(OB_INVALID_ARGUMENT, "cluster version of backup set"); } else if (!ObUpgradeChecker::check_data_version_exist(backup_file_desc.tenant_compatible_)) { ret = OB_INVALID_ARGUMENT; @@ -794,4 +793,4 @@ int ObRestoreUtil::check_physical_restore_finish( } } return ret; -} \ No newline at end of file +} diff --git a/src/share/ob_cluster_version.cpp b/src/share/ob_cluster_version.cpp index 72a5d128c..af7794acc 100644 --- a/src/share/ob_cluster_version.cpp +++ b/src/share/ob_cluster_version.cpp @@ -282,11 +282,9 @@ int ObClusterVersion::get_tenant_data_version( if (tenant_config.is_valid() && tenant_config->compatible.value_updated()) { data_version = tenant_config->compatible; } else if (is_sys_tenant(tenant_id) - || is_meta_tenant(tenant_id) - || get_cluster_version() <= CLUSTER_VERSION_4_1_0_0) { - // 1. For sys/meta tenant, circular dependency problem may exist when load tenant config from inner tables. - // For safety, data_version will fallback to last barrier data version until actual tenant config is loaded. - // 2. To compatible with upgrade path from 4.0 to 4.1 + || is_meta_tenant(tenant_id)) { + // For sys/meta tenant, circular dependency problem may exist when load tenant config from inner tables. + // For safety, data_version will fallback to last barrier data version until actual tenant config is loaded. data_version = LAST_BARRIER_DATA_VERSION; if (REACH_TIME_INTERVAL(60 * 1000 * 1000L)) { share::ObTaskController::get().allow_next_syslog(); diff --git a/src/share/ob_cluster_version.h b/src/share/ob_cluster_version.h index 40a332583..eb993afc2 100644 --- a/src/share/ob_cluster_version.h +++ b/src/share/ob_cluster_version.h @@ -166,9 +166,10 @@ cal_version(const uint64_t major, const uint64_t minor, const uint64_t major_pat #define CLUSTER_VERSION_3_2_3_0 (oceanbase::common::cal_version(3, 2, 3, 0)) #define CLUSTER_VERSION_4_0_0_0 (oceanbase::common::cal_version(4, 0, 0, 0)) #define CLUSTER_VERSION_4_1_0_0 (oceanbase::common::cal_version(4, 1, 0, 0)) +#define CLUSTER_VERSION_4_2_0_0 (oceanbase::common::cal_version(4, 2, 0, 0)) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //TODO: If you update the above version, please update CLUSTER_CURRENT_VERSION. -#define CLUSTER_CURRENT_VERSION CLUSTER_VERSION_4_1_0_0 +#define CLUSTER_CURRENT_VERSION CLUSTER_VERSION_4_2_0_0 #define GET_MIN_CLUSTER_VERSION() (oceanbase::common::ObClusterVersion::get_instance().get_cluster_version()) #define IS_CLUSTER_VERSION_BEFORE_4_1_0_0 (oceanbase::common::ObClusterVersion::get_instance().get_cluster_version() < CLUSTER_VERSION_4_1_0_0) @@ -179,10 +180,13 @@ cal_version(const uint64_t major, const uint64_t minor, const uint64_t major_pat // 3. TODO: If you update data_version below, please update DATA_CURRENT_VERSION & ObUpgradeChecker too. #define DATA_VERSION_4_0_0_0 (oceanbase::common::cal_version(4, 0, 0, 0)) #define DATA_VERSION_4_1_0_0 (oceanbase::common::cal_version(4, 1, 0, 0)) +#define DATA_VERSION_4_2_0_0 (oceanbase::common::cal_version(4, 2, 0, 0)) +#define DATA_CURRENT_VERSION DATA_VERSION_4_2_0_0 +// ATTENSION !!!!!!!!!!!!!!!!!!!!!!!!!!! +// LAST_BARRIER_DATA_VERSION should be the latest barrier data version before DATA_CURRENT_VERSION +#define LAST_BARRIER_DATA_VERSION DATA_VERSION_4_1_0_0 // should check returned ret -#define LAST_BARRIER_DATA_VERSION DATA_VERSION_4_0_0_0 -#define DATA_CURRENT_VERSION DATA_VERSION_4_1_0_0 #define GET_MIN_DATA_VERSION(tenant_id, data_version) (oceanbase::common::ObClusterVersion::get_instance().get_tenant_data_version((tenant_id), (data_version))) #define TENANT_NEED_UPGRADE(tenant_id, need) (oceanbase::common::ObClusterVersion::get_instance().tenant_need_upgrade((tenant_id), (need))) // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src/share/ob_upgrade_utils.cpp b/src/share/ob_upgrade_utils.cpp index 35e1a0cb6..5877f03fc 100644 --- a/src/share/ob_upgrade_utils.cpp +++ b/src/share/ob_upgrade_utils.cpp @@ -35,7 +35,8 @@ namespace share { const uint64_t ObUpgradeChecker::UPGRADE_PATH[DATA_VERSION_NUM] = { CALC_VERSION(4UL, 0UL, 0UL, 0UL), // 4.0.0.0 - CALC_VERSION(4UL, 1UL, 0UL, 0UL) // 4.1.0.0 + CALC_VERSION(4UL, 1UL, 0UL, 0UL), // 4.1.0.0 + CALC_VERSION(4UL, 2UL, 0UL, 0UL) // 4.2.0.0 }; int ObUpgradeChecker::get_data_version_by_cluster_version( @@ -44,14 +45,15 @@ int ObUpgradeChecker::get_data_version_by_cluster_version( { int ret = OB_SUCCESS; switch (cluster_version) { - case CLUSTER_VERSION_4_0_0_0: { - data_version = DATA_VERSION_4_0_0_0; - break; - } - case CLUSTER_VERSION_4_1_0_0: { - data_version = DATA_VERSION_4_1_0_0; - break; +#define CONVERT_CLUSTER_VERSION_TO_DATA_VERSION(CLUSTER_VERSION, DATA_VERSION) \ + case CLUSTER_VERSION : { \ + data_version = DATA_VERSION; \ + break; \ } + CONVERT_CLUSTER_VERSION_TO_DATA_VERSION(CLUSTER_VERSION_4_0_0_0, DATA_VERSION_4_0_0_0) + CONVERT_CLUSTER_VERSION_TO_DATA_VERSION(CLUSTER_VERSION_4_1_0_0, DATA_VERSION_4_1_0_0) + CONVERT_CLUSTER_VERSION_TO_DATA_VERSION(CLUSTER_VERSION_4_2_0_0, DATA_VERSION_4_2_0_0) +#undef CONVERT_CLUSTER_VERSION_TO_DATA_VERSION default: { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid cluster_version", KR(ret), K(cluster_version)); @@ -71,6 +73,14 @@ bool ObUpgradeChecker::check_data_version_exist( return bret; } +//FIXME:(yanmu.ztl) cluster version should be discrete. +bool ObUpgradeChecker::check_cluster_version_exist( + const uint64_t version) +{ + return version >= CLUSTER_VERSION_4_0_0_0 + && version <= CLUSTER_CURRENT_VERSION; +} + #define FORMAT_STR(str) ObHexEscapeSqlStr(str.empty() ? ObString("") : str) /* @@ -596,6 +606,7 @@ int ObUpgradeProcesserSet::init( // order by data version asc INIT_PROCESSOR_BY_VERSION(4, 0, 0, 0); INIT_PROCESSOR_BY_VERSION(4, 1, 0, 0); + INIT_PROCESSOR_BY_VERSION(4, 2, 0, 0); #undef INIT_PROCESSOR_BY_VERSION inited_ = true; } diff --git a/src/share/ob_upgrade_utils.h b/src/share/ob_upgrade_utils.h index e2c31866a..3cff2d51d 100644 --- a/src/share/ob_upgrade_utils.h +++ b/src/share/ob_upgrade_utils.h @@ -165,11 +165,12 @@ class ObUpgradeChecker { public: static bool check_data_version_exist(const uint64_t version); + static bool check_cluster_version_exist(const uint64_t version); static int get_data_version_by_cluster_version( const uint64_t cluster_version, uint64_t &data_version); public: - static const int64_t DATA_VERSION_NUM = 2; + static const int64_t DATA_VERSION_NUM = 3; static const uint64_t UPGRADE_PATH[DATA_VERSION_NUM]; }; @@ -188,6 +189,7 @@ private: int init_rewrite_rule_version(const uint64_t tenant_id); static int recompile_all_views_and_synonyms(const uint64_t tenant_id); }; +DEF_SIMPLE_UPGRARD_PROCESSER(4, 2, 0, 0) /* =========== special upgrade processor end ============= */ /* =========== upgrade processor end ============= */ diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index bf029dbe7..035f0b54d 100644 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -481,9 +481,9 @@ DEF_TIME(tablet_meta_table_check_interval, OB_CLUSTER_PARAMETER, "30m", "[1m,)", "the time interval that observer compares tablet meta table with local ls replica info " "and make adjustments to ensure the correctness of tablet meta table. Range: [1m,+∞)", ObParameterAttr(Section::ROOT_SERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); -DEF_STR(min_observer_version, OB_CLUSTER_PARAMETER, "4.1.0.0", "the min observer version", +DEF_STR(min_observer_version, OB_CLUSTER_PARAMETER, "4.2.0.0", "the min observer version", ObParameterAttr(Section::ROOT_SERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); -DEF_VERSION(compatible, OB_TENANT_PARAMETER, "4.1.0.0", "compatible version for persisted data", +DEF_VERSION(compatible, OB_TENANT_PARAMETER, "4.2.0.0", "compatible version for persisted data", ObParameterAttr(Section::ROOT_SERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_BOOL(enable_ddl, OB_CLUSTER_PARAMETER, "True", "specifies whether DDL operation is turned on. " "Value: True:turned on; False: turned off", diff --git a/tools/upgrade/actions.py b/tools/upgrade/actions.py index bfe37b09a..f49931003 100755 --- a/tools/upgrade/actions.py +++ b/tools/upgrade/actions.py @@ -18,8 +18,8 @@ class SqlItem: self.action_sql = action_sql self.rollback_sql = rollback_sql -current_cluster_version = "4.1.0.0" -current_data_version = "4.1.0.0" +current_cluster_version = "4.2.0.0" +current_data_version = "4.2.0.0" g_succ_sql_list = [] g_commit_sql_list = [] diff --git a/tools/upgrade/oceanbase_upgrade_dep.yml b/tools/upgrade/oceanbase_upgrade_dep.yml index 5dd365629..b81feab31 100644 --- a/tools/upgrade/oceanbase_upgrade_dep.yml +++ b/tools/upgrade/oceanbase_upgrade_dep.yml @@ -25,6 +25,12 @@ when_come_from: [4.0.0.0] - version: 4.1.0.0 + can_be_upgraded_to: + - 4.2.0.0 require_from_binary: value: True when_come_from: [4.0.0.0, 4.1.0.0] + +- version: 4.2.0.0 + can_be_upgraded_to: + - 4.3.0.0 diff --git a/tools/upgrade/upgrade_checker.py b/tools/upgrade/upgrade_checker.py index cb30b79c0..cbae71292 100755 --- a/tools/upgrade/upgrade_checker.py +++ b/tools/upgrade/upgrade_checker.py @@ -336,7 +336,10 @@ def check_data_version(query_cur): min_cluster_version = get_version(results[0][0]) # check data version - if min_cluster_version >= get_version("4.1.0.0"): + if min_cluster_version < get_version("4.1.0.0"): + # last barrier cluster version should be 4.1.0.0 + fail_list.append('last barrier cluster version is 4.1.0.0. prohibit cluster upgrade from cluster version less than 4.1.0.0') + else: data_version_str = '' data_version = 0 # check compatible is same @@ -350,22 +353,26 @@ def check_data_version(query_cur): data_version_str = results[0][0] data_version = get_version(results[0][0]) - # check target_data_version/current_data_version - sql = "select count(*) from oceanbase.__all_tenant" - (desc, results) = query_cur.exec_query(sql) - if len(results) != 1 or len(results[0]) != 1: - fail_list.append('result cnt not match') + if data_version < get_version("4.1.0.0"): + # last barrier data version should be 4.1.0.0 + fail_list.append('last barrier data version is 4.1.0.0. prohibit cluster upgrade from data version less than 4.1.0.0') else: - tenant_count = results[0][0] - - sql = "select count(*) from __all_virtual_core_table where column_name in ('target_data_version', 'current_data_version') and column_value = {0}".format(data_version) + # check target_data_version/current_data_version + sql = "select count(*) from oceanbase.__all_tenant" (desc, results) = query_cur.exec_query(sql) if len(results) != 1 or len(results[0]) != 1: fail_list.append('result cnt not match') - elif 2 * tenant_count != results[0][0]: - fail_list.append('target_data_version/current_data_version not match with {0}, tenant_cnt:{1}, result_cnt:{2}'.format(data_version_str, tenant_count, results[0][0])) else: - logging.info("check data version success, all tenant's compatible/target_data_version/current_data_version is {0}".format(data_version_str)) + tenant_count = results[0][0] + + sql = "select count(*) from __all_virtual_core_table where column_name in ('target_data_version', 'current_data_version') and column_value = {0}".format(data_version) + (desc, results) = query_cur.exec_query(sql) + if len(results) != 1 or len(results[0]) != 1: + fail_list.append('result cnt not match') + elif 2 * tenant_count != results[0][0]: + fail_list.append('target_data_version/current_data_version not match with {0}, tenant_cnt:{1}, result_cnt:{2}'.format(data_version_str, tenant_count, results[0][0])) + else: + logging.info("check data version success, all tenant's compatible/target_data_version/current_data_version is {0}".format(data_version_str)) # 2. 检查paxos副本是否同步, paxos副本是否缺失 def check_paxos_replica(query_cur): @@ -398,38 +405,25 @@ def check_cluster_status(query_cur): # 5. 检查是否有异常租户(creating,延迟删除,恢复中) def check_tenant_status(query_cur): - min_cluster_version = 0 - sql = """select distinct value from GV$OB_PARAMETERS where name='min_observer_version'""" - (desc, results) = query_cur.exec_query(sql) - if len(results) != 1: - fail_list.append('min_observer_version is not sync') - elif len(results[0]) != 1: - fail_list.append('column cnt not match') + + # check tenant schema + (desc, results) = query_cur.exec_query("""select count(*) as count from DBA_OB_TENANTS where status != 'NORMAL'""") + if len(results) != 1 or len(results[0]) != 1: + fail_list.append('results len not match') + elif 0 != results[0][0]: + fail_list.append('has abnormal tenant, should stop') else: - min_cluster_version = get_version(results[0][0]) + logging.info('check tenant status success') - # check tenant schema - (desc, results) = query_cur.exec_query("""select count(*) as count from DBA_OB_TENANTS where status != 'NORMAL'""") - if len(results) != 1 or len(results[0]) != 1: - fail_list.append('results len not match') - elif 0 != results[0][0]: - fail_list.append('has abnormal tenant, should stop') - else: - logging.info('check tenant status success') - - # check tenant info - # 1. don't support standby tenant upgrade from 4.0.0.0 - # 2. don't support restore tenant upgrade - sub_sql = '' - if min_cluster_version >= get_version("4.1.0.0"): - sub_sql = """ and tenant_role != 'STANDBY'""" - (desc, results) = query_cur.exec_query("""select count(*) as count from oceanbase.__all_virtual_tenant_info where tenant_role != 'PRIMARY' {0}""".format(sub_sql)) - if len(results) != 1 or len(results[0]) != 1: - fail_list.append('results len not match') - elif 0 != results[0][0]: - fail_list.append('has abnormal tenant info, should stop') - else: - logging.info('check tenant info success') + # check tenant info + # don't support restore tenant upgrade + (desc, results) = query_cur.exec_query("""select count(*) as count from oceanbase.__all_virtual_tenant_info where tenant_role != 'PRIMARY' and tenant_role != 'STANDBY'""") + if len(results) != 1 or len(results[0]) != 1: + fail_list.append('results len not match') + elif 0 != results[0][0]: + fail_list.append('has abnormal tenant info, should stop') + else: + logging.info('check tenant info success') # 6. 检查无恢复任务 def check_restore_job_exist(query_cur): diff --git a/tools/upgrade/upgrade_post.py b/tools/upgrade/upgrade_post.py index 8970e5f6c..17fce44b9 100755 --- a/tools/upgrade/upgrade_post.py +++ b/tools/upgrade/upgrade_post.py @@ -26,8 +26,8 @@ # self.action_sql = action_sql # self.rollback_sql = rollback_sql # -#current_cluster_version = "4.1.0.0" -#current_data_version = "4.1.0.0" +#current_cluster_version = "4.2.0.0" +#current_data_version = "4.2.0.0" #g_succ_sql_list = [] #g_commit_sql_list = [] # @@ -1843,7 +1843,10 @@ # min_cluster_version = get_version(results[0][0]) # # # check data version -# if min_cluster_version >= get_version("4.1.0.0"): +# if min_cluster_version < get_version("4.1.0.0"): +# # last barrier cluster version should be 4.1.0.0 +# fail_list.append('last barrier cluster version is 4.1.0.0. prohibit cluster upgrade from cluster version less than 4.1.0.0') +# else: # data_version_str = '' # data_version = 0 # # check compatible is same @@ -1857,22 +1860,26 @@ # data_version_str = results[0][0] # data_version = get_version(results[0][0]) # -# # check target_data_version/current_data_version -# sql = "select count(*) from oceanbase.__all_tenant" -# (desc, results) = query_cur.exec_query(sql) -# if len(results) != 1 or len(results[0]) != 1: -# fail_list.append('result cnt not match') +# if data_version < get_version("4.1.0.0"): +# # last barrier data version should be 4.1.0.0 +# fail_list.append('last barrier data version is 4.1.0.0. prohibit cluster upgrade from data version less than 4.1.0.0') # else: -# tenant_count = results[0][0] -# -# sql = "select count(*) from __all_virtual_core_table where column_name in ('target_data_version', 'current_data_version') and column_value = {0}".format(data_version) +# # check target_data_version/current_data_version +# sql = "select count(*) from oceanbase.__all_tenant" # (desc, results) = query_cur.exec_query(sql) # if len(results) != 1 or len(results[0]) != 1: # fail_list.append('result cnt not match') -# elif 2 * tenant_count != results[0][0]: -# fail_list.append('target_data_version/current_data_version not match with {0}, tenant_cnt:{1}, result_cnt:{2}'.format(data_version_str, tenant_count, results[0][0])) # else: -# logging.info("check data version success, all tenant's compatible/target_data_version/current_data_version is {0}".format(data_version_str)) +# tenant_count = results[0][0] +# +# sql = "select count(*) from __all_virtual_core_table where column_name in ('target_data_version', 'current_data_version') and column_value = {0}".format(data_version) +# (desc, results) = query_cur.exec_query(sql) +# if len(results) != 1 or len(results[0]) != 1: +# fail_list.append('result cnt not match') +# elif 2 * tenant_count != results[0][0]: +# fail_list.append('target_data_version/current_data_version not match with {0}, tenant_cnt:{1}, result_cnt:{2}'.format(data_version_str, tenant_count, results[0][0])) +# else: +# logging.info("check data version success, all tenant's compatible/target_data_version/current_data_version is {0}".format(data_version_str)) # ## 2. 检查paxos副本是否同步, paxos副本是否缺失 #def check_paxos_replica(query_cur): @@ -1905,38 +1912,25 @@ # ## 5. 检查是否有异常租户(creating,延迟删除,恢复中) #def check_tenant_status(query_cur): -# min_cluster_version = 0 -# sql = """select distinct value from GV$OB_PARAMETERS where name='min_observer_version'""" -# (desc, results) = query_cur.exec_query(sql) -# if len(results) != 1: -# fail_list.append('min_observer_version is not sync') -# elif len(results[0]) != 1: -# fail_list.append('column cnt not match') +# +# # check tenant schema +# (desc, results) = query_cur.exec_query("""select count(*) as count from DBA_OB_TENANTS where status != 'NORMAL'""") +# if len(results) != 1 or len(results[0]) != 1: +# fail_list.append('results len not match') +# elif 0 != results[0][0]: +# fail_list.append('has abnormal tenant, should stop') # else: -# min_cluster_version = get_version(results[0][0]) +# logging.info('check tenant status success') # -# # check tenant schema -# (desc, results) = query_cur.exec_query("""select count(*) as count from DBA_OB_TENANTS where status != 'NORMAL'""") -# if len(results) != 1 or len(results[0]) != 1: -# fail_list.append('results len not match') -# elif 0 != results[0][0]: -# fail_list.append('has abnormal tenant, should stop') -# else: -# logging.info('check tenant status success') -# -# # check tenant info -# # 1. don't support standby tenant upgrade from 4.0.0.0 -# # 2. don't support restore tenant upgrade -# sub_sql = '' -# if min_cluster_version >= get_version("4.1.0.0"): -# sub_sql = """ and tenant_role != 'STANDBY'""" -# (desc, results) = query_cur.exec_query("""select count(*) as count from oceanbase.__all_virtual_tenant_info where tenant_role != 'PRIMARY' {0}""".format(sub_sql)) -# if len(results) != 1 or len(results[0]) != 1: -# fail_list.append('results len not match') -# elif 0 != results[0][0]: -# fail_list.append('has abnormal tenant info, should stop') -# else: -# logging.info('check tenant info success') +# # check tenant info +# # don't support restore tenant upgrade +# (desc, results) = query_cur.exec_query("""select count(*) as count from oceanbase.__all_virtual_tenant_info where tenant_role != 'PRIMARY' and tenant_role != 'STANDBY'""") +# if len(results) != 1 or len(results[0]) != 1: +# fail_list.append('results len not match') +# elif 0 != results[0][0]: +# fail_list.append('has abnormal tenant info, should stop') +# else: +# logging.info('check tenant info success') # ## 6. 检查无恢复任务 #def check_restore_job_exist(query_cur): diff --git a/tools/upgrade/upgrade_pre.py b/tools/upgrade/upgrade_pre.py index aec657854..7a925f4f9 100755 --- a/tools/upgrade/upgrade_pre.py +++ b/tools/upgrade/upgrade_pre.py @@ -26,8 +26,8 @@ # self.action_sql = action_sql # self.rollback_sql = rollback_sql # -#current_cluster_version = "4.1.0.0" -#current_data_version = "4.1.0.0" +#current_cluster_version = "4.2.0.0" +#current_data_version = "4.2.0.0" #g_succ_sql_list = [] #g_commit_sql_list = [] # @@ -1843,7 +1843,10 @@ # min_cluster_version = get_version(results[0][0]) # # # check data version -# if min_cluster_version >= get_version("4.1.0.0"): +# if min_cluster_version < get_version("4.1.0.0"): +# # last barrier cluster version should be 4.1.0.0 +# fail_list.append('last barrier cluster version is 4.1.0.0. prohibit cluster upgrade from cluster version less than 4.1.0.0') +# else: # data_version_str = '' # data_version = 0 # # check compatible is same @@ -1857,22 +1860,26 @@ # data_version_str = results[0][0] # data_version = get_version(results[0][0]) # -# # check target_data_version/current_data_version -# sql = "select count(*) from oceanbase.__all_tenant" -# (desc, results) = query_cur.exec_query(sql) -# if len(results) != 1 or len(results[0]) != 1: -# fail_list.append('result cnt not match') +# if data_version < get_version("4.1.0.0"): +# # last barrier data version should be 4.1.0.0 +# fail_list.append('last barrier data version is 4.1.0.0. prohibit cluster upgrade from data version less than 4.1.0.0') # else: -# tenant_count = results[0][0] -# -# sql = "select count(*) from __all_virtual_core_table where column_name in ('target_data_version', 'current_data_version') and column_value = {0}".format(data_version) +# # check target_data_version/current_data_version +# sql = "select count(*) from oceanbase.__all_tenant" # (desc, results) = query_cur.exec_query(sql) # if len(results) != 1 or len(results[0]) != 1: # fail_list.append('result cnt not match') -# elif 2 * tenant_count != results[0][0]: -# fail_list.append('target_data_version/current_data_version not match with {0}, tenant_cnt:{1}, result_cnt:{2}'.format(data_version_str, tenant_count, results[0][0])) # else: -# logging.info("check data version success, all tenant's compatible/target_data_version/current_data_version is {0}".format(data_version_str)) +# tenant_count = results[0][0] +# +# sql = "select count(*) from __all_virtual_core_table where column_name in ('target_data_version', 'current_data_version') and column_value = {0}".format(data_version) +# (desc, results) = query_cur.exec_query(sql) +# if len(results) != 1 or len(results[0]) != 1: +# fail_list.append('result cnt not match') +# elif 2 * tenant_count != results[0][0]: +# fail_list.append('target_data_version/current_data_version not match with {0}, tenant_cnt:{1}, result_cnt:{2}'.format(data_version_str, tenant_count, results[0][0])) +# else: +# logging.info("check data version success, all tenant's compatible/target_data_version/current_data_version is {0}".format(data_version_str)) # ## 2. 检查paxos副本是否同步, paxos副本是否缺失 #def check_paxos_replica(query_cur): @@ -1905,38 +1912,25 @@ # ## 5. 检查是否有异常租户(creating,延迟删除,恢复中) #def check_tenant_status(query_cur): -# min_cluster_version = 0 -# sql = """select distinct value from GV$OB_PARAMETERS where name='min_observer_version'""" -# (desc, results) = query_cur.exec_query(sql) -# if len(results) != 1: -# fail_list.append('min_observer_version is not sync') -# elif len(results[0]) != 1: -# fail_list.append('column cnt not match') +# +# # check tenant schema +# (desc, results) = query_cur.exec_query("""select count(*) as count from DBA_OB_TENANTS where status != 'NORMAL'""") +# if len(results) != 1 or len(results[0]) != 1: +# fail_list.append('results len not match') +# elif 0 != results[0][0]: +# fail_list.append('has abnormal tenant, should stop') # else: -# min_cluster_version = get_version(results[0][0]) +# logging.info('check tenant status success') # -# # check tenant schema -# (desc, results) = query_cur.exec_query("""select count(*) as count from DBA_OB_TENANTS where status != 'NORMAL'""") -# if len(results) != 1 or len(results[0]) != 1: -# fail_list.append('results len not match') -# elif 0 != results[0][0]: -# fail_list.append('has abnormal tenant, should stop') -# else: -# logging.info('check tenant status success') -# -# # check tenant info -# # 1. don't support standby tenant upgrade from 4.0.0.0 -# # 2. don't support restore tenant upgrade -# sub_sql = '' -# if min_cluster_version >= get_version("4.1.0.0"): -# sub_sql = """ and tenant_role != 'STANDBY'""" -# (desc, results) = query_cur.exec_query("""select count(*) as count from oceanbase.__all_virtual_tenant_info where tenant_role != 'PRIMARY' {0}""".format(sub_sql)) -# if len(results) != 1 or len(results[0]) != 1: -# fail_list.append('results len not match') -# elif 0 != results[0][0]: -# fail_list.append('has abnormal tenant info, should stop') -# else: -# logging.info('check tenant info success') +# # check tenant info +# # don't support restore tenant upgrade +# (desc, results) = query_cur.exec_query("""select count(*) as count from oceanbase.__all_virtual_tenant_info where tenant_role != 'PRIMARY' and tenant_role != 'STANDBY'""") +# if len(results) != 1 or len(results[0]) != 1: +# fail_list.append('results len not match') +# elif 0 != results[0][0]: +# fail_list.append('has abnormal tenant info, should stop') +# else: +# logging.info('check tenant info success') # ## 6. 检查无恢复任务 #def check_restore_job_exist(query_cur):