]>
git.proxmox.com Git - ceph.git/blob - ceph/qa/tasks/peer.py
2 Peer test (Single test, not much configurable here)
9 from teuthology
import misc
as teuthology
10 from util
.rados
import rados
12 log
= logging
.getLogger(__name__
)
14 def task(ctx
, config
):
20 assert isinstance(config
, dict), \
21 'peer task only accepts a dict for configuration'
22 first_mon
= teuthology
.get_first_mon(ctx
, config
)
23 (mon
,) = ctx
.cluster
.only(first_mon
).remotes
.iterkeys()
25 manager
= ceph_manager
.CephManager(
28 logger
=log
.getChild('ceph_manager'),
31 while len(manager
.get_osd_status()['up']) < 3:
33 manager
.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
34 manager
.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
35 manager
.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
36 manager
.wait_for_clean()
41 osd_recovery_delay_start
=120)
45 manager
.mark_down_osd(2)
47 # kludge to make sure they get a map
48 rados(ctx
, mon
, ['-p', 'data', 'get', 'dummy', '-'])
50 manager
.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
51 manager
.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
52 manager
.wait_for_recovery()
54 # kill another and revive 2, so that some pgs can't peer.
56 manager
.mark_down_osd(1)
58 manager
.wait_till_osd_is_up(2)
60 manager
.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
61 manager
.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
63 manager
.wait_for_active_or_down()
65 manager
.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
66 manager
.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
70 pgs
= manager
.get_pg_stats()
72 out
= manager
.raw_cluster_cmd('pg', pg
['pgid'], 'query')
73 log
.debug("out string %s",out
)
75 log
.info("pg is %s, query json is %s", pg
, j
)
77 if pg
['state'].count('down'):
79 # verify that it is blocked on osd.1
80 rs
= j
['recovery_state']
82 assert rs
[0]['name'] == 'Started/Primary/Peering/Down'
83 assert rs
[1]['name'] == 'Started/Primary/Peering'
84 assert rs
[1]['blocked']
85 assert rs
[1]['down_osds_we_would_probe'] == [1]
86 assert len(rs
[1]['peering_blocked_by']) == 1
87 assert rs
[1]['peering_blocked_by'][0]['osd'] == 1
89 assert num_down_pgs
> 0
93 manager
.wait_till_osd_is_up(1)
94 manager
.raw_cluster_cmd('tell', 'osd.0', 'flush_pg_stats')
95 manager
.raw_cluster_cmd('tell', 'osd.1', 'flush_pg_stats')
96 manager
.raw_cluster_cmd('tell', 'osd.2', 'flush_pg_stats')
97 manager
.wait_for_clean()