1# Copyright (c) 2011-present, Facebook, Inc. All rights reserved. 2# This source code is licensed under both the GPLv2 (found in the 3# COPYING file in the root directory) and Apache 2.0 License 4# (found in the LICENSE.Apache file in the root directory). 5 6from abc import ABC, abstractmethod 7import re 8 9 10class BenchmarkRunner(ABC): 11 @staticmethod 12 @abstractmethod 13 def is_metric_better(new_metric, old_metric): 14 pass 15 16 @abstractmethod 17 def run_experiment(self): 18 # should return a list of DataSource objects 19 pass 20 21 @staticmethod 22 def get_info_log_file_name(log_dir, db_path): 23 # Example: DB Path = /dev/shm and OPTIONS file has option 24 # db_log_dir=/tmp/rocks/, then the name of the log file will be 25 # 'dev_shm_LOG' and its location will be /tmp/rocks. If db_log_dir is 26 # not specified in the OPTIONS file, then the location of the log file 27 # will be /dev/shm and the name of the file will be 'LOG' 28 file_name = '' 29 if log_dir: 30 # refer GetInfoLogPrefix() in rocksdb/util/filename.cc 31 # example db_path: /dev/shm/dbbench 32 file_name = db_path[1:] # to ignore the leading '/' character 33 to_be_replaced = re.compile('[^0-9a-zA-Z\-_\.]') 34 for character in to_be_replaced.findall(db_path): 35 file_name = file_name.replace(character, '_') 36 if not file_name.endswith('_'): 37 file_name += '_' 38 file_name += 'LOG' 39 return file_name 40