ceph_objectstore_tool: encapsulate into a function

Move code out of the task into function. Also remove the "REP" specifics
from helper functions that could also be used for erasure coded pools.

Signed-off-by: Loic Dachary <ldachary@redhat.com>
This commit is contained in:
Loic Dachary 2014-11-19 13:44:38 +01:00
parent d591226373
commit c9e6edebd9

View File

@ -31,32 +31,32 @@ def get_pool_id(ctx, name):
return ctx.manager.raw_cluster_cmd('osd', 'pool', 'stats', name).split()[3]
def cod_setup_local_data(log, ctx, NUM_OBJECTS, DATADIR, REP_NAME, DATALINECOUNT):
def cod_setup_local_data(log, ctx, NUM_OBJECTS, DATADIR, BASE_NAME, DATALINECOUNT):
objects = range(1, NUM_OBJECTS + 1)
for i in objects:
NAME = REP_NAME + "{num}".format(num=i)
NAME = BASE_NAME + "{num}".format(num=i)
LOCALNAME=os.path.join(DATADIR, NAME)
dataline = range(DATALINECOUNT)
fd = open(LOCALNAME, "w")
data = "This is the replicated data for " + NAME + "\n"
data = "This is the data for " + NAME + "\n"
for _ in dataline:
fd.write(data)
fd.close()
def cod_setup_remote_data(log, ctx, remote, NUM_OBJECTS, DATADIR, REP_NAME, DATALINECOUNT):
def cod_setup_remote_data(log, ctx, remote, NUM_OBJECTS, DATADIR, BASE_NAME, DATALINECOUNT):
objects = range(1, NUM_OBJECTS + 1)
for i in objects:
NAME = REP_NAME + "{num}".format(num=i)
NAME = BASE_NAME + "{num}".format(num=i)
DDNAME = os.path.join(DATADIR, NAME)
remote.run(args=['rm', '-f', DDNAME ])
dataline = range(DATALINECOUNT)
data = "This is the replicated data for " + NAME + "\n"
data = "This is the data for " + NAME + "\n"
DATA = ""
for _ in dataline:
DATA += data
@ -64,18 +64,18 @@ def cod_setup_remote_data(log, ctx, remote, NUM_OBJECTS, DATADIR, REP_NAME, DATA
# def rados(ctx, remote, cmd, wait=True, check_status=False):
def cod_setup(log, ctx, remote, NUM_OBJECTS, DATADIR, REP_NAME, DATALINECOUNT, REP_POOL, db):
def cod_setup(log, ctx, remote, NUM_OBJECTS, DATADIR, BASE_NAME, DATALINECOUNT, POOL, db):
ERRORS = 0
log.info("Creating {objs} objects in replicated pool".format(objs=NUM_OBJECTS))
log.info("Creating {objs} objects in pool".format(objs=NUM_OBJECTS))
nullfd = open(os.devnull, "w")
objects = range(1, NUM_OBJECTS + 1)
for i in objects:
NAME = REP_NAME + "{num}".format(num=i)
NAME = BASE_NAME + "{num}".format(num=i)
DDNAME = os.path.join(DATADIR, NAME)
proc = rados(ctx, remote, ['-p', REP_POOL, 'put', NAME, DDNAME], wait=False)
# proc = remote.run(args=['rados', '-p', REP_POOL, 'put', NAME, DDNAME])
proc = rados(ctx, remote, ['-p', POOL, 'put', NAME, DDNAME], wait=False)
# proc = remote.run(args=['rados', '-p', POOL, 'put', NAME, DDNAME])
ret = proc.wait()
if ret != 0:
log.critical("Rados put failed with status {ret}".format(ret=r[0].exitstatus))
@ -90,7 +90,7 @@ def cod_setup(log, ctx, remote, NUM_OBJECTS, DATADIR, REP_NAME, DATALINECOUNT, R
continue
mykey = "key{i}-{k}".format(i=i, k=k)
myval = "val{i}-{k}".format(i=i, k=k)
proc = remote.run(args=['rados', '-p', REP_POOL, 'setxattr', NAME, mykey, myval])
proc = remote.run(args=['rados', '-p', POOL, 'setxattr', NAME, mykey, myval])
ret = proc.wait()
if ret != 0:
log.error("setxattr failed with {ret}".format(ret=ret))
@ -100,7 +100,7 @@ def cod_setup(log, ctx, remote, NUM_OBJECTS, DATADIR, REP_NAME, DATALINECOUNT, R
# Create omap header in all objects but REPobject1
if i != 1:
myhdr = "hdr{i}".format(i=i)
proc = remote.run(args=['rados', '-p', REP_POOL, 'setomapheader', NAME, myhdr])
proc = remote.run(args=['rados', '-p', POOL, 'setomapheader', NAME, myhdr])
ret = proc.wait()
if ret != 0:
log.critical("setomapheader failed with {ret}".format(ret=ret))
@ -113,7 +113,7 @@ def cod_setup(log, ctx, remote, NUM_OBJECTS, DATADIR, REP_NAME, DATALINECOUNT, R
continue
mykey = "okey{i}-{k}".format(i=i, k=k)
myval = "oval{i}-{k}".format(i=i, k=k)
proc = remote.run(args=['rados', '-p', REP_POOL, 'setomapval', NAME, mykey, myval])
proc = remote.run(args=['rados', '-p', POOL, 'setomapval', NAME, mykey, myval])
ret = proc.wait()
if ret != 0:
log.critical("setomapval failed with {ret}".format(ret=ret))
@ -151,26 +151,22 @@ def task(ctx, config):
config = {}
assert isinstance(config, dict), \
'ceph_objectstore_tool task only accepts a dict for configuration'
TEUTHDIR = teuthology.get_testdir(ctx)
#TEUTHDIR = teuthology.get_testdir(ctx)
# clients = config['clients']
# assert len(clients) > 0,
# 'ceph_objectstore_tool task needs at least 1 client'
REP_POOL = "rep_pool"
REP_NAME = "REPobject"
# EC_POOL = "ec_pool"
# EC_NAME = "ECobject"
NUM_OBJECTS = config.get('objects', 10)
ERRORS = 0
DATADIR = os.path.join(TEUTHDIR, "data")
#ERRORS = 0
#DATADIR = os.path.join(TEUTHDIR, "data")
# Put a test dir below the data dir
# TESTDIR = os.path.join(DATADIR, "test")
DATALINECOUNT = 10000
#DATALINECOUNT = 10000
# PROFNAME = "testecprofile"
log.info('Beginning ceph_objectstore_tool...')
log.info("objects: {num}".format(num=NUM_OBJECTS))
log.debug(config)
log.debug(ctx)
@ -197,12 +193,6 @@ def task(ctx, config):
)
ctx.manager = manager
# ctx.manager.raw_cluster_cmd('osd', 'pool', 'create', REP_POOL, '12', '12', 'replicated')
create_replicated_pool(cli_remote, REP_POOL, 12)
REPID = get_pool_id(ctx, REP_POOL)
log.debug("repid={num}".format(num=REPID))
while len(manager.get_osd_status()['up']) != len(manager.get_osd_status()['raw']):
time.sleep(10)
while len(manager.get_osd_status()['in']) != len(manager.get_osd_status()['up']):
@ -210,6 +200,40 @@ def task(ctx, config):
manager.raw_cluster_cmd('osd', 'set', 'noout')
manager.raw_cluster_cmd('osd', 'set', 'nodown')
ERRORS = 0
REP_POOL = "rep_pool"
REP_NAME = "REPobject"
create_replicated_pool(cli_remote, REP_POOL, 12)
ERRORS += test_objectstore(ctx, config, cli_remote, REP_POOL, REP_NAME)
if ERRORS == 0:
log.info("TEST PASSED")
else:
log.error("TEST FAILED WITH {errcount} ERRORS".format(errcount=ERRORS))
try:
yield
finally:
log.info('Ending ceph_objectstore_tool')
def test_objectstore(ctx, config, cli_remote, REP_POOL, REP_NAME):
manager = ctx.manager
osds = ctx.cluster.only(teuthology.is_type('osd'))
TEUTHDIR = teuthology.get_testdir(ctx)
DATADIR = os.path.join(TEUTHDIR, "data")
DATALINECOUNT = 10000
ERRORS = 0
NUM_OBJECTS = config.get('objects', 10)
log.info("objects: {num}".format(num=NUM_OBJECTS))
REPID = get_pool_id(ctx, REP_POOL)
log.debug("repid={num}".format(num=REPID))
db = {}
LOCALDIR = tempfile.mkdtemp("cod")
@ -559,12 +583,4 @@ def task(ctx, config):
log.error("Data comparison failed for {obj}".format(obj=NAME))
ERRORS += 1
if ERRORS == 0:
log.info("TEST PASSED")
else:
log.error("TEST FAILED WITH {errcount} ERRORS".format(errcount=ERRORS))
try:
yield
finally:
log.info('Ending ceph_objectstore_tool')
return ERRORS