Skip to content

Commit

Permalink
Updated PXC startup dependancy
Browse files Browse the repository at this point in the history
  • Loading branch information
rameshvs02 committed Oct 9, 2019
1 parent ead80e9 commit 5684811
Show file tree
Hide file tree
Showing 13 changed files with 110 additions and 42 deletions.
12 changes: 12 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions config.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[config]
workdir = /dev/shm/qa
basedir = /dev/shm/qa/Percona-XtraDB-Cluster-5.7.25-rel28-31.35.1.Linux.x86_64.ssl100
server=pxc
node = 3
user = root
node1_socket = /tmp/node1.sock
Expand Down
1 change: 1 addition & 0 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

WORKDIR = config['config']['workdir']
BASEDIR = config['config']['basedir']
SERVER = config['config']['server']
NODE = config['config']['node']
USER = config['config']['user']
NODE1_SOCKET = config['config']['node1_socket']
Expand Down
24 changes: 8 additions & 16 deletions pxc_qa_framework.py → qa_framework.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
#!/usr/bin/env python3.7
#!/usr/bin/env python3
# Created by Ramesh Sivaraman, Percona LLC.
# PXC QA framework will help us to test Percona XtraDB Cluster.
# QA framework will help us to test Percona Server and Percona XtraDB Cluster.

import configparser
import os
import argparse


def main():
""" This function will help us to run PXC QA scripts.
""" This function will help us to run PS/PXC QA scripts.
We can initiate complete test suite or individual
testcase using this function.
"""
scriptdir = os.path.dirname(os.path.realpath(__file__))
parser = argparse.ArgumentParser(prog='PXC QA Framework', usage='%(prog)s [options]')
parser = argparse.ArgumentParser(prog='QA Framework', usage='%(prog)s [options]')
parser.add_argument('-t', '--testname', help='Specify test file location')
parser.add_argument('-p', '--product', default='pxc', choices=['pxc', 'ps'],
help='Specify product(PXC/PS) name to test')
parser.add_argument('-s', '--suite', default='',
choices=['sysbench_loadtest', 'replication', 'correctness', 'ssl', 'upgrade',
'random_qa', 'galera_sr'],
Expand All @@ -29,24 +30,15 @@ def main():
encryption = ''
test_name = args.testname
suite = args.suite
config = configparser.ConfigParser()
config.read('config.ini')

if suite:
if not os.path.exists(scriptdir + '/suite/replication'):
if not os.path.exists(scriptdir + '/suite/' + suite):
print('Suite ' + suite + '(' + scriptdir + '/suite/' + suite + ') does not exist')
exit(1)
print("Running " + suite + " QA framework")
for file in os.listdir(scriptdir + '/suite/' + suite):
print("Running " + suite + " QA framework")
if file.endswith(".py"):
os.system(scriptdir + '/suite/' + suite + '/' + file + ' ' + encryption)
else:
print("Starting PXC QA framework")
for subdir, dirs, files in os.walk(scriptdir + '/suite'):
for file in files:
if file.endswith(".py"):
print("Initiating testsuite: " + os.path.join(subdir, file))
os.system(os.path.join(subdir, file + ' ' + encryption))

if test_name is not None:
if not os.path.isfile(test_name):
Expand Down
28 changes: 18 additions & 10 deletions suite/sysbench_loadtest/sysbench_customized_dataload.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,17 @@
parent_dir = os.path.normpath(os.path.join(cwd, '../../'))
sys.path.insert(0, parent_dir)
from config import *
from util import pxc_startup
from util import db_connection
from util import sysbench_run
from util import utility
from util import table_checksum
utility_cmd = utility.Utility()
utility_cmd.check_python_version()

# Read argument
parser = argparse.ArgumentParser(prog='PXC replication test', usage='%(prog)s [options]')
parser = argparse.ArgumentParser(prog='PXC sysbench customized dataload test', usage='%(prog)s [options]')
parser.add_argument('-e', '--encryption-run', action='store_true',
help='This option will enable encryption options')

args = parser.parse_args()
if args.encryption_run is True:
encryption = 'YES'
Expand All @@ -26,19 +25,24 @@


class SysbenchLoadTest:
def start_pxc(self):
my_extra = ""
utility_cmd.start_pxc(parent_dir, WORKDIR, BASEDIR, NODE, NODE1_SOCKET, USER, encryption, my_extra)
def start_server(self, node):
if SERVER == "pxc":
my_extra = "--innodb_buffer_pool_size=8G --innodb_log_file_size=1G"
utility_cmd.start_pxc(parent_dir, WORKDIR, BASEDIR, node, NODE1_SOCKET, USER, encryption, my_extra)
elif SERVER == "ps":
my_extra = "--innodb_buffer_pool_size=8G --innodb_log_file_size=1G"
utility_cmd.start_ps(parent_dir, WORKDIR, BASEDIR, node, PS1_SOCKET, USER, encryption, my_extra)
print('test.....')

def sysbench_run(self, node1_socket, db):
def sysbench_run(self, socket, db):
# Sysbench load test
threads = [32, 64, 128]
version = utility_cmd.version_check(BASEDIR)
if int(version) < int("080000"):
checksum = table_checksum.TableChecksum(PT_BASEDIR, BASEDIR, WORKDIR, NODE, NODE1_SOCKET)
checksum.sanity_check()
sysbench = sysbench_run.SysbenchRun(BASEDIR, WORKDIR,
node1_socket)
socket)
result = sysbench.sanity_check(db)
utility_cmd.check_testcase(result, "Sysbench run sanity check")
result = sysbench.sysbench_custom_table(db, SYSBENCH_TABLE_COUNT, SYSBENCH_THREADS,
Expand All @@ -50,5 +54,9 @@ def sysbench_run(self, node1_socket, db):
print("\nPXC sysbench customized data load test")
print("----------------------------------------")
sysbench_loadtest = SysbenchLoadTest()
sysbench_loadtest.start_pxc()
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
if SERVER == "pxc":
sysbench_loadtest.start_server(NODE)
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
elif SERVER == "ps":
sysbench_loadtest.start_server(1)
sysbench_loadtest.sysbench_run(PS1_SOCKET, 'test')
18 changes: 13 additions & 5 deletions suite/sysbench_loadtest/sysbench_load_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@


class SysbenchLoadTest:
def start_pxc(self):
my_extra = "--innodb_buffer_pool_size=8G --innodb_log_file_size=1G"
utility_cmd.start_pxc(parent_dir, WORKDIR, BASEDIR, NODE, NODE1_SOCKET, USER, encryption, my_extra)
def start_server(self, node):
if SERVER == "pxc":
my_extra = "--innodb_buffer_pool_size=8G --innodb_log_file_size=1G"
utility_cmd.start_pxc(parent_dir, WORKDIR, BASEDIR, node, NODE1_SOCKET, USER, encryption, my_extra)
elif SERVER == "ps":
my_extra = "--innodb_buffer_pool_size=8G --innodb_log_file_size=1G"
utility_cmd.start_ps(parent_dir, WORKDIR, BASEDIR, node, PS1_SOCKET, USER, encryption, my_extra)

def sysbench_run(self, socket, db):
# Sysbench load test
Expand Down Expand Up @@ -59,5 +63,9 @@ def sysbench_run(self, socket, db):
print("\nPXC sysbench load test")
print("------------------------")
sysbench_loadtest = SysbenchLoadTest()
sysbench_loadtest.start_pxc()
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
if SERVER == "pxc":
sysbench_loadtest.start_server(NODE)
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
elif SERVER == "ps":
sysbench_loadtest.start_server(1)
sysbench_loadtest.sysbench_run(PS1_SOCKET, 'test')
2 changes: 1 addition & 1 deletion suite/sysbench_loadtest/sysbench_oltp_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,5 @@ def sysbench_run(self, socket, db):
print("\nPXC sysbench oltp test")
print("------------------------")
sysbench_loadtest = SysbenchOLTPTest()
sysbench_loadtest.start_pxc()
#sysbench_loadtest.start_pxc()
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
2 changes: 1 addition & 1 deletion suite/sysbench_loadtest/sysbench_random_load.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,5 @@ def sysbench_run(self, socket, db):
print("\nPXC sysbench random load test")
print("-------------------------------")
sysbench_loadtest = SysbenchLoadTest()
sysbench_loadtest.start_pxc()
#sysbench_loadtest.start_pxc()
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
2 changes: 1 addition & 1 deletion suite/sysbench_loadtest/sysbench_read_qa.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,5 @@ def sysbench_run(self, socket, db):
print("\nPXC sysbench read only test")
print("-----------------------------")
sysbench_loadtest = SysbenchReadOnlyTest()
sysbench_loadtest.start_pxc()
#sysbench_loadtest.start_pxc()
sysbench_loadtest.sysbench_run(NODE1_SOCKET, 'test')
7 changes: 3 additions & 4 deletions util/ps_startup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
import random
import shutil
import time
from util import utility
utility_cmd = utility.Utility()
from util import sanity


class StartPerconaServer:
Expand All @@ -25,7 +24,7 @@ def sanity_check(self):
the availability of mysqld binary file.
"""
# kill existing mysqld process
os.system("ps -ef | grep '" + self.workdir + "/conf/ps[0-9].cnf"
os.system("ps -ef | grep '" + self.workdir + "/conf/ps[0-9].cnf'"
" | grep -v grep | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1")
if not os.path.exists(self.workdir + '/log'):
os.mkdir(self.workdir + '/log')
Expand Down Expand Up @@ -55,7 +54,7 @@ def create_config(self, conf_extra=None):
For customised configuration please add your values
in conf/custom.conf.
"""
version = utility_cmd.version_check(self.basedir)
version = sanity.version_check(self.basedir)
port = random.randint(21, 30) * 1000
port_list = []
for j in range(1, self.node + 1):
Expand Down
7 changes: 3 additions & 4 deletions util/pxc_startup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
import random
import shutil
import time
from util import utility
utility_cmd = utility.Utility()
from util import sanity


class StartCluster:
Expand Down Expand Up @@ -67,7 +66,7 @@ def create_config(self, wsrep_extra):
add wsrep_sst_auth variable. This variable does not
required starting from PXC-8.x
"""
version = utility_cmd.version_check(self.basedir)
version = sanity.version_check(self.basedir)
if int(version) < int("080000"):
cnf_name.write('wsrep_sst_auth=root:\n')
if int(version) > int("050700"):
Expand Down Expand Up @@ -125,7 +124,7 @@ def initialize_cluster(self):
if not os.path.isfile(self.workdir + '/conf/node' + str(i) + '.cnf'):
print('Could not find config file /conf/node' + str(i) + '.cnf')
exit(1)
version = utility_cmd.version_check(self.basedir)
version = sanity.version_check(self.basedir)
if int(version) < int("050700"):
os.mkdir(self.workdir + '/node' + str(i))
initialize_node = self.basedir + '/scripts/mysql_install_db --no-defaults ' \
Expand Down
25 changes: 25 additions & 0 deletions util/sanity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env python3
import os
import sys
from datetime import datetime


def check_python_version():
""" Check python version. Raise error if the
version is 3.7 or greater
"""
if sys.version_info < (3, 7):
print("\nError! You should use python 3.7 or greater\n")
exit(1)


def version_check(basedir):
# Get database version number
version_info = os.popen(basedir + "/bin/mysqld --version 2>&1 "
"| grep -oe '[0-9]\.[0-9][\.0-9]*' | head -n1").read()
version = "{:02d}{:02d}{:02d}".format(int(version_info.split('.')[0]),
int(version_info.split('.')[1]),
int(version_info.split('.')[2]))
return version


23 changes: 23 additions & 0 deletions util/utility.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from distutils.spawn import find_executable
from util import db_connection
from util import pxc_startup
from util import ps_startup


class Utility:
Expand Down Expand Up @@ -319,3 +320,25 @@ def start_pxc(self, parent_dir, workdir, basedir, node, socket, user, encryption
self.check_testcase(result, "Cluster startup")
result = dbconnection_check.connection_check()
self.check_testcase(result, "Database connection")

def start_ps(self, parent_dir, workdir, basedir, node, socket, user, encryption, my_extra):
""" Start Percona Server. This method will
perform sanity checks for PS startup
"""
# Start PXC cluster for replication test
dbconnection_check = db_connection.DbConnection(user, socket)
server_startup = ps_startup.StartPerconaServer(parent_dir, workdir, basedir, int(node))
result = server_startup.sanity_check()
self.check_testcase(result, "PS: Startup sanity check")
if encryption == 'YES':
result = server_startup.create_config('encryption')
self.check_testcase(result, "PS: Configuration file creation")
else:
result = server_startup.create_config()
self.check_testcase(result, "PS: Configuration file creation")
result = server_startup.initialize_cluster()
self.check_testcase(result, "PS: Initializing cluster")
result = server_startup.start_server('--max-connections=1500 ' + my_extra)
self.check_testcase(result, "PS: Cluster startup")
result = dbconnection_check.connection_check()
self.check_testcase(result, "PS: Database connection")

0 comments on commit 5684811

Please sign in to comment.