import contextlib import logging from ..orchestra import run from teuthology import misc as teuthology log = logging.getLogger(__name__) @contextlib.contextmanager def task(ctx, config): """ Run omapbench The config should be as follows:: omapbench: clients: [client list] threads: objects: entries: keysize: valsize: increment: omaptype: example:: tasks: - ceph: - omapbench: clients: [client.0] threads: 30 objects: 1000 entries: 10 keysize: 10 valsize: 100 increment: 100 omaptype: uniform - interactive: """ log.info('Beginning omapbench...') assert isinstance(config, dict), \ "please list clients to run on" omapbench = {} testdir = teuthology.get_testdir(ctx) print(str(config.get('increment',-1))) 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() proc = remote.run( args=[ "/bin/sh", "-c", " ".join(['adjust-ulimits', 'ceph-coverage', '{tdir}/archive/coverage', 'omapbench', '--name', role[len(PREFIX):], '-t', str(config.get('threads', 30)), '-o', str(config.get('objects', 1000)), '--entries', str(config.get('entries',10)), '--keysize', str(config.get('keysize',10)), '--valsize', str(config.get('valsize',1000)), '--inc', str(config.get('increment',10)), '--omaptype', str(config.get('omaptype','uniform')) ]).format(tdir=testdir), ], logger=log.getChild('omapbench.{id}'.format(id=id_)), stdin=run.PIPE, wait=False ) omapbench[id_] = proc try: yield finally: log.info('joining omapbench') run.wait(omapbench.itervalues())