3 # Copyright (C) 2017 Red Hat <contact@redhat.com>
5 # Author: David Zafman <dzafman@redhat.com>
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU Library Public License as published by
9 # the Free Software Foundation; either version 2, or (at your option)
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU Library Public License for more details.
18 source $CEPH_ROOT/qa
/standalone
/ceph-helpers.sh
25 export CEPH_MON
="127.0.0.1:7114" # git grep '\<7114\>' : there must be only one
27 CEPH_ARGS
+="--fsid=$(uuidgen) --auth-supported=none "
28 CEPH_ARGS
+="--mon-host=$CEPH_MON "
29 CEPH_ARGS
+="--osd_min_pg_log_entries=5 --osd_max_pg_log_entries=10 "
30 # Use "high_recovery_ops" profile if mclock_scheduler is enabled.
31 CEPH_ARGS
+="--osd-mclock-profile=high_recovery_ops "
36 local funcs
=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
37 for func
in $funcs ; do
38 setup
$dir ||
return 1
39 $func $dir ||
return 1
40 teardown
$dir ||
return 1
44 function below_margin
() {
49 return $
(( $check <= $target && $check >= $target - $margin ?
0 : 1 ))
52 function above_margin
() {
57 return $
(( $check >= $target && $check <= $target + $margin ?
0 : 1 ))
60 FIND_UPACT
='grep "pg[[]${PG}.*backfilling.*update_calc_stats " $log | tail -1 | sed "s/.*[)] \([[][^ p]*\).*$/\1/"'
61 FIND_FIRST
='grep "pg[[]${PG}.*backfilling.*update_calc_stats $which " $log | grep -F " ${UPACT}${addp}" | grep -v est | head -1 | sed "s/.* \([0-9]*\)$/\1/"'
62 FIND_LAST
='grep "pg[[]${PG}.*backfilling.*update_calc_stats $which " $log | tail -1 | sed "s/.* \([0-9]*\)$/\1/"'
69 local degraded_start
=$5
71 local misplaced_start
=$7
72 local misplaced_end
=$8
73 local primary_start
=${9:-}
74 local primary_end
=${10:-}
75 local check_setup
=${11:-true}
77 local log
=$
(grep -l +backfilling
$dir/osd.
$primary.log
)
78 if [ $check_setup = "true" ];
80 local alllogs
=$
(grep -l +backfilling
$dir/osd.
*.log
)
81 if [ "$(echo "$alllogs" | wc -w)" != "1" ];
83 echo "Test setup failure, a single OSD should have performed backfill"
89 if [ "$type" = "erasure" ];
94 UPACT
=$
(eval $FIND_UPACT)
95 [ -n "$UPACT" ] ||
return 1
97 # Check 3rd line at start because of false recovery starts
98 local which="degraded"
99 FIRST
=$
(eval $FIND_FIRST)
100 [ -n "$FIRST" ] ||
return 1
101 below_margin
$FIRST $degraded_start ||
return 1
102 LAST
=$
(eval $FIND_LAST)
103 [ -n "$LAST" ] ||
return 1
104 above_margin
$LAST $degraded_end ||
return 1
106 # Check 3rd line at start because of false recovery starts
108 FIRST
=$
(eval $FIND_FIRST)
109 [ -n "$FIRST" ] ||
return 1
110 below_margin
$FIRST $misplaced_start ||
return 1
111 LAST
=$
(eval $FIND_LAST)
112 [ -n "$LAST" ] ||
return 1
113 above_margin
$LAST $misplaced_end ||
return 1
115 # This is the value of set into MISSING_ON_PRIMARY
116 if [ -n "$primary_start" ];
118 which="shard $primary"
119 FIRST
=$
(eval $FIND_FIRST)
120 [ -n "$FIRST" ] ||
return 1
121 below_margin
$FIRST $primary_start ||
return 1
122 LAST
=$
(eval $FIND_LAST)
123 [ -n "$LAST" ] ||
return 1
124 above_margin
$LAST $primary_end ||
return 1
130 # state: active+undersized+degraded+remapped+backfilling
132 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
133 # 1.0 500 0 1000 0 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-10-27 09:44:23.531466 22'500 26:617 [1,0,2] 1 [1] 1 0'0 2017-10-27 09:43:44.654882 0'0 2017-10-27 09:43:44.654882
134 function TEST_backfill_sizeup
() {
137 run_mon
$dir a ||
return 1
138 run_mgr
$dir x ||
return 1
140 run_osd
$dir 0 ||
return 1
141 run_osd
$dir 1 ||
return 1
142 run_osd
$dir 2 ||
return 1
143 run_osd
$dir 3 ||
return 1
144 run_osd
$dir 4 ||
return 1
145 run_osd
$dir 5 ||
return 1
147 create_pool
$poolname 1 1
148 ceph osd pool
set $poolname size
1 --yes-i-really-mean-it
150 wait_for_clean ||
return 1
152 for i
in $
(seq 1 $objects)
154 rados
-p $poolname put obj
$i /dev
/null
157 ceph osd
set nobackfill
158 ceph osd pool
set $poolname size
3
160 ceph osd
unset nobackfill
162 wait_for_clean ||
return 1
164 local primary
=$
(get_primary
$poolname obj1
)
165 local PG
=$
(get_pg
$poolname obj1
)
167 local degraded
=$
(expr $objects \
* 2)
168 check
$dir $PG $primary replicated
$degraded 0 0 0 ||
return 1
170 delete_pool
$poolname
171 kill_daemons
$dir ||
return 1
179 # state: active+undersized+degraded+remapped+backfilling
181 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
182 # 1.0 500 0 1000 500 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-10-27 09:48:53.326849 22'500 26:603 [0,2,4] 0 [1] 1 0'0 2017-10-27 09:48:13.236253 0'0 2017-10-27 09:48:13.236253
183 function TEST_backfill_sizeup_out
() {
186 run_mon
$dir a ||
return 1
187 run_mgr
$dir x ||
return 1
188 run_osd
$dir 0 ||
return 1
189 run_osd
$dir 1 ||
return 1
190 run_osd
$dir 2 ||
return 1
191 run_osd
$dir 3 ||
return 1
192 run_osd
$dir 4 ||
return 1
193 run_osd
$dir 5 ||
return 1
195 create_pool
$poolname 1 1
196 ceph osd pool
set $poolname size
1 --yes-i-really-mean-it
198 wait_for_clean ||
return 1
200 for i
in $
(seq 1 $objects)
202 rados
-p $poolname put obj
$i /dev
/null
205 local PG
=$
(get_pg
$poolname obj1
)
206 # Remember primary during the backfill
207 local primary
=$
(get_primary
$poolname obj1
)
209 ceph osd
set nobackfill
210 ceph osd out osd.
$primary
211 ceph osd pool
set $poolname size
3
213 ceph osd
unset nobackfill
215 wait_for_clean ||
return 1
217 local degraded
=$
(expr $objects \
* 2)
218 check
$dir $PG $primary replicated
$degraded 0 $objects 0 ||
return 1
220 delete_pool
$poolname
221 kill_daemons
$dir ||
return 1
225 # [1 0] -> [1,2]/[1,0]
227 # state: active+remapped+backfilling
229 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
230 # 1.0 500 0 0 500 0 0 100 100 active+remapped+backfilling 2017-10-27 09:51:18.800517 22'500 25:570 [1,2] 1 [1,0] 1 0'0 2017-10-27 09:50:40.441274 0'0 2017-10-27 09:50:40.441274
231 function TEST_backfill_out
() {
234 run_mon
$dir a ||
return 1
235 run_mgr
$dir x ||
return 1
236 run_osd
$dir 0 ||
return 1
237 run_osd
$dir 1 ||
return 1
238 run_osd
$dir 2 ||
return 1
239 run_osd
$dir 3 ||
return 1
240 run_osd
$dir 4 ||
return 1
241 run_osd
$dir 5 ||
return 1
243 create_pool
$poolname 1 1
244 ceph osd pool
set $poolname size
2
247 wait_for_clean ||
return 1
249 for i
in $
(seq 1 $objects)
251 rados
-p $poolname put obj
$i /dev
/null
254 local PG
=$
(get_pg
$poolname obj1
)
255 # Remember primary during the backfill
256 local primary
=$
(get_primary
$poolname obj1
)
258 ceph osd
set nobackfill
259 ceph osd out osd.$
(get_not_primary
$poolname obj1
)
261 ceph osd
unset nobackfill
263 wait_for_clean ||
return 1
265 check
$dir $PG $primary replicated
0 0 $objects 0 ||
return 1
267 delete_pool
$poolname
268 kill_daemons
$dir ||
return 1
272 # [0, 1] -> [0, 2]/[0]
275 # state: active+undersized+degraded+remapped+backfilling
277 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
278 # 1.0 500 0 500 0 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-10-27 09:53:24.051091 22'500 27:719 [0,2] 0 [0] 0 0'0 2017-10-27 09:52:43.188368 0'0 2017-10-27 09:52:43.188368
279 function TEST_backfill_down_out
() {
282 run_mon
$dir a ||
return 1
283 run_mgr
$dir x ||
return 1
284 run_osd
$dir 0 ||
return 1
285 run_osd
$dir 1 ||
return 1
286 run_osd
$dir 2 ||
return 1
287 run_osd
$dir 3 ||
return 1
288 run_osd
$dir 4 ||
return 1
289 run_osd
$dir 5 ||
return 1
291 create_pool
$poolname 1 1
292 ceph osd pool
set $poolname size
2
295 wait_for_clean ||
return 1
297 for i
in $
(seq 1 $objects)
299 rados
-p $poolname put obj
$i /dev
/null
302 local PG
=$
(get_pg
$poolname obj1
)
303 # Remember primary during the backfill
304 local primary
=$
(get_primary
$poolname obj1
)
305 local otherosd
=$
(get_not_primary
$poolname obj1
)
307 ceph osd
set nobackfill
308 kill $
(cat $dir/osd.
${otherosd}.pid
)
309 ceph osd down osd.
${otherosd}
310 ceph osd out osd.
${otherosd}
312 ceph osd
unset nobackfill
314 wait_for_clean ||
return 1
316 check
$dir $PG $primary replicated
$objects 0 0 0 ||
return 1
318 delete_pool
$poolname
319 kill_daemons
$dir ||
return 1
323 # [1, 0] -> [2, 3, 4]
325 # misplaced 1000 -> 0
326 # state: active+undersized+degraded+remapped+backfilling
328 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
329 # 1.0 500 0 500 1000 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-10-27 09:55:50.375722 23'500 27:553 [2,4,3] 2 [1,0] 1 0'0 2017-10-27 09:55:10.230919 0'0 2017-10-27 09:55:10.230919
330 function TEST_backfill_out2
() {
333 run_mon
$dir a ||
return 1
334 run_mgr
$dir x ||
return 1
335 run_osd
$dir 0 ||
return 1
336 run_osd
$dir 1 ||
return 1
337 run_osd
$dir 2 ||
return 1
338 run_osd
$dir 3 ||
return 1
339 run_osd
$dir 4 ||
return 1
340 run_osd
$dir 5 ||
return 1
342 create_pool
$poolname 1 1
343 ceph osd pool
set $poolname size
2
346 wait_for_clean ||
return 1
348 for i
in $
(seq 1 $objects)
350 rados
-p $poolname put obj
$i /dev
/null
353 local PG
=$
(get_pg
$poolname obj1
)
354 # Remember primary during the backfill
355 local primary
=$
(get_primary
$poolname obj1
)
356 local otherosd
=$
(get_not_primary
$poolname obj1
)
358 ceph osd
set nobackfill
359 ceph osd pool
set $poolname size
3
360 ceph osd out osd.
${otherosd}
361 ceph osd out osd.
${primary}
362 # Primary might change before backfill starts
364 primary
=$
(get_primary
$poolname obj1
)
365 ceph osd
unset nobackfill
366 ceph tell osd.
$primary get_latest_osdmap
367 ceph tell osd.
$primary debug kick_recovery_wq
0
370 wait_for_clean ||
return 1
372 local misplaced
=$
(expr $objects \
* 2)
374 check
$dir $PG $primary replicated
$objects 0 $misplaced 0 ||
return 1
376 delete_pool
$poolname
377 kill_daemons
$dir ||
return 1
381 # [0,1] -> [2,4,3]/[0,1]
383 # misplaced 1000 -> 500
384 # state ends at active+clean+remapped [2,4,3]/[2,4,3,0]
385 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
386 # 1.0 500 0 1000 1000 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-10-30 18:21:45.995149 19'500 23:1817 [2,4,3] 2 [0,1] 0 0'0 2017-10-30 18:21:05.109904 0'0 2017-10-30 18:21:05.109904
388 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
389 # 1.0 500 0 0 500 0 0 5 5 active+clean+remapped 2017-10-30 18:22:42.293730 19'500 25:2557 [2,4,3] 2 [2,4,3,0] 2 0'0 2017-10-30 18:21:05.109904 0'0 2017-10-30 18:21:05.109904
390 function TEST_backfill_sizeup4_allout
() {
393 run_mon
$dir a ||
return 1
394 run_mgr
$dir x ||
return 1
395 run_osd
$dir 0 ||
return 1
396 run_osd
$dir 1 ||
return 1
397 run_osd
$dir 2 ||
return 1
398 run_osd
$dir 3 ||
return 1
399 run_osd
$dir 4 ||
return 1
401 create_pool
$poolname 1 1
402 ceph osd pool
set $poolname size
2
404 wait_for_clean ||
return 1
406 for i
in $
(seq 1 $objects)
408 rados
-p $poolname put obj
$i /dev
/null
411 local PG
=$
(get_pg
$poolname obj1
)
412 # Remember primary during the backfill
413 local primary
=$
(get_primary
$poolname obj1
)
414 local otherosd
=$
(get_not_primary
$poolname obj1
)
416 ceph osd
set nobackfill
417 ceph osd out osd.
$otherosd
418 ceph osd out osd.
$primary
419 ceph osd pool
set $poolname size
4
420 # Primary might change before backfill starts
422 primary
=$
(get_primary
$poolname obj1
)
423 ceph osd
unset nobackfill
424 ceph tell osd.
$primary get_latest_osdmap
425 ceph tell osd.
$primary debug kick_recovery_wq
0
428 wait_for_clean ||
return 1
430 local misdeg
=$
(expr $objects \
* 2)
431 check
$dir $PG $primary replicated
$misdeg 0 $misdeg $objects ||
return 1
433 delete_pool
$poolname
434 kill_daemons
$dir ||
return 1
438 # [1,2,0] -> [3]/[1,2]
439 # misplaced 1000 -> 500
440 # state ends at active+clean+remapped [3]/[3,1]
441 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
442 # 1.0 500 0 0 1000 0 0 100 100 active+remapped+backfilling 2017-11-28 19:13:56.092439 21'500 31:790 [3] 3 [1,2] 1 0'0 2017-11-28 19:13:28.698661 0'0 2017-11-28 19:13:28.698661
443 function TEST_backfill_remapped
() {
446 run_mon
$dir a ||
return 1
447 run_mgr
$dir x ||
return 1
448 run_osd
$dir 0 ||
return 1
449 run_osd
$dir 1 ||
return 1
450 run_osd
$dir 2 ||
return 1
451 run_osd
$dir 3 ||
return 1
453 create_pool
$poolname 1 1
454 ceph osd pool
set $poolname size
3
457 wait_for_clean ||
return 1
459 for i
in $
(seq 1 $objects)
461 rados
-p $poolname put obj
$i /dev
/null
464 local PG
=$
(get_pg
$poolname obj1
)
465 # Remember primary during the backfill
466 local primary
=$
(get_primary
$poolname obj1
)
467 local otherosd
=$
(get_not_primary
$poolname obj1
)
469 ceph osd
set nobackfill
470 ceph osd out osd.
${otherosd}
471 for i
in $
(get_osds
$poolname obj1
)
473 if [ $i = $primary -o $i = $otherosd ];
480 ceph osd out osd.
${primary}
481 ceph osd pool
set $poolname size
2
484 # primary may change due to invalidating the old pg_temp, which was [1,2,0],
485 # but up_primary (3) chooses [0,1] for acting.
486 primary
=$
(get_primary
$poolname obj1
)
488 ceph osd
unset nobackfill
489 ceph tell osd.
$primary get_latest_osdmap
490 ceph tell osd.
$primary debug kick_recovery_wq
0
494 wait_for_clean ||
return 1
496 local misplaced
=$
(expr $objects \
* 2)
498 check
$dir $PG $primary replicated
0 0 $misplaced $objects "" "" false ||
return 1
500 delete_pool
$poolname
501 kill_daemons
$dir ||
return 1
504 # [1,0,2] -> [4,3,NONE]/[1,0,2]
505 # misplaced 1500 -> 500
506 # state ends at active+clean+remapped [4,3,NONE]/[4,3,2]
508 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
509 # 1.0 500 0 0 1500 0 0 100 100 active+degraded+remapped+backfilling 2017-10-31 16:53:39.467126 19'500 23:615 [4,3,NONE] 4 [1,0,2] 1 0'0 2017-10-31 16:52:59.624429 0'0 2017-10-31 16:52:59.624429
514 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
515 # 1.0 500 0 0 500 0 0 5 5 active+clean+remapped 2017-10-31 16:48:34.414040 19'500 25:2049 [4,3,NONE] 4 [4,3,2] 4 0'0 2017-10-31 16:46:58.203440 0'0 2017-10-31 16:46:58.203440
516 function TEST_backfill_ec_all_out
() {
519 run_mon
$dir a ||
return 1
520 run_mgr
$dir x ||
return 1
521 run_osd
$dir 0 ||
return 1
522 run_osd
$dir 1 ||
return 1
523 run_osd
$dir 2 ||
return 1
524 run_osd
$dir 3 ||
return 1
525 run_osd
$dir 4 ||
return 1
527 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
528 create_pool
$poolname 1 1 erasure myprofile
530 wait_for_clean ||
return 1
532 for i
in $
(seq 1 $objects)
534 rados
-p $poolname put obj
$i /dev
/null
537 local PG
=$
(get_pg
$poolname obj1
)
538 # Remember primary during the backfill
539 local primary
=$
(get_primary
$poolname obj1
)
541 ceph osd
set nobackfill
542 for o
in $
(get_osds
$poolname obj1
)
546 # Primary might change before backfill starts
548 primary
=$
(get_primary
$poolname obj1
)
549 ceph osd
unset nobackfill
550 ceph tell osd.
$primary get_latest_osdmap
551 ceph tell osd.
$primary debug kick_recovery_wq
0
554 wait_for_clean ||
return 1
556 local misplaced
=$
(expr $objects \
* 3)
557 check
$dir $PG $primary erasure
0 0 $misplaced $objects ||
return 1
559 delete_pool
$poolname
560 kill_daemons
$dir ||
return 1
564 # [1,0,2] -> [4, 0, 2]
566 # active+remapped+backfilling
568 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
569 # 1.0 500 0 0 500 0 0 100 100 active+remapped+backfilling 2017-11-08 18:05:39.036420 24'500 27:742 [4,0,2] 4 [1,0,2] 1 0'0 2017-11-08 18:04:58.697315 0'0 2017-11-08 18:04:58.697315
570 function TEST_backfill_ec_prim_out
() {
573 run_mon
$dir a ||
return 1
574 run_mgr
$dir x ||
return 1
575 run_osd
$dir 0 ||
return 1
576 run_osd
$dir 1 ||
return 1
577 run_osd
$dir 2 ||
return 1
578 run_osd
$dir 3 ||
return 1
579 run_osd
$dir 4 ||
return 1
581 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
582 create_pool
$poolname 1 1 erasure myprofile
584 wait_for_clean ||
return 1
586 for i
in $
(seq 1 $objects)
588 rados
-p $poolname put obj
$i /dev
/null
591 local PG
=$
(get_pg
$poolname obj1
)
592 # Remember primary during the backfill
593 local primary
=$
(get_primary
$poolname obj1
)
595 ceph osd
set nobackfill
596 ceph osd out osd.
$primary
597 # Primary might change before backfill starts
599 primary
=$
(get_primary
$poolname obj1
)
600 ceph osd
unset nobackfill
601 ceph tell osd.
$primary get_latest_osdmap
602 ceph tell osd.
$primary debug kick_recovery_wq
0
605 wait_for_clean ||
return 1
607 local misplaced
=$
(expr $objects \
* 3)
608 check
$dir $PG $primary erasure
0 0 $objects 0 ||
return 1
610 delete_pool
$poolname
611 kill_daemons
$dir ||
return 1
616 # misplaced 1000 -> 0
618 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
619 # 1.0 500 0 500 1000 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-11-06 14:02:29.439105 24'500 29:1020 [4,3,5] 4 [1,NONE,2] 1 0'0 2017-11-06 14:01:46.509963 0'0 2017-11-06 14:01:46.509963
620 function TEST_backfill_ec_down_all_out
() {
623 run_mon
$dir a ||
return 1
624 run_mgr
$dir x ||
return 1
625 run_osd
$dir 0 ||
return 1
626 run_osd
$dir 1 ||
return 1
627 run_osd
$dir 2 ||
return 1
628 run_osd
$dir 3 ||
return 1
629 run_osd
$dir 4 ||
return 1
630 run_osd
$dir 5 ||
return 1
632 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
633 create_pool
$poolname 1 1 erasure myprofile
634 ceph osd pool
set $poolname min_size
2
636 wait_for_clean ||
return 1
638 for i
in $
(seq 1 $objects)
640 rados
-p $poolname put obj
$i /dev
/null
643 local PG
=$
(get_pg
$poolname obj1
)
644 # Remember primary during the backfill
645 local primary
=$
(get_primary
$poolname obj1
)
646 local otherosd
=$
(get_not_primary
$poolname obj1
)
647 local allosds
=$
(get_osds
$poolname obj1
)
649 ceph osd
set nobackfill
650 kill $
(cat $dir/osd.
${otherosd}.pid
)
651 ceph osd down osd.
${otherosd}
656 # Primary might change before backfill starts
658 primary
=$
(get_primary
$poolname obj1
)
659 ceph osd
unset nobackfill
660 ceph tell osd.
$primary get_latest_osdmap
661 ceph tell osd.
$primary debug kick_recovery_wq
0
665 # Wait for recovery to finish
666 # Can't use wait_for_clean() because state goes from active+undersized+degraded+remapped+backfilling
667 # to active+undersized+remapped
670 if test "$(ceph --format json pg dump pgs |
671 jq '.pg_stats | [.[] | .state | select(. == "incomplete
")] | length')" -ne "0"
679 for i
in $
(seq 1 240)
681 if ceph pg dump pgs |
grep ^
$PG |
grep -qv backfilling
687 echo "Timeout waiting for recovery to finish"
695 local misplaced
=$
(expr $objects \
* 2)
696 check
$dir $PG $primary erasure
$objects 0 $misplaced 0 ||
return 1
698 delete_pool
$poolname
699 kill_daemons
$dir ||
return 1
705 # active+backfilling+degraded
707 # PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP
708 # 1.0 500 0 500 0 0 0 100 100 active+undersized+degraded+remapped+backfilling 2017-11-06 13:57:25.412322 22'500 28:794 [1,3,2] 1 [1,NONE,2] 1 0'0 2017-11-06 13:54:58.033906 0'0 2017-11-06 13:54:58.033906
709 function TEST_backfill_ec_down_out
() {
712 run_mon
$dir a ||
return 1
713 run_mgr
$dir x ||
return 1
714 run_osd
$dir 0 ||
return 1
715 run_osd
$dir 1 ||
return 1
716 run_osd
$dir 2 ||
return 1
717 run_osd
$dir 3 ||
return 1
718 run_osd
$dir 4 ||
return 1
719 run_osd
$dir 5 ||
return 1
721 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
722 create_pool
$poolname 1 1 erasure myprofile
723 ceph osd pool
set $poolname min_size
2
725 wait_for_clean ||
return 1
727 for i
in $
(seq 1 $objects)
729 rados
-p $poolname put obj
$i /dev
/null
732 local PG
=$
(get_pg
$poolname obj1
)
733 # Remember primary during the backfill
734 local primary
=$
(get_primary
$poolname obj1
)
735 local otherosd
=$
(get_not_primary
$poolname obj1
)
737 ceph osd
set nobackfill
738 kill $
(cat $dir/osd.
${otherosd}.pid
)
739 ceph osd down osd.
${otherosd}
740 ceph osd out osd.
${otherosd}
741 # Primary might change before backfill starts
743 primary
=$
(get_primary
$poolname obj1
)
744 ceph osd
unset nobackfill
745 ceph tell osd.
$primary get_latest_osdmap
746 ceph tell osd.
$primary debug kick_recovery_wq
0
749 wait_for_clean ||
return 1
751 local misplaced
=$
(expr $objects \
* 2)
752 check
$dir $PG $primary erasure
$objects 0 0 0 ||
return 1
754 delete_pool
$poolname
755 kill_daemons
$dir ||
return 1
759 main osd-backfill-stats
"$@"
762 # compile-command: "make -j4 && ../qa/run-standalone.sh osd-backfill-stats.sh"