コード例 #1
0
ファイル: opts.py プロジェクト: changweige/fs-drift
def parse_yaml(options, input_yaml_file):
    with open(input_yaml_file, 'r') as f:
        try:
            y = yaml.safe_load(f)
            if y == None:
                y = {}
        except yaml.YAMLError as e:
            emsg = "YAML parse error: " + str(e)
            raise FsDriftParseException(emsg)

    try:
        for k in y.keys():
            v = y[k]
            if k == 'input_yaml':
                raise FsDriftParseException(
                    'cannot specify YAML input file from within itself!')
            elif k == 'top':
                options.top_directory = v
            elif k == 'output_json':
                options.output_json = v
            elif k == 'workload_table':
                options.workload_table = v
            elif k == 'duration':
                options.duration = positive_integer(v)
            elif k == 'host_set':
                options.host_set = host_set(v)
            elif k == 'threads':
                options.threads = positive_integer(v)
            elif k == 'max_files':
                options.max_files = positive_integer(v)
            elif k == 'max_file_size_kb':
                options.max_file_size_kb = positive_integer(v)
            elif k == 'pause_between_opts':
                options.pause_between_opts = non_negative_integer(v)
            elif k == 'max_record_size_kb':
                options.max_record_size_kb = positive_integer(v)
            elif k == 'max_random_reads':
                options.max_random_reads = positive_integer(v)
            elif k == 'max_random_writes':
                options.max_random_writes = positive_integer(v)
            elif k == 'fdatasync_pct':
                options.fdatasync_probability_pct = non_negative_integer(v)
            elif k == 'fsync_pct':
                options.fsync_probability_pct = non_negative_integer(v)
            elif k == 'levels':
                options.levels = positive_integer(v)
            elif k == 'dirs_per_level':
                options.dirs_per_level = positive_integer(v)
            elif k == 'report_interval':
                options.stats_report_interval = positive_integer(v)
            elif k == 'response_times':
                options.rsptimes = boolean(v)
            elif k == 'incompressible':
                options.incompressible = boolean(v)
            elif k == 'random_distribution':
                options.random_distribution = file_access_distrib(v)
            elif k == 'mean_velocity':
                options.mean_velocity = float(v)
            elif k == 'gaussian_stddev':
                options.gaussian_stddev = float(v)
            elif k == 'create_stddevs_ahead':
                options.create_stddevs_ahead = float(v)
            elif k == 'tolerate_stale_file_handles':
                options.tolerate_stale_fh = boolean(v)
            elif k == 'fullness_limit_percent':
                options.fullness_limit_pct = positive_percentage(v)
            elif k == 'verbosity':
                options.verbosity = bitmask(v)
            elif k == 'launch_as_daemon':
                options.launch_as_daemon = boolean(v)
            else:
                raise FsDriftParseException('unrecognized parameter name %s' %
                                            k)
    except TypeExc as e:
        emsg = 'YAML parse error for key "%s" : %s' % (k, str(e))
        raise FsDriftParseException(emsg)
コード例 #2
0
ファイル: yaml_parser.py プロジェクト: bengland2/smallfile
def parse_yaml(test_params, input_yaml_file):
    inv = test_params.master_invoke
    with open(input_yaml_file, 'r') as f:
        try:
            y = yaml.load(f)
            if y == None:
                y = {}
        except yaml.YAMLError as e:
            emsg = "YAML parse error: " + str(e)
            raise SmfParseException(emsg)
    
    try:
        for k in y.keys():
            v = y[k]
            if k == 'yaml-input-file':
                raise SmfParseException('cannot specify YAML input file from within itself!')
            elif k == 'output-json':
                test_params.output_json = v
            elif k == 'response-times':
                inv.measure_rsptimes = boolean(v)
            elif k == 'network-sync-dir':
                inv.network_dir = boolean(v)
            elif k == 'operation':
                if not smallfile.SmallfileWorkload.all_op_names.__contains__(v):
                    raise SmfParseException('operation "%s" not recognized')
                inv.opname = v
            elif k == 'top':
                test_params.top_dirs = [ os.path.abspath(p) for p in y['top'].split(',') ]
            elif k == 'host-set':
                test_params.host_set = host_set(v)
            elif k == 'files':
                inv.iterations = positive_integer(v)
            elif k == 'threads':
                test_params.thread_count = positive_integer(v)
            elif k == 'files-per-dir':
                inv.files_per_dir = positive_integer(v)
            elif k == 'dirs-per-dir':
                inv.dirs_per_dir = positive_integer(v)
            elif k == 'record-size':
                inv.record_sz_kb = positive_integer(v)
            elif k == 'file-size':
                inv.total_sz_kb = non_negative_integer(v)
            elif k == 'file-size-distribution':
                test_params.size_distribution = inv.filesize_distr = file_size_distrib(v)
            elif k == 'fsync':
                inv.fsync = boolean(v)
            elif k == 'xattr-size':
                inv.xattr_size = positive_integer(v)
            elif k == 'xattr-count':
                inv.xattr_count = positive_integer(v)
            elif k == 'pause':
                inv.pause_between_files = non_negative_integer(v)
            elif k == 'stonewall':
                inv.stonewall = boolean(v)
            elif k == 'finish':
                inv.finish_all_rq = boolean(v)
            elif k == 'prefix':
                inv.prefix = v
            elif k == 'suffix':
                inv.suffix = v
            elif k == 'hash-into-dirs':
                inv.hash_to_dir = boolean(v)
            elif k == 'same-dir':
                inv.is_shared_dir = boolean(v)
            elif k == 'verbose':
                inv.verbose = boolean(v)
            elif k == 'permute-host-dirs':
                test_params.permute_host_dirs = boolean(v)
            elif k == 'record-time-size':
                inv.record_ctime_size = boolean(v)
            elif k == 'verify-read':
                inv.verify_read = boolean(v)
            elif k == 'incompressible':
                inv.incompressible = boolean(v)
            elif k == 'min-dirs-per-sec':
                test_params.min_directories_per_sec = positive_integer(v)
            elif k == 'log-to-stderr':
                raise SmfParseException('%s: not allowed in YAML input' % k)
            elif k == 'remote-pgm-dir':
                raise SmfParseException('%s: not allowed in YAML input' % k)
            else:
                raise SmfParseException('%s: unrecognized input parameter name' % k)
    except TypeExc as e:
        emsg = 'YAML parse error for key "%s" : %s' % (k, str(e))
        raise SmfParseException(emsg)
コード例 #3
0
def parse_yaml(test_params, input_yaml_file):
    inv = test_params.master_invoke
    with open(input_yaml_file, 'r') as f:
        try:
            y = yaml.load(f)
        except yaml.YAMLError as e:
            emsg = "YAML parse error: " + str(e)
            raise SmfParseException(emsg)

    try:
        for k in y.keys():
            v = y[k]
            if k == 'yaml-input-file':
                raise SmfParseException(
                    'cannot specify YAML input file from within itself!')
            elif k == 'output-json':
                test_params.output_json = v
            elif k == 'response-times':
                inv.measure_rsptimes = boolean(v)
            elif k == 'network-sync-dir':
                inv.network_dir = boolean(v)
            elif k == 'operation':
                if not smallfile.SmallfileWorkload.all_op_names.__contains__(
                        v):
                    raise SmfParseException('operation "%s" not recognized')
                inv.opname = v
            elif k == 'top':
                test_params.top_dirs = [
                    os.path.abspath(p) for p in y['top'].split(',')
                ]
            elif k == 'host-set':
                test_params.host_set = host_set(v)
            elif k == 'files':
                inv.iterations = positive_integer(v)
            elif k == 'threads':
                test_params.thread_count = positive_integer(v)
            elif k == 'files-per-dir':
                inv.files_per_dir = positive_integer(v)
            elif k == 'dirs-per-dir':
                inv.dirs_per_dir = positive_integer(v)
            elif k == 'record-size':
                inv.record_sz_kb = positive_integer(v)
            elif k == 'file-size':
                inv.total_sz_kb = non_negative_integer(v)
            elif k == 'file-size-distribution':
                test_params.size_distribution = inv.filesize_distr = file_size_distrib(
                    v)
            elif k == 'fsync':
                inv.fsync = boolean(v)
            elif k == 'xattr-size':
                inv.xattr_size = positive_integer(v)
            elif k == 'xattr-count':
                inv.xattr_count = positive_integer(v)
            elif k == 'pause':
                inv.pause_between_files = non_negative_integer(v)
            elif k == 'stonewall':
                inv.stonewall = boolean(v)
            elif k == 'finish':
                inv.finish_all_rq = boolean(v)
            elif k == 'prefix':
                inv.prefix = v
            elif k == 'suffix':
                inv.suffix = v
            elif k == 'hash-into-dirs':
                inv.hash_to_dir = boolean(v)
            elif k == 'same-dir':
                inv.is_shared_dir = boolean(v)
            elif k == 'verbose':
                inv.verbose = boolean(v)
            elif k == 'permute-host-dirs':
                test_params.permute_host_dirs = boolean(v)
            elif k == 'record-time-size':
                inv.record_ctime_size = boolean(v)
            elif k == 'verify-read':
                inv.verify_read = boolean(v)
            elif k == 'incompressible':
                inv.incompressible = boolean(v)
            elif k == 'min-dirs-per-sec':
                test_params.min_directories_per_sec = positive_integer(v)
            elif k == 'log-to-stderr':
                raise SmfParseException('%s: not allowed in YAML input' % k)
            elif k == 'remote-pgm-dir':
                raise SmfParseException('%s: not allowed in YAML input' % k)
            else:
                raise SmfParseException(
                    '%s: unrecognized input parameter name' % k)
    except TypeExc as e:
        emsg = 'YAML parse error for key "%s" : %s' % (k, str(e))
        raise SmfParseException(emsg)