本文整理汇总了Python中teuthology.misc.num_instances_of_type函数的典型用法代码示例。如果您正苦于以下问题:Python num_instances_of_type函数的具体用法?Python num_instances_of_type怎么用?Python num_instances_of_type使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了num_instances_of_type函数的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: task
def task(ctx, config):
"""
Test [deep] repair in several situations:
Repair [Truncate, Data EIO, MData EIO] on [Primary|Replica]
The config should be as follows:
Must include the log-whitelist below
Must enable filestore_debug_inject_read_err config
example:
tasks:
- chef:
- install:
- ceph:
log-whitelist: ['candidate had a read error', 'deep-scrub 0 missing, 1 inconsistent objects', 'deep-scrub 0 missing, 4 inconsistent objects', 'deep-scrub 1 errors', 'deep-scrub 4 errors', '!= known omap_digest', 'repair 0 missing, 1 inconsistent objects', 'repair 0 missing, 4 inconsistent objects', 'repair 1 errors, 1 fixed', 'repair 4 errors, 4 fixed', 'scrub 0 missing, 1 inconsistent', 'scrub 1 errors', 'size 1 != known size']
conf:
osd:
filestore debug inject read err: true
- repair_test:
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'repair_test task only accepts a dict for config'
if not hasattr(ctx, 'manager'):
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
ctx.manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager')
)
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
while len(ctx.manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
tests = [
gen_repair_test_1(mdataerr(ctx), choose_primary(ctx), "scrub"),
gen_repair_test_1(mdataerr(ctx), choose_replica(ctx), "scrub"),
gen_repair_test_1(dataerr(ctx), choose_primary(ctx), "deep-scrub"),
gen_repair_test_1(dataerr(ctx), choose_replica(ctx), "deep-scrub"),
gen_repair_test_1(trunc(ctx), choose_primary(ctx), "scrub"),
gen_repair_test_1(trunc(ctx), choose_replica(ctx), "scrub"),
gen_repair_test_2(choose_primary(ctx)),
gen_repair_test_2(choose_replica(ctx))
]
for test in tests:
run_test(ctx, config, test)
开发者ID:andrewschoen,项目名称:ceph-qa-suite,代码行数:56,代码来源:repair_test.py
示例2: task
def task(ctx, config):
"""
Die if {testdir}/err exists or if an OSD dumps core
"""
if config is None:
config = {}
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
testdir = teuthology.get_testdir(ctx)
while True:
for i in range(num_osds):
(osd_remote,) = ctx.cluster.only('osd.%d' % i).remotes.iterkeys()
p = osd_remote.run(
args = [ 'test', '-e', '{tdir}/err'.format(tdir=testdir) ],
wait=True,
check_status=False,
)
exit_status = p.exitstatus
if exit_status == 0:
log.info("osd %d has an error" % i)
raise Exception("osd %d error" % i)
log_path = '/var/log/ceph/osd.%d.log' % (i)
p = osd_remote.run(
args = [
'tail', '-1', log_path,
run.Raw('|'),
'grep', '-q', 'end dump'
],
wait=True,
check_status=False,
)
exit_status = p.exitstatus
if exit_status == 0:
log.info("osd %d dumped core" % i)
raise Exception("osd %d dumped core" % i)
time.sleep(5)
开发者ID:LalatenduMohanty,项目名称:teuthology,代码行数:56,代码来源:die_on_err.py
示例3: task
def task(ctx, config):
"""
Test [deep] scrub
tasks:
- chef:
- install:
- ceph:
log-whitelist:
- '!= known digest'
- '!= known omap_digest'
- deep-scrub 0 missing, 1 inconsistent objects
- deep-scrub 1 errors
- repair 0 missing, 1 inconsistent objects
- repair 1 errors, 1 fixed
- scrub_test:
"""
if config is None:
config = {}
assert isinstance(config, dict), "scrub_test task only accepts a dict for configuration"
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, "osd")
log.info("num_osds is %s" % num_osds)
manager = ceph_manager.CephManager(mon, ctx=ctx, logger=log.getChild("ceph_manager"))
while len(manager.get_osd_status()["up"]) < num_osds:
time.sleep(10)
for i in range(num_osds):
manager.raw_cluster_cmd("tell", "osd.%d" % i, "flush_pg_stats")
manager.wait_for_clean()
# write some data
p = manager.do_rados(mon, ["-p", "rbd", "bench", "--no-cleanup", "1", "write", "-b", "4096"])
log.info("err is %d" % p.exitstatus)
# wait for some PG to have data that we can mess with
pg, acting = wait_for_victim_pg(manager)
osd = acting[0]
osd_remote, obj_path, obj_name = find_victim_object(ctx, pg, osd)
manager.do_rados(mon, ["-p", "rbd", "setomapval", obj_name, "key", "val"])
log.info("err is %d" % p.exitstatus)
manager.do_rados(mon, ["-p", "rbd", "setomapheader", obj_name, "hdr"])
log.info("err is %d" % p.exitstatus)
log.info("messing with PG %s on osd %d" % (pg, osd))
test_repair_corrupted_obj(ctx, manager, pg, osd_remote, obj_path, "rbd")
test_repair_bad_omap(ctx, manager, pg, osd, obj_name)
test_list_inconsistent_obj(ctx, manager, osd_remote, pg, acting, osd, obj_name, obj_path)
log.info("test successful!")
开发者ID:smithfarm,项目名称:ceph-qa-suite,代码行数:54,代码来源:scrub_test.py
示例4: task
def task(ctx, config):
"""
Benchmark the recovery system.
Generates objects with smalliobench, runs it normally to get a
baseline performance measurement, then marks an OSD out and reruns
to measure performance during recovery.
The config should be as follows:
recovery_bench:
duration: <seconds for each measurement run>
num_objects: <number of objects>
io_size: <io size in bytes>
example:
tasks:
- ceph:
- recovery_bench:
duration: 60
num_objects: 500
io_size: 4096
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'recovery_bench task only accepts a dict for configuration'
log.info('Beginning recovery bench...')
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
while len(manager.get_osd_status()['up']) < num_osds:
manager.sleep(10)
bench_proc = RecoveryBencher(
manager,
config,
)
try:
yield
finally:
log.info('joining recovery bencher')
bench_proc.do_join()
开发者ID:gregsfortytwo,项目名称:teuthology,代码行数:53,代码来源:recovery_bench.py
示例5: task
def task(ctx, config):
"""
Run scrub periodically. Randomly chooses an OSD to scrub.
The config should be as follows:
scrub:
frequency: <seconds between scrubs>
deep: <bool for deepness>
example:
tasks:
- ceph:
- scrub:
frequency: 30
deep: 0
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'scrub task only accepts a dict for configuration'
log.info('Beginning scrub...')
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
while len(manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
scrub_proc = Scrubber(
manager,
config,
)
try:
yield
finally:
log.info('joining scrub')
scrub_proc.do_join()
开发者ID:Abhishekvrshny,项目名称:ceph-qa-suite,代码行数:47,代码来源:scrub.py
示例6: cluster
#.........这里部分代码省略.........
remote=mon0_remote,
path='/tmp/cephtest/ceph.keyring',
)
monmap = teuthology.get_file(
remote=mon0_remote,
path='/tmp/cephtest/monmap',
)
for rem in ctx.cluster.remotes.iterkeys():
# copy mon key and initial monmap
log.info('Sending monmap to node {remote}'.format(remote=rem))
teuthology.write_file(
remote=rem,
path='/tmp/cephtest/ceph.keyring',
data=keyring,
)
teuthology.write_file(
remote=rem,
path='/tmp/cephtest/monmap',
data=monmap,
)
log.info('Setting up mon nodes...')
mons = ctx.cluster.only(teuthology.is_type('mon'))
run.wait(
mons.run(
args=[
'/tmp/cephtest/enable-coredump',
'/tmp/cephtest/binary/usr/local/bin/ceph-coverage',
coverage_dir,
'/tmp/cephtest/binary/usr/local/bin/osdmaptool',
'--clobber',
'--createsimple', '{num:d}'.format(
num=teuthology.num_instances_of_type(ctx.cluster, 'osd'),
),
'/tmp/cephtest/osdmap',
'--pg_bits', '2',
'--pgp_bits', '4',
],
wait=False,
),
)
log.info('Setting up osd nodes...')
for remote, roles_for_host in osds.remotes.iteritems():
for id_ in teuthology.roles_of_type(roles_for_host, 'osd'):
remote.run(
args=[
'/tmp/cephtest/enable-coredump',
'/tmp/cephtest/binary/usr/local/bin/ceph-coverage',
coverage_dir,
'/tmp/cephtest/binary/usr/local/bin/ceph-authtool',
'--create-keyring',
'--gen-key',
'--name=osd.{id}'.format(id=id_),
'/tmp/cephtest/data/osd.{id}.keyring'.format(id=id_),
],
)
log.info('Setting up mds nodes...')
mdss = ctx.cluster.only(teuthology.is_type('mds'))
for remote, roles_for_host in mdss.remotes.iteritems():
for id_ in teuthology.roles_of_type(roles_for_host, 'mds'):
remote.run(
args=[
'/tmp/cephtest/enable-coredump',
开发者ID:jdurgin,项目名称:teuthology,代码行数:67,代码来源:ceph.py
示例7: task
def task(ctx, config):
"""
Test (non-backfill) recovery
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'task only accepts a dict for configuration'
testdir = teuthology.get_testdir(ctx)
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
assert num_osds == 3
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < 3:
time.sleep(10)
manager.flush_pg_stats([0, 1, 2])
manager.wait_for_clean()
# test some osdmap flags
manager.raw_cluster_cmd('osd', 'set', 'noin')
manager.raw_cluster_cmd('osd', 'set', 'noout')
manager.raw_cluster_cmd('osd', 'set', 'noup')
manager.raw_cluster_cmd('osd', 'set', 'nodown')
manager.raw_cluster_cmd('osd', 'unset', 'noin')
manager.raw_cluster_cmd('osd', 'unset', 'noout')
manager.raw_cluster_cmd('osd', 'unset', 'noup')
manager.raw_cluster_cmd('osd', 'unset', 'nodown')
# write some new data
p = rados_start(testdir, mon, ['-p', 'rbd', 'bench', '20', 'write', '-b', '4096',
'--no-cleanup'])
time.sleep(15)
# trigger a divergent target:
# blackhole + restart osd.1 (shorter log)
manager.blackhole_kill_osd(1)
# kill osd.2 (longer log... we'll make it divergent below)
manager.kill_osd(2)
time.sleep(2)
manager.revive_osd(1)
# wait for our writes to complete + succeed
err = p.wait()
log.info('err is %d' % err)
# cluster must repeer
manager.flush_pg_stats([0, 1])
manager.wait_for_active_or_down()
# write some more (make sure osd.2 really is divergent)
p = rados_start(testdir, mon, ['-p', 'rbd', 'bench', '15', 'write', '-b', '4096'])
p.wait()
# revive divergent osd
manager.revive_osd(2)
while len(manager.get_osd_status()['up']) < 3:
log.info('waiting a bit...')
time.sleep(2)
log.info('3 are up!')
# cluster must recover
manager.flush_pg_stats([0, 1, 2])
manager.wait_for_clean()
开发者ID:Abhishekvrshny,项目名称:ceph,代码行数:74,代码来源:osd_recovery.py
示例8: test_incomplete_pgs
def test_incomplete_pgs(ctx, config):
"""
Test handling of incomplete pgs. Requires 4 osds.
"""
testdir = teuthology.get_testdir(ctx)
if config is None:
config = {}
assert isinstance(config, dict), \
'task only accepts a dict for configuration'
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
assert num_osds == 4
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < 4:
time.sleep(10)
manager.flush_pg_stats([0, 1, 2, 3])
manager.wait_for_clean()
log.info('Testing incomplete pgs...')
for i in range(4):
manager.set_config(
i,
osd_recovery_delay_start=1000)
# move data off of osd.0, osd.1
manager.raw_cluster_cmd('osd', 'out', '0', '1')
manager.flush_pg_stats([0, 1, 2, 3], [0, 1])
manager.wait_for_clean()
# lots of objects in rbd (no pg log, will backfill)
p = rados_start(testdir, mon,
['-p', 'rbd', 'bench', '20', 'write', '-b', '1',
'--no-cleanup'])
p.wait()
# few objects in rbd pool (with pg log, normal recovery)
for f in range(1, 20):
p = rados_start(testdir, mon, ['-p', 'rbd', 'put',
'foo.%d' % f, '/etc/passwd'])
p.wait()
# move it back
manager.raw_cluster_cmd('osd', 'in', '0', '1')
manager.raw_cluster_cmd('osd', 'out', '2', '3')
time.sleep(10)
manager.flush_pg_stats([0, 1, 2, 3], [2, 3])
time.sleep(10)
manager.wait_for_active()
assert not manager.is_clean()
assert not manager.is_recovered()
# kill 2 + 3
log.info('stopping 2,3')
manager.kill_osd(2)
manager.kill_osd(3)
log.info('...')
manager.raw_cluster_cmd('osd', 'down', '2', '3')
manager.flush_pg_stats([0, 1])
manager.wait_for_active_or_down()
assert manager.get_num_down() > 0
# revive 2 + 3
manager.revive_osd(2)
manager.revive_osd(3)
while len(manager.get_osd_status()['up']) < 4:
log.info('waiting a bit...')
time.sleep(2)
log.info('all are up!')
for i in range(4):
manager.kick_recovery_wq(i)
# cluster must recover
manager.wait_for_clean()
开发者ID:Abhishekvrshny,项目名称:ceph,代码行数:87,代码来源:osd_recovery.py
示例9: cluster
#.........这里部分代码省略.........
)
monmap = teuthology.get_file(
remote=mon0_remote,
path='{tdir}/monmap'.format(tdir=testdir),
)
for rem in ctx.cluster.remotes.iterkeys():
# copy mon key and initial monmap
log.info('Sending monmap to node {remote}'.format(remote=rem))
teuthology.sudo_write_file(
remote=rem,
path=keyring_path,
data=keyring,
perms='0644'
)
teuthology.write_file(
remote=rem,
path='{tdir}/monmap'.format(tdir=testdir),
data=monmap,
)
log.info('Setting up mon nodes...')
mons = ctx.cluster.only(teuthology.is_type('mon'))
run.wait(
mons.run(
args=[
'adjust-ulimits',
'ceph-coverage',
coverage_dir,
'osdmaptool',
'-c', conf_path,
'--clobber',
'--createsimple', '{num:d}'.format(
num=teuthology.num_instances_of_type(ctx.cluster, 'osd'),
),
'{tdir}/osdmap'.format(tdir=testdir),
'--pg_bits', '2',
'--pgp_bits', '4',
],
wait=False,
),
)
log.info('Setting up mds nodes...')
mdss = ctx.cluster.only(teuthology.is_type('mds'))
for remote, roles_for_host in mdss.remotes.iteritems():
for id_ in teuthology.roles_of_type(roles_for_host, 'mds'):
remote.run(
args=[
'sudo',
'mkdir',
'-p',
'/var/lib/ceph/mds/ceph-{id}'.format(id=id_),
run.Raw('&&'),
'sudo',
'adjust-ulimits',
'ceph-coverage',
coverage_dir,
'ceph-authtool',
'--create-keyring',
'--gen-key',
'--name=mds.{id}'.format(id=id_),
'/var/lib/ceph/mds/ceph-{id}/keyring'.format(id=id_),
],
)
开发者ID:kawaguchi-s,项目名称:ceph-qa-suite,代码行数:66,代码来源:ceph.py
示例10: task
def task(ctx, config):
"""
Test backfill
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'thrashosds task only accepts a dict for configuration'
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
assert num_osds == 3
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < 3:
time.sleep(10)
manager.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
manager.wait_for_clean()
# write some data
p = rados_start(ctx, mon, ['-p', 'rbd', 'bench', '15', 'write', '-b', '4096',
'--no-cleanup'])
err = p.wait()
log.info('err is %d' % err)
# mark osd.0 out to trigger a rebalance/backfill
manager.mark_out_osd(0)
# also mark it down to it won't be included in pg_temps
manager.kill_osd(0)
manager.mark_down_osd(0)
# wait for everything to peer and be happy...
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
manager.wait_for_recovery()
# write some new data
p = rados_start(ctx, mon, ['-p', 'rbd', 'bench', '30', 'write', '-b', '4096',
'--no-cleanup'])
time.sleep(15)
# blackhole + restart osd.1
# this triggers a divergent backfill target
manager.blackhole_kill_osd(1)
time.sleep(2)
manager.revive_osd(1)
# wait for our writes to complete + succeed
err = p.wait()
log.info('err is %d' % err)
# cluster must recover
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
manager.wait_for_recovery()
# re-add osd.0
manager.revive_osd(0)
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
manager.wait_for_clean()
开发者ID:Abhishekvrshny,项目名称:ceph-qa-suite,代码行数:72,代码来源:osd_backfill.py
示例11: task
def task(ctx, config):
"""
Test [deep] scrub
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'scrub_test task only accepts a dict for configuration'
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
for i in range(num_osds):
manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'flush_pg_stats')
manager.wait_for_clean()
# write some data
p = rados_start(mon, ['-p', 'rbd', 'bench', '1', 'write', '-b', '4096'])
err = p.exitstatus
log.info('err is %d' % err)
# wait for some PG to have data that we can mess with
victim = None
osd = None
while victim is None:
stats = manager.get_pg_stats()
for pg in stats:
size = pg['stat_sum']['num_bytes']
if size > 0:
victim = pg['pgid']
osd = pg['acting'][0]
break
if victim is None:
time.sleep(3)
log.info('messing with PG %s on osd %d' % (victim, osd))
(osd_remote,) = ctx.cluster.only('osd.%d' % osd).remotes.iterkeys()
data_path = os.path.join('/tmp/cephtest/data',
'osd.{id}.data'.format(id=osd),
'current',
'{pg}_head'.format(pg=victim)
)
# fuzz time
ls_fp = StringIO()
osd_remote.run(
args=[ 'ls', data_path ],
stdout=ls_fp,
)
ls_out = ls_fp.getvalue()
ls_fp.close()
# find an object file we can mess with
file = None
for line in ls_out.split('\n'):
if line.find('object'):
file = line
break
assert file is not None
log.info('fuzzing %s' % file)
# put a single \0 at the beginning of the file
osd_remote.run(
args=[ 'dd',
'if=/dev/zero',
'of=%s' % os.path.join(data_path, file),
'bs=1', 'count=1', 'conv=notrunc'
]
)
# scrub, verify inconsistent
manager.raw_cluster_cmd('pg', 'deep-scrub', victim)
while True:
stats = manager.get_single_pg_stats(victim)
state = stats['state']
# wait for the scrub to finish
if state.find('scrubbing'):
time.sleep(3)
continue
inconsistent = stats['state'].find('+inconsistent') != -1
assert inconsistent
#.........这里部分代码省略.........
开发者ID:jdurgin,项目名称:teuthology,代码行数:101,代码来源:scrub_test.py
示例12: task
def task(ctx, config):
"""
Test [deep] scrub
tasks:
- chef:
- install:
- ceph:
log-whitelist:
- '!= known digest'
- '!= known omap_digest'
- deep-scrub 0 missing, 1 inconsistent objects
- deep-scrub 1 errors
- repair 0 missing, 1 inconsistent objects
- repair 1 errors, 1 fixed
- scrub_test:
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'scrub_test task only accepts a dict for configuration'
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
for i in range(num_osds):
manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'flush_pg_stats')
manager.wait_for_clean()
# write some data
p = manager.do_rados(mon, ['-p', 'rbd', 'bench', '--no-cleanup', '1', 'write', '-b', '4096'])
err = p.exitstatus
log.info('err is %d' % err)
# wait for some PG to have data that we can mess with
victim = None
osd = None
while victim is None:
stats = manager.get_pg_stats()
for pg in stats:
size = pg['stat_sum']['num_bytes']
if size > 0:
victim = pg['pgid']
osd = pg['acting'][0]
break
if victim is None:
time.sleep(3)
log.info('messing with PG %s on osd %d' % (victim, osd))
(osd_remote,) = ctx.cluster.only('osd.%d' % osd).remotes.iterkeys()
data_path = os.path.join(
'/var/lib/ceph/osd',
'ceph-{id}'.format(id=osd),
'current',
'{pg}_head'.format(pg=victim)
)
# fuzz time
ls_fp = StringIO()
osd_remote.run(
args=[ 'sudo', 'ls', data_path ],
stdout=ls_fp,
)
ls_out = ls_fp.getvalue()
ls_fp.close()
# find an object file we can mess with
osdfilename = None
for line in ls_out.split('\n'):
if 'object' in line:
osdfilename = line
break
assert osdfilename is not None
# Get actual object name from osd stored filename
tmp=osdfilename.split('__')
objname=tmp[0]
objname=objname.replace('\u', '_')
log.info('fuzzing %s' % objname)
# put a single \0 at the beginning of the file
osd_remote.run(
args=[ 'sudo', 'dd',
'if=/dev/zero',
'of=%s' % os.path.join(data_path, osdfilename),
'bs=1', 'count=1', 'conv=notrunc'
#.........这里部分代码省略.........
开发者ID:dreamhost,项目名称:ceph-qa-suite,代码行数:101,代码来源:scrub_test.py
示例13: task
def task(ctx, config):
"""
Test the dump_stuck command.
The ceph configuration should include::
mon_osd_report_timeout = 90
mon_pg_stuck_threshold = 10
"""
assert config is None, \
'dump_stuck requires no configuration'
assert teuthology.num_instances_of_type(ctx.cluster, 'osd') == 2, \
'dump_stuck requires exactly 2 osds'
timeout = 60
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
manager.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.wait_for_clean(timeout)
check_stuck(
manager,
num_inactive=0,
num_unclean=0,
num_stale=0,
)
num_pgs = manager.get_num_pgs()
manager.mark_out_osd(0)
time.sleep(timeout)
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.wait_for_recovery(timeout)
check_stuck(
manager,
num_inactive=0,
num_unclean=num_pgs,
num_stale=0,
)
manager.mark_in_osd(0)
manager.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.wait_for_clean(timeout)
check_stuck(
manager,
num_inactive=0,
num_unclean=0,
num_stale=0,
)
for id_ in teuthology.all_roles_of_type(ctx.cluster, 'osd'):
manager.kill_osd(id_)
manager.mark_down_osd(id_)
starttime = time.time()
done = False
while not done:
try:
check_stuck(
manager,
num_inactive=0,
num_unclean=0,
num_stale=num_pgs,
)
done = True
except AssertionError:
# wait up to 15 minutes to become stale
if time.time() - starttime > 900:
raise
for id_ in teuthology.all_roles_of_type(ctx.cluster, 'osd'):
manager.revive_osd(id_)
manager.mark_in_osd(id_)
time.sleep(timeout)
manager.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
manager.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
manager.wait_for_clean(timeout)
check_stuck(
manager,
num_inactive=0,
num_unclean=0,
num_stale=0,
)
开发者ID:calebamiles,项目名称:teuthology,代码行数:94,代码来源:dump_stuck.py
示例14: cluster
#.........这里部分代码省略.........
remote=mon0_remote,
path='/tmp/cephtest/ceph.keyring',
)
monmap = teuthology.get_file(
remote=mon0_remote,
path='/tmp/cephtest/monmap',
)
for rem in ctx.cluster.remotes.iterkeys():
# copy mon key and initial monmap
log.info('Sending monmap to node {remote}'.format(remote=rem))
teuthology.write_file(
remote=rem,
path='/tmp/cephtest/ceph.keyring',
data=keyring,
)
teuthology.write_file(
remote=rem,
path='/tmp/cephtest/monmap',
data=monmap,
)
log.info('Setting up mon nodes...')
mons = ctx.cluster.only(teuthology.is_type('mon'))
run.wait(
mons.run(
args=[
'/tmp/cephtest/enable-coredump',
'/tmp/cephtest/binary/usr/local/bin/ceph-coverage',
coverage_dir,
'/tmp/cephtest/binary/usr/local/bin/osdmaptool',
'--clobber',
'--createsimple', '{num:d}'.format(
num=teuthology.num_instances_of_type(ctx.cluster, 'osd'),
),
'/tmp/cephtest/osdmap',
'--pg_bits', '2',
'--pgp_bits', '4',
],
wait=False,
),
)
log.info('Setting up osd nodes...')
osds = ctx.cluster.only(teuthology.is_type('osd'))
for remote, roles_for_host in osds.remotes.iteritems():
for id_ in teuthology.roles_of_type(roles_for_host, 'osd'):
remote.run(
args=[
'/tmp/cephtest/enable-coredump',
'/tmp/cephtest/binary/usr/local/bin/ceph-coverage',
coverage_dir,
'/tmp/cephtest/binary/usr/local/bin/ceph-authtool',
'--create-keyring',
'--gen-key',
'--name=osd.{id}'.format(id=id_),
'/tmp/cephtest/data/osd.{id}.keyring'.format(id=id_),
],
)
log.info('Setting up mds nodes...')
mdss = ctx.cluster.only(teuthology.is_type('mds'))
for remote, roles_for_host in mdss.remotes.iteritems():
for id_ in teuthology.roles_of_type(roles_for_host, 'mds'):
remote.run(
args=[
开发者ID:tv42,项目名称:teuthology,代码行数:67,代码来源:ceph.py
示例15: task
def task(ctx, config):
"""
Execute a radosbench parameter sweep
Puts radosbench in a loop, taking values from the given config at each
iteration. If given, the min and max values below create a range, e.g.
min_replicas=1 and max_replicas=3 implies executing with 1-3 replicas.
Parameters:
clients: [client list]
time: seconds to run (default=120)
sizes: [list of object sizes] (default=[4M])
mode: <write|read|seq> (default=write)
repetitions: execute the same configuration multiple times (default=1)
min_num_replicas: minimum number of replicas to use (default = 3)
max_num_replicas: maximum number of replicas to use (default = 3)
min_num_osds: the minimum number of OSDs in a pool (default=all)
max_num_osds: the maximum number of OSDs in a pool (default=all)
file: name of CSV-formatted output file (default='radosbench.csv')
columns: columns to include (default=all)
- rep: execution number (takes values from 'repetitions')
- num_osd: number of osds for pool
- num_replica: number of replicas
- avg_throughput: throughput
- avg_latency: latency
- stdev_throughput:
- stdev_latency:
Example:
- radsobenchsweep:
columns: [rep, num_osd, num_replica, avg_throughput, stdev_throughput]
"""
log.info('Beginning radosbenchsweep...')
assert isinstance(config, dict), 'expecting dictionary for configuration'
# get and validate config values
# {
# only one client supported for now
if len(config.get('clients', [])) != 1:
raise Exception("Only one client can be specified")
# only write mode
if config.get('mode', 'write') != 'write':
raise Exception("Only 'write' mode supported for now.")
# OSDs
total_osds_in_cluster = teuthology.num_instances_of_type(ctx.cluster, 'osd')
min_num_osds = config.get('min_num_osds', total_osds_in_cluster)
max_num_osds = config.get('max_num_osds', total_osds_in_cluster)
if max_num_osds > total_osds_in_cluster:
raise Exception('max_num_osds cannot be greater than total in cluster')
if min_num_osds < 1:
raise Exception('min_num_osds cannot be less than 1')
if min_num_osds > max_num_osds:
raise Exception('min_num_osds cannot be greater than max_num_osd')
osds = range(0, (total_osds_in_cluster + 1))
# replicas
min_num_replicas = config.get('min_num_replicas', 3)
max_num_replicas = config.get('max_num_replicas', 3)
if min_num_replicas < 1:
raise Exception('min_num_replicas cannot be less than 1')
if min_num_replicas > max_num_replicas:
raise Exception('min_num_replicas cannot be greater than max_replicas')
if max_num_replicas > max_num_osds:
raise Exception('max_num_replicas cannot be greater than max_num_osds')
replicas = range(min_num_replicas, (max_num_replicas + 1))
# object size
sizes = config.get('size', [4 << 20])
# repetitions
reps = range(config.get('repetitions', 1))
# file
fname = config.get('file', 'radosbench.csv')
f = open('{}/{}'.format(ctx.archive, fname), 'w')
f.write(get_csv_header(config) + '\n')
# }
# set default pools size=1 to avoid 'unhealthy' issues
ctx.manager.set_pool_property('data', 'size', 1)
ctx.manager.set_pool_property('metadata', 'size', 1)
ctx.manager.set_pool_property('rbd', 'size', 1)
current_osds_out = 0
# sweep through all parameters
for osds_out, size, replica, rep in product(osds, sizes, replicas, reps):
osds_in = total_osds_in_cluster - osds_out
if osds_in == 0:
# we're done
break
#.........这里部分代码省略.........
开发者ID:Abhishekvrshny,项目名称:ceph,代码行数:101,代码来源:radosbenchsweep.py
示例16: task
def task(ctx, config):
"""
Test [deep] scrub
tasks:
- chef:
- install:
- ceph:
log-whitelist:
- '!= data_digest'
- '!= omap_digest'
- '!= size'
- deep-scrub 0 missing, 1 inconsistent objects
- deep-scrub [0-9]+ errors
- repair 0 missing, 1 inconsistent objects
- repair [0-9]+ errors, [0-9]+ fixed
- shard [0-9]+ missing
- deep-scrub 1 missing, 1 inconsistent objects
- does not match object info size
- attr name mistmatch
- deep-scrub 1 missing, 0 inconsistent objects
- failed to pick suitable auth object
conf:
osd:
osd deep scrub update digest min age: 0
- scrub_test:
"""
if config is None:
config = {}
assert isinstance(config, dict), \
'scrub_test task only accepts a dict for configuration'
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()
num_osds = teuthology.num_instances_of_type(ctx.cluster, 'osd')
log.info('num_osds is %s' % num_osds)
manager = ceph_manager.CephManager(
mon,
ctx=ctx,
logger=log.getChild('ceph_manager'),
)
while len(manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
for i in range(num_osds):
manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'injectargs',
'--', '--osd-objectstore-fuse')
for i in range(num_osds):
manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'flush_pg_stats')
manager.wait_for_clean()
# write some data
p = manager.do_rados(mon, ['-p', 'rbd', 'bench', '--no-cleanup', '1',
'write', '-b', '4096'])
log.info('err is %d' % p.exitstatus)
# wait for some PG to have data that we can mess with
pg, acting = wait_for_victim_pg(manager)
osd = acting[0]
osd_remote, obj_path, obj_name = find_victim_object(ctx, pg, osd)
manager.do_rados(mon, ['-p', 'rbd', 'setomapval', obj_name, 'key', 'val'])
log.info('err is %d' % p.exitstatus)
manager.do_rados(mon, ['-p', 'rbd', 'setomapheader', obj_name, 'hdr'])
log.info('err is %d' % p.exitstatus)
# Update missing digests, requires "osd deep scrub update digest min age: 0"
pgnum = get_pgnum(pg)
manager.do_pg_scrub('rbd', pgnum, 'deep-scrub')
log.info('messing with PG %s on osd %d' % (pg, osd))
test_repair_corrupted_obj(ctx, manager, pg, osd_remote, obj_path, 'rbd')
test_repair_bad_omap(ctx, manager, pg, osd, obj_name)
test_list_inconsistent_obj(ctx, manager, osd_remote, pg, acting, osd,
obj_name, obj_path)
log.info('test successful!')
# shut down fuse mount
for i in range(num_osds):
manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'injectargs',
'--', '--no-osd-objectstore-fuse')
time.sleep(5)
log.info('done')
开发者ID:ApusApp,项目名称:ceph,代码行数:85,代码来源:scrub_test.py
示例17: cluster
#.........这里部分代码省略.........
"osd",
"allow *",
"--cap",
"mds",
"allow *",
keyring_path,
]
)
log.info("Copying monmap to all nodes...")
keyring = teuthology.get_file(remote=mon0_remote, path=keyring_path)
monmap = teuthology.get_file(remote=mon0_remote, path=monmap_path)
for rem in ctx.cluster.remotes.iterkeys():
# copy mon key and initial monmap
log.info("Sending monmap to node {remote}".format(remote=rem))
teuthology.sudo_write_file(remote=rem, path=keyring_path, data=keyring, perms="0644")
teuthology.write_file(remote=rem, path=monmap_path, data=monmap)
log.info("Setting up mon nodes...")
mons = ctx.cluster.only(teuthology.is_type("mon", cluster_name))
osdmap_path = "{tdir}/{cluster}.osdmap".format(tdir=testdir, cluster=cluster_name)
run.wait(
mons.run(
args=[
"adjust-ulimits",
"ceph-coverage",
coverage_dir,
"osdmaptool",
"-c",
conf_path,
"--clobber",
"--createsimple",
"{num:d}".format(num=teuthology.num_instances_of_type(ctx.cluster, "osd", cluster_name)),
osdmap_path,
"--pg_bits",
"2",
"--pgp_bits",
"4",
],
wait=False,
)
)
log.info("Setting up mgr nodes...")
mgrs = ctx.cluster.only(teuthology.is_type("mgr", cluster_name))
for remote, roles_for_host in mgrs.remotes.iteritems():
for role in teuthology.cluster_roles_of_type(roles_for_host, "mgr", cluster_name):
_, _, id_ = teuthology.split_role(role)
mgr_dir = "/var/lib/ceph/mgr/{cluster}-{id}".format(cluster=cluster_name, id=id_)
remote.run(
args=[
"sudo",
"mkdir",
"-p",
mgr_dir,
run.Raw("&&"),
"sudo",
"adjust-ulimits",
"ceph-coverage",
coverage_dir,
"ceph-authtool",
|
请发表评论