from teuthology.orchestra import run
from teuthology import misc as teuthology
+
log = logging.getLogger(__name__)
@contextlib.contextmanager
time: <seconds to run>
pool: <pool to use>
size: write size to use
+ concurrency: max number of outstanding writes (16)
objectsize: object size to use
unique_pool: use a unique pool, defaults to False
ec_pool: create an ec pool, defaults to False
runtype = config.get('type', 'write')
create_pool = config.get('create_pool', True)
- for role in config.get('clients', ['client.0']):
- assert isinstance(role, basestring)
- PREFIX = 'client.'
- assert role.startswith(PREFIX)
- id_ = role[len(PREFIX):]
- (remote,) = ctx.cluster.only(role).remotes.iterkeys()
+ for role in config.get(
+ 'clients',
+ list(map(lambda x: 'client.' + x,
+ teuthology.all_roles_of_type(ctx.cluster, 'client')))):
+ assert isinstance(role, str)
+ (_, id_) = role.split('.', 1)
+ (remote,) = ctx.cluster.only(role).remotes.keys()
if config.get('ec_pool', False):
profile = config.get('erasure_code_profile', {})
cleanup = []
if not config.get('cleanup', True):
cleanup = ['--no-cleanup']
+ write_to_omap = []
+ if config.get('write-omap', False):
+ write_to_omap = ['--write-omap']
+ log.info('omap writes')
pool = config.get('pool', 'data')
if create_pool:
else:
pool = manager.create_pool_with_unique_name(erasure_code_profile_name=profile_name)
+ concurrency = config.get('concurrency', 16)
osize = config.get('objectsize', 65536)
- if osize is 0:
+ if osize == 0:
objectsize = []
else:
- objectsize = ['-o', str(osize)]
+ objectsize = ['--object-size', str(osize)]
size = ['-b', str(config.get('size', 65536))]
# If doing a reading run then populate data
if runtype != "write":
'{tdir}/archive/coverage',
'rados',
'--no-log-to-stderr',
- '--name', role]
+ '--name', role] +
+ ['-t', str(concurrency)]
+ size + objectsize +
['-p' , pool,
'bench', str(60), "write", "--no-cleanup"
+ size + objectsize +
['-p' , pool,
'bench', str(config.get('time', 360)), runtype,
- ] + cleanup).format(tdir=testdir),
+ ] + write_to_omap + cleanup).format(tdir=testdir),
],
logger=log.getChild('radosbench.{id}'.format(id=id_)),
stdin=run.PIPE,
finally:
timeout = config.get('time', 360) * 30 + 300
log.info('joining radosbench (timing out after %ss)', timeout)
- run.wait(radosbench.itervalues(), timeout=timeout)
+ run.wait(radosbench.values(), timeout=timeout)
- if pool is not 'data' and create_pool:
+ if pool != 'data' and create_pool:
manager.remove_pool(pool)