[skip ci]Add average time statistic (#12916)

Signed-off-by: zhuwenxing <wenxing.zhu@zilliz.com>
pull/12924/head
zhuwenxing 2021-12-07 21:45:26 +08:00 committed by GitHub
parent 39557f1e4d
commit be273fb717
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 33 additions and 11 deletions

View File

@ -1,6 +1,6 @@
from enum import Enum
from random import randint
import datetime
import time
from time import sleep
from delayed_assert import expect
from base.collection_wrapper import ApiCollectionWrapper
@ -36,6 +36,7 @@ class Checker:
def __init__(self):
self._succ = 0
self._fail = 0
self.average_time = 0
self.c_wrap = ApiCollectionWrapper()
self.c_wrap.init_collection(name=cf.gen_unique_str('Checker_'),
schema=cf.gen_default_collection_schema(),
@ -55,6 +56,7 @@ class Checker:
def reset(self):
self._succ = 0
self._fail = 0
self.average_time = 0
class SearchChecker(Checker):
@ -66,6 +68,7 @@ class SearchChecker(Checker):
def keep_running(self):
while True:
search_vec = cf.gen_vectors(5, ct.default_dim)
t0 = time.time()
_, result = self.c_wrap.search(
data=search_vec,
anns_field=ct.default_float_vec_field_name,
@ -74,13 +77,15 @@ class SearchChecker(Checker):
enable_traceback=enable_traceback,
check_task=CheckTasks.check_nothing
)
t1 = time.time()
if result:
self.average_time = ((t1 - t0) + self.average_time * self._succ) / (self._succ + 1)
self._succ += 1
log.info(f"search success, time: {t1 - t0}, average_time: {self.average_time}")
else:
self._fail += 1
sleep(constants.WAIT_PER_OP / 10)
class InsertFlushChecker(Checker):
"""check Insert and flush operations in a dependent thread"""
def __init__(self, flush=False):
@ -90,30 +95,34 @@ class InsertFlushChecker(Checker):
def keep_running(self):
while True:
t0 = time.time()
_, insert_result = \
self.c_wrap.insert(data=cf.gen_default_list_data(nb=constants.DELTA_PER_INS),
timeout=timeout,
enable_traceback=enable_traceback,
check_task=CheckTasks.check_nothing)
t1 = time.time()
if not self._flush:
if insert_result:
self.average_time = ((t1 - t0) + self.average_time * self._succ) / (self._succ + 1)
self._succ += 1
log.info(f"insert success, time: {t1 - t0}, average_time: {self.average_time}")
else:
self._fail += 1
sleep(constants.WAIT_PER_OP / 10)
else:
# call flush in property num_entities
t0 = datetime.datetime.now()
t0 = time.time()
num_entities = self.c_wrap.num_entities
tt = datetime.datetime.now() - t0
log.info(f"flush time cost: {tt}")
t1 = time.time()
if num_entities == (self.initial_entities + constants.DELTA_PER_INS):
self.average_time = ((t1 - t0) + self.average_time * self._succ) / (self._succ + 1)
self._succ += 1
log.info(f"flush success, time: {t1 - t0}, average_time: {self.average_time}")
self.initial_entities += constants.DELTA_PER_INS
else:
self._fail += 1
class CreateChecker(Checker):
"""check create operations in a dependent thread"""
def __init__(self):
@ -121,20 +130,25 @@ class CreateChecker(Checker):
def keep_running(self):
while True:
t0 = time.time()
_, result = self.c_wrap.init_collection(
name=cf.gen_unique_str("CreateChecker_"),
schema=cf.gen_default_collection_schema(),
timeout=timeout,
enable_traceback=enable_traceback,
check_task=CheckTasks.check_nothing)
t1 = time.time()
if result:
self.average_time = ((t1 - t0) + self.average_time * self._succ) / (self._succ + 1)
self._succ += 1
self.c_wrap.drop(timeout=timeout, enable_traceback=enable_traceback)
log.info(f"create success, time: {t1 - t0}, average_time: {self.average_time}")
self.c_wrap.drop(timeout=timeout)
else:
self._fail += 1
log.info(f"create failed, time: {t1 - t0}")
sleep(constants.WAIT_PER_OP / 10)
class IndexChecker(Checker):
"""check Insert operations in a dependent thread"""
def __init__(self):
@ -145,18 +159,23 @@ class IndexChecker(Checker):
def keep_running(self):
while True:
t0 = time.time()
_, result = self.c_wrap.create_index(ct.default_float_vec_field_name,
constants.DEFAULT_INDEX_PARAM,
name=cf.gen_unique_str('index_'),
timeout=timeout,
enable_traceback=enable_traceback,
check_task=CheckTasks.check_nothing)
t1 = time.time()
if result:
self.average_time = ((t1 - t0) + self.average_time * self._succ) / (self._succ + 1)
self._succ += 1
self.c_wrap.drop_index(timeout=timeout, enable_traceback=enable_traceback)
log.info(f"index success, time: {t1 - t0}, average_time: {self.average_time}")
self.c_wrap.drop_index(timeout=timeout)
else:
self._fail += 1
log.info(f"index failed, time: {t1 - t0}")
class QueryChecker(Checker):
"""check query operations in a dependent thread"""
@ -170,16 +189,19 @@ class QueryChecker(Checker):
for _ in range(5):
int_values.append(randint(0, constants.ENTITIES_FOR_SEARCH))
term_expr = f'{ct.default_int64_field_name} in {int_values}'
t0 = time.time()
_, result = self.c_wrap.query(term_expr, timeout=timeout,
enable_traceback=enable_traceback,
check_task=CheckTasks.check_nothing)
t1 = time.time()
if result:
self.average_time = ((t1 - t0) + self.average_time * self._succ) / (self._succ + 1)
self._succ += 1
log.info(f"query success, time: {t1 - t0}, average_time: {self.average_time}")
else:
self._fail += 1
sleep(constants.WAIT_PER_OP / 10)
def assert_statistic(checkers, expectations={}):
for k in checkers.keys():
# expect succ if no expectations