892a156267
Summary: This pull request adds a README file and a blog post for the Advisor tool. It also adds the missing tests for some Optimizer modules. Some comments are added to the classes being tested for improved readability. Pull Request resolved: https://github.com/facebook/rocksdb/pull/4201 Reviewed By: maysamyabandeh Differential Revision: D9125311 Pulled By: poojam23 fbshipit-source-id: aefcf2f06eaa05490cc2834ef5aa6e21f0d1dc55
90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
# Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
# This source code is licensed under both the GPLv2 (found in the
|
|
# COPYING file in the root directory) and Apache 2.0 License
|
|
# (found in the LICENSE.Apache file in the root directory).
|
|
|
|
from advisor.rule_parser import RulesSpec
|
|
from advisor.db_log_parser import DatabaseLogs, DataSource
|
|
from advisor.db_options_parser import DatabaseOptions
|
|
from advisor.db_stats_fetcher import LogStatsParser, OdsStatsFetcher
|
|
import argparse
|
|
|
|
|
|
def main(args):
|
|
# initialise the RulesSpec parser
|
|
rule_spec_parser = RulesSpec(args.rules_spec)
|
|
rule_spec_parser.load_rules_from_spec()
|
|
rule_spec_parser.perform_section_checks()
|
|
# initialize the DatabaseOptions object
|
|
db_options = DatabaseOptions(args.rocksdb_options)
|
|
# Create DatabaseLogs object
|
|
db_logs = DatabaseLogs(
|
|
args.log_files_path_prefix, db_options.get_column_families()
|
|
)
|
|
# Create the Log STATS object
|
|
db_log_stats = LogStatsParser(
|
|
args.log_files_path_prefix, args.stats_dump_period_sec
|
|
)
|
|
data_sources = {
|
|
DataSource.Type.DB_OPTIONS: [db_options],
|
|
DataSource.Type.LOG: [db_logs],
|
|
DataSource.Type.TIME_SERIES: [db_log_stats]
|
|
}
|
|
if args.ods_client:
|
|
data_sources[DataSource.Type.TIME_SERIES].append(OdsStatsFetcher(
|
|
args.ods_client,
|
|
args.ods_entity,
|
|
args.ods_tstart,
|
|
args.ods_tend,
|
|
args.ods_key_prefix
|
|
))
|
|
triggered_rules = rule_spec_parser.get_triggered_rules(
|
|
data_sources, db_options.get_column_families()
|
|
)
|
|
rule_spec_parser.print_rules(triggered_rules)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description='Use this script to get\
|
|
suggestions for improving Rocksdb performance.')
|
|
parser.add_argument(
|
|
'--rules_spec', required=True, type=str,
|
|
help='path of the file containing the expert-specified Rules'
|
|
)
|
|
parser.add_argument(
|
|
'--rocksdb_options', required=True, type=str,
|
|
help='path of the starting Rocksdb OPTIONS file'
|
|
)
|
|
parser.add_argument(
|
|
'--log_files_path_prefix', required=True, type=str,
|
|
help='path prefix of the Rocksdb LOG files'
|
|
)
|
|
parser.add_argument(
|
|
'--stats_dump_period_sec', required=True, type=int,
|
|
help='the frequency (in seconds) at which STATISTICS are printed to ' +
|
|
'the Rocksdb LOG file'
|
|
)
|
|
# ODS arguments
|
|
parser.add_argument(
|
|
'--ods_client', type=str, help='the ODS client binary'
|
|
)
|
|
parser.add_argument(
|
|
'--ods_entity', type=str,
|
|
help='the servers for which the ODS stats need to be fetched'
|
|
)
|
|
parser.add_argument(
|
|
'--ods_key_prefix', type=str,
|
|
help='the prefix that needs to be attached to the keys of time ' +
|
|
'series to be fetched from ODS'
|
|
)
|
|
parser.add_argument(
|
|
'--ods_tstart', type=int,
|
|
help='start time of timeseries to be fetched from ODS'
|
|
)
|
|
parser.add_argument(
|
|
'--ods_tend', type=int,
|
|
help='end time of timeseries to be fetched from ODS'
|
|
)
|
|
args = parser.parse_args()
|
|
main(args)
|