milvus/tests/milvus_benchmark/main.py
del-zhenwu 7cad494101 Enhance testing framework based on kubernetes (#935)
* Update framework

* remove files

* Remove files

* Remove ann-acc cases && Update java-sdk cases
2020-01-07 16:20:37 +08:00

162 lines
5.1 KiB
Python

import os
import sys
import time
import pdb
import argparse
import logging
import traceback
from logging import handlers
from yaml import full_load, dump
from parser import operations_parser
from local_runner import LocalRunner
from docker_runner import DockerRunner
from k8s_runner import K8sRunner
DEFAULT_IMAGE = "milvusdb/milvus:latest"
LOG_FOLDER = "logs"
# formatter = logging.Formatter('[%(asctime)s] [%(levelname)-4s] [%(pathname)s:%(lineno)d] %(message)s')
# if not os.path.exists(LOG_FOLDER):
# os.system('mkdir -p %s' % LOG_FOLDER)
# fileTimeHandler = handlers.TimedRotatingFileHandler(os.path.join(LOG_FOLDER, 'milvus_benchmark'), "D", 1, 10)
# fileTimeHandler.suffix = "%Y%m%d.log"
# fileTimeHandler.setFormatter(formatter)
# logging.basicConfig(level=logging.DEBUG)
# fileTimeHandler.setFormatter(formatter)
# logger.addHandler(fileTimeHandler)
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S',
level=logging.DEBUG)
logger = logging.getLogger("milvus_benchmark")
def positive_int(s):
i = None
try:
i = int(s)
except ValueError:
pass
if not i or i < 1:
raise argparse.ArgumentTypeError("%r is not a positive integer" % s)
return i
# # link random_data if not exists
# def init_env():
# if not os.path.islink(BINARY_DATA_FOLDER):
# try:
# os.symlink(SRC_BINARY_DATA_FOLDER, BINARY_DATA_FOLDER)
# except Exception as e:
# logger.error("Create link failed: %s" % str(e))
# sys.exit()
def main():
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument(
"--hostname",
default="eros",
help="server host name")
parser.add_argument(
"--image-tag",
default="",
help="image tag")
parser.add_argument(
"--image-type",
default="",
help="image type")
# parser.add_argument(
# "--run-count",
# default=1,
# type=positive_int,
# help="run times for each test")
# # performance / stability / accuracy test
# parser.add_argument(
# "--run-type",
# default="search_performance",
# help="run type, default performance")
parser.add_argument(
'--suite',
metavar='FILE',
help='load test suite from FILE',
default='suites/suite.yaml')
parser.add_argument(
'--local',
action='store_true',
help='use local milvus server')
parser.add_argument(
'--host',
help='server host ip param for local mode',
default='127.0.0.1')
parser.add_argument(
'--port',
help='server port param for local mode',
default='19530')
args = parser.parse_args()
# Get all benchmark test suites
if args.suite:
with open(args.suite) as f:
suite_dict = full_load(f)
f.close()
# With definition order
run_type, run_params = operations_parser(suite_dict)
# init_env()
# run_params = {"run_count": args.run_count}
if args.image_tag:
namespace = "milvus"
logger.debug(args)
# for docker mode
if args.local:
logger.error("Local mode and docker mode are incompatible")
sys.exit(-1)
# Docker pull image
# if not utils.pull_image(args.image):
# raise Exception('Image %s pull failed' % image)
# TODO: Check milvus server port is available
# logger.info("Init: remove all containers created with image: %s" % args.image)
# utils.remove_all_containers(args.image)
# runner = DockerRunner(args)
tables = run_params["tables"]
for table in tables:
# run tests
server_config = table["server"]
logger.debug(server_config)
runner = K8sRunner()
if runner.init_env(server_config, args):
logger.debug("Start run tests")
try:
runner.run(run_type, table)
except Exception as e:
logger.error(str(e))
logger.error(traceback.format_exc())
finally:
runner.clean_up()
else:
logger.error("Runner init failed")
# for operation_type in operations:
# logger.info("Start run test, test type: %s" % operation_type)
# run_params["params"] = operations[operation_type]
# runner.run({operation_type: run_params}, run_type=args.run_type)
# logger.info("Run params: %s" % str(run_params))
if args.local:
# for local mode
host = args.host
port = args.port
runner = LocalRunner(host, port)
for operation_type in operations:
logger.info("Start run local mode test, test type: %s" % operation_type)
run_params["params"] = operations[operation_type]
runner.run({operation_type: run_params}, run_type=args.run_type)
logger.info("Run params: %s" % str(run_params))
if __name__ == "__main__":
main()