72 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			72 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
 | |
|   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)
 | |
|     # 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')]
 | |
| 
 | 
