mysql-test/include/raft_config.py (55 lines of code) (raw):

#!/usr/local/bin/python3 import os import sys import json import socket import re def execute_sql(server_id, query): socket = f'{socket_path}/mysqld.{server_id}.sock' stream = os.popen( f'mysql --no-defaults -S {socket} -u root -D test -sNe "{query}"' ) return stream.read().strip() num_servers = int(sys.argv[1]) socket_path = sys.argv[2] hostname = socket.gethostname() hostname = hostname.replace('.facebook.com', '') dc = hostname.split(".")[1] region = re.sub('[0-9]+$', '', dc) ip = "0000:0000:0000:0000:0000:0000:0000:0001" config={} for i in range(1, num_servers + 1): uuid = execute_sql(i, "select @@global.server_uuid") server_id = int(execute_sql(i, "select @@global.server_id")) port = execute_sql(i, "select @@global.port") config["bootstrap"] = True config["commit_rule"] = {"mode": 2} config["replicaset_name"] = "mysql.replicaset.0" server_config = {} server_config["region"] = region server_config["hostname"] = hostname server_config["ip_port"] = f"[{ip}]:{port}" server_config["uuid"] = uuid server_config["backed_by_database"] = True server_config["voter_type"] = 0 server_config["server_id"] = server_id config["server_config"] = server_config server_props = [] for j in range(1, num_servers + 1): uuid = execute_sql(j, "select @@global.server_uuid") server_id = int(execute_sql(j, "select @@global.server_id")) port = execute_sql(j, "select @@global.port") server_prop = {} server_prop["region"] = region server_prop["hostname"] = hostname server_prop["ip_port"] = f"[{ip}]:{port}" server_prop["uuid"] = uuid server_prop["server_id"] = server_id server_prop["backed_by_database"] = True server_prop["voter_type"] = 0 server_props.append(server_prop) config["raft_topology"] = {"raft_server_properties": server_props} config["voter_distribution"] = {region: num_servers} config["enable_flexiraft"] = False config_str = json.dumps(config) config_str = config_str.replace('"', r'\"') execute_sql(i, f"set @@global.rpl_raft_topology_config_json='{config_str}'")