You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
import xml.etree.ElementTree as ET
 | 
						|
import configparser
 | 
						|
 | 
						|
XML_CONFIG_PATH = '/etc/columnstore/Columnstore.xml'
 | 
						|
SM_CONFIG_PATH = '/etc/columnstore/storagemanager.cnf'
 | 
						|
REST_REQUEST_TO = 2
 | 
						|
 | 
						|
 | 
						|
def get_version():
 | 
						|
    return '0.4.0'
 | 
						|
 | 
						|
 | 
						|
def get_port():
 | 
						|
    return '8640'
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    master_addr = ''
 | 
						|
    pm_count = 0
 | 
						|
    try:
 | 
						|
        cs_config = ET.parse(XML_CONFIG_PATH)
 | 
						|
        config_root = cs_config.getroot()
 | 
						|
        master_addr = config_root.find('./DBRM_Controller/IPAddr').text
 | 
						|
        pm_count = int(config_root.find('./SystemModuleConfig/ModuleCount3').text)
 | 
						|
    except (FileNotFoundError, AttributeError, ValueError) as e:
 | 
						|
        print("Exception had been raised. Continue anyway")
 | 
						|
        print(str(e))
 | 
						|
 | 
						|
    storage = 'LocalStorage'
 | 
						|
    sm_config = configparser.ConfigParser()
 | 
						|
    files_read = len(sm_config.read(SM_CONFIG_PATH))
 | 
						|
    if files_read == 1:
 | 
						|
        storage = sm_config.get('ObjectStorage', 'service')
 | 
						|
 | 
						|
    default_addr = '127.0.0.1'
 | 
						|
    savebrm = 'save_brm'
 | 
						|
    is_primary = False
 | 
						|
 | 
						|
    # For multi-node with local storage or default installations
 | 
						|
    if (storage.lower() != 's3' and master_addr != default_addr) or \
 | 
						|
master_addr == default_addr:
 | 
						|
        is_primary = True
 | 
						|
        print('Multi-node with local-storage detected.')
 | 
						|
    else:
 | 
						|
        has_requests = False
 | 
						|
        try:
 | 
						|
            import requests
 | 
						|
            requests.packages.urllib3.disable_warnings()
 | 
						|
            has_requests = True
 | 
						|
        except ImportError as e:
 | 
						|
            print('requests Python module does not exist. \
 | 
						|
    Please install CMAPI first.')
 | 
						|
        if has_requests is True:
 | 
						|
            try:
 | 
						|
                print('Requesting for the primary node status.')
 | 
						|
                api_version = get_version()
 | 
						|
                api_port = get_port()
 | 
						|
                url = "https://{}:{}/cmapi/{}/node/primary".format(default_addr, \
 | 
						|
    api_port, api_version)
 | 
						|
                resp = requests.get(url,
 | 
						|
                                 verify=False,
 | 
						|
                                 timeout=REST_REQUEST_TO)
 | 
						|
                if (resp.status_code != 200):
 | 
						|
                    print("Error sending GET /node/primary.")
 | 
						|
                else:
 | 
						|
                    is_primary = resp.json()['is_primary'] == 'True'
 | 
						|
            except:
 | 
						|
                print('Failed to request.')
 | 
						|
                print(str(e))
 | 
						|
 | 
						|
    if is_primary is True:
 | 
						|
        try:
 | 
						|
            retcode = subprocess.call(savebrm, shell=True)
 | 
						|
            if retcode < 0:
 | 
						|
                print('{} exits with {}.'.format(savebrm, retcode))
 | 
						|
                sys.exit(0)
 | 
						|
        except OSError as e:
 | 
						|
                print(str(e))
 | 
						|
                sys.exit(0)
 | 
						|
 | 
						|
    sys.exit(0)
 |