Files
oceanbase/tools/upgrade/special_upgrade_action_pre.py

73 lines
3.0 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from my_error import MyError
import time
import mysql.connector
from mysql.connector import errorcode
import logging
import re
import string
from random import Random
from actions import DMLCursor
from actions import QueryCursor
import binascii
import my_utils
import actions
import sys
import upgrade_health_checker
# 主库需要执行的升级动作
def do_special_upgrade(conn, cur, timeout, user, passwd):
# special upgrade action
#升级语句对应的action要写在下面的actions begin和actions end这两行之间,
#因为基准版本更新的时候会调用reset_upgrade_scripts.py来清空actions begin和actions end
#这两行之间的这些代码,如果不写在这两行之间的话会导致清空不掉相应的代码。
current_version = actions.fetch_observer_version(cur)
target_version = actions.get_current_cluster_version()
# when upgrade across version, disable enable_ddl/major_freeze/direct_load
if current_version != target_version:
actions.set_parameter(cur, 'enable_ddl', 'False', timeout)
actions.set_parameter(cur, 'enable_major_freeze', 'False', timeout)
actions.set_tenant_parameter(cur, '_enable_adaptive_compaction', 'False', timeout)
actions.set_parameter(cur, '_ob_enable_direct_load', 'False', timeout)
# wait scheduler in storage to notice adaptive_compaction is switched to false
time.sleep(60 * 2)
query_cur = actions.QueryCursor(cur)
wait_major_timeout = 600
upgrade_health_checker.check_major_merge(query_cur, wait_major_timeout)
actions.do_suspend_merge(cur, timeout)
# When upgrading from a version prior to 4.2 to version 4.2, the bloom_filter should be disabled.
# The param _bloom_filter_enabled is no longer in use as of version 4.2, there is no need to enable it again.
if actions.get_version(current_version) < actions.get_version('4.2.0.0')\
and actions.get_version(target_version) >= actions.get_version('4.2.0.0'):
actions.set_tenant_parameter(cur, '_bloom_filter_enabled', 'False', timeout)
# Disable enable_rebalance of sys tenant to avoid automatic unit migration
# regardless of the same version upgrade or cross-version upgrade.
# enable_rebalance is changed from cluster level to tenant level since 4.2.
if actions.get_version(current_version) < actions.get_version('4.2.0.0'):
actions.set_parameter(cur, 'enable_rebalance', 'False', timeout)
else:
only_sys_tenant = True
actions.set_tenant_parameter(cur, 'enable_rebalance', 'False', timeout, only_sys_tenant)
####========******####======== actions begin ========####******========####
return
####========******####========= actions end =========####******========####
def query(cur, sql):
log(sql)
cur.execute(sql)
results = cur.fetchall()
return results
def log(msg):
logging.info(msg)
def get_oracle_tenant_ids(cur):
return [_[0] for _ in query(cur, 'select tenant_id from oceanbase.__all_tenant where compatibility_mode = 1')]
def get_tenant_ids(cur):
return [_[0] for _ in query(cur, 'select tenant_id from oceanbase.__all_tenant')]