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 "
34 local funcs
=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
35 for func
in $funcs ; do
36 setup
$dir ||
return 1
37 $func $dir ||
return 1
38 teardown
$dir ||
return 1
42 function below_margin
() {
47 return $
(( $check <= $target && $check >= $target - $margin ?
0 : 1 ))
50 function above_margin
() {
55 return $
(( $check >= $target && $check <= $target + $margin ?
0 : 1 ))
58 FIND_UPACT
='grep "pg[[]${PG}.*backfilling.*update_calc_stats " $log | tail -1 | sed "s/.*[)] \([[][^ p]*\).*$/\1/"'
59 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/"'
60 FIND_LAST
='grep "pg[[]${PG}.*backfilling.*update_calc_stats $which " $log | tail -1 | sed "s/.* \([0-9]*\)$/\1/"'
67 local degraded_start
=$5
69 local misplaced_start
=$7
70 local misplaced_end
=$8
71 local primary_start
=${9:-}
72 local primary_end
=${10:-}
73 local check_setup
=${11:-true}
75 local log
=$
(grep -l +backfilling
$dir/osd.
$primary.log
)
76 if [ $check_setup = "true" ];
78 local alllogs
=$
(grep -l +backfilling
$dir/osd.
*.log
)
79 if [ "$(echo "$alllogs" | wc -w)" != "1" ];
81 echo "Test setup failure, a single OSD should have performed backfill"
87 if [ "$type" = "erasure" ];
92 UPACT
=$
(eval $FIND_UPACT)
93 [ -n "$UPACT" ] ||
return 1
95 # Check 3rd line at start because of false recovery starts
96 local which="degraded"
97 FIRST
=$
(eval $FIND_FIRST)
98 [ -n "$FIRST" ] ||
return 1
99 below_margin
$FIRST $degraded_start ||
return 1
100 LAST
=$
(eval $FIND_LAST)
101 [ -n "$LAST" ] ||
return 1
102 above_margin
$LAST $degraded_end ||
return 1
104 # Check 3rd line at start because of false recovery starts
106 FIRST
=$
(eval $FIND_FIRST)
107 [ -n "$FIRST" ] ||
return 1
108 below_margin
$FIRST $misplaced_start ||
return 1
109 LAST
=$
(eval $FIND_LAST)
110 [ -n "$LAST" ] ||
return 1
111 above_margin
$LAST $misplaced_end ||
return 1
113 # This is the value of set into MISSING_ON_PRIMARY
114 if [ -n "$primary_start" ];
116 which="shard $primary"
117 FIRST
=$
(eval $FIND_FIRST)
118 [ -n "$FIRST" ] ||
return 1
119 below_margin
$FIRST $primary_start ||
return 1
120 LAST
=$
(eval $FIND_LAST)
121 [ -n "$LAST" ] ||
return 1
122 above_margin
$LAST $primary_end ||
return 1
128 # state: active+undersized+degraded+remapped+backfilling
130 # 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
131 # 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
132 function TEST_backfill_sizeup
() {
135 run_mon
$dir a ||
return 1
136 run_mgr
$dir x ||
return 1
138 run_osd
$dir 0 ||
return 1
139 run_osd
$dir 1 ||
return 1
140 run_osd
$dir 2 ||
return 1
141 run_osd
$dir 3 ||
return 1
142 run_osd
$dir 4 ||
return 1
143 run_osd
$dir 5 ||
return 1
145 create_pool
$poolname 1 1
146 ceph osd pool
set $poolname size
1
148 wait_for_clean ||
return 1
150 for i
in $
(seq 1 $objects)
152 rados
-p $poolname put obj
$i /dev
/null
155 ceph osd
set nobackfill
156 ceph osd pool
set $poolname size
3
158 ceph osd
unset nobackfill
160 wait_for_clean ||
return 1
162 local primary
=$
(get_primary
$poolname obj1
)
163 local PG
=$
(get_pg
$poolname obj1
)
165 local degraded
=$
(expr $objects \
* 2)
166 check
$dir $PG $primary replicated
$degraded 0 0 0 ||
return 1
168 delete_pool
$poolname
169 kill_daemons
$dir ||
return 1
177 # state: active+undersized+degraded+remapped+backfilling
179 # 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
180 # 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
181 function TEST_backfill_sizeup_out
() {
184 run_mon
$dir a ||
return 1
185 run_mgr
$dir x ||
return 1
186 run_osd
$dir 0 ||
return 1
187 run_osd
$dir 1 ||
return 1
188 run_osd
$dir 2 ||
return 1
189 run_osd
$dir 3 ||
return 1
190 run_osd
$dir 4 ||
return 1
191 run_osd
$dir 5 ||
return 1
193 create_pool
$poolname 1 1
194 ceph osd pool
set $poolname size
1
196 wait_for_clean ||
return 1
198 for i
in $
(seq 1 $objects)
200 rados
-p $poolname put obj
$i /dev
/null
203 local PG
=$
(get_pg
$poolname obj1
)
204 # Remember primary during the backfill
205 local primary
=$
(get_primary
$poolname obj1
)
207 ceph osd
set nobackfill
208 ceph osd out osd.
$primary
209 ceph osd pool
set $poolname size
3
211 ceph osd
unset nobackfill
213 wait_for_clean ||
return 1
215 local degraded
=$
(expr $objects \
* 2)
216 check
$dir $PG $primary replicated
$degraded 0 $objects 0 ||
return 1
218 delete_pool
$poolname
219 kill_daemons
$dir ||
return 1
223 # [1 0] -> [1,2]/[1,0]
225 # state: active+remapped+backfilling
227 # 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
228 # 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
229 function TEST_backfill_out
() {
232 run_mon
$dir a ||
return 1
233 run_mgr
$dir x ||
return 1
234 run_osd
$dir 0 ||
return 1
235 run_osd
$dir 1 ||
return 1
236 run_osd
$dir 2 ||
return 1
237 run_osd
$dir 3 ||
return 1
238 run_osd
$dir 4 ||
return 1
239 run_osd
$dir 5 ||
return 1
241 create_pool
$poolname 1 1
242 ceph osd pool
set $poolname size
2
245 wait_for_clean ||
return 1
247 for i
in $
(seq 1 $objects)
249 rados
-p $poolname put obj
$i /dev
/null
252 local PG
=$
(get_pg
$poolname obj1
)
253 # Remember primary during the backfill
254 local primary
=$
(get_primary
$poolname obj1
)
256 ceph osd
set nobackfill
257 ceph osd out osd.$
(get_not_primary
$poolname obj1
)
259 ceph osd
unset nobackfill
261 wait_for_clean ||
return 1
263 check
$dir $PG $primary replicated
0 0 $objects 0 ||
return 1
265 delete_pool
$poolname
266 kill_daemons
$dir ||
return 1
270 # [0, 1] -> [0, 2]/[0]
273 # state: active+undersized+degraded+remapped+backfilling
275 # 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
276 # 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
277 function TEST_backfill_down_out
() {
280 run_mon
$dir a ||
return 1
281 run_mgr
$dir x ||
return 1
282 run_osd
$dir 0 ||
return 1
283 run_osd
$dir 1 ||
return 1
284 run_osd
$dir 2 ||
return 1
285 run_osd
$dir 3 ||
return 1
286 run_osd
$dir 4 ||
return 1
287 run_osd
$dir 5 ||
return 1
289 create_pool
$poolname 1 1
290 ceph osd pool
set $poolname size
2
293 wait_for_clean ||
return 1
295 for i
in $
(seq 1 $objects)
297 rados
-p $poolname put obj
$i /dev
/null
300 local PG
=$
(get_pg
$poolname obj1
)
301 # Remember primary during the backfill
302 local primary
=$
(get_primary
$poolname obj1
)
303 local otherosd
=$
(get_not_primary
$poolname obj1
)
305 ceph osd
set nobackfill
306 kill $
(cat $dir/osd.
${otherosd}.pid
)
307 ceph osd down osd.
${otherosd}
308 ceph osd out osd.
${otherosd}
310 ceph osd
unset nobackfill
312 wait_for_clean ||
return 1
314 check
$dir $PG $primary replicated
$objects 0 0 0 ||
return 1
316 delete_pool
$poolname
317 kill_daemons
$dir ||
return 1
321 # [1, 0] -> [2, 3, 4]
323 # misplaced 1000 -> 0
324 # state: active+undersized+degraded+remapped+backfilling
326 # 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
327 # 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
328 function TEST_backfill_out2
() {
331 run_mon
$dir a ||
return 1
332 run_mgr
$dir x ||
return 1
333 run_osd
$dir 0 ||
return 1
334 run_osd
$dir 1 ||
return 1
335 run_osd
$dir 2 ||
return 1
336 run_osd
$dir 3 ||
return 1
337 run_osd
$dir 4 ||
return 1
338 run_osd
$dir 5 ||
return 1
340 create_pool
$poolname 1 1
341 ceph osd pool
set $poolname size
2
344 wait_for_clean ||
return 1
346 for i
in $
(seq 1 $objects)
348 rados
-p $poolname put obj
$i /dev
/null
351 local PG
=$
(get_pg
$poolname obj1
)
352 # Remember primary during the backfill
353 local primary
=$
(get_primary
$poolname obj1
)
354 local otherosd
=$
(get_not_primary
$poolname obj1
)
356 ceph osd
set nobackfill
357 ceph osd pool
set $poolname size
3
358 ceph osd out osd.
${otherosd}
359 ceph osd out osd.
${primary}
360 # Primary might change before backfill starts
362 primary
=$
(get_primary
$poolname obj1
)
363 ceph osd
unset nobackfill
364 ceph tell osd.
$primary get_latest_osdmap
365 ceph tell osd.
$primary debug kick_recovery_wq
0
368 wait_for_clean ||
return 1
370 local misplaced
=$
(expr $objects \
* 2)
372 check
$dir $PG $primary replicated
$objects 0 $misplaced 0 ||
return 1
374 delete_pool
$poolname
375 kill_daemons
$dir ||
return 1
379 # [0,1] -> [2,4,3]/[0,1]
381 # misplaced 1000 -> 500
382 # state ends at active+clean+remapped [2,4,3]/[2,4,3,0]
383 # 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
384 # 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
386 # 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
387 # 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
388 function TEST_backfill_sizeup4_allout
() {
391 run_mon
$dir a ||
return 1
392 run_mgr
$dir x ||
return 1
393 run_osd
$dir 0 ||
return 1
394 run_osd
$dir 1 ||
return 1
395 run_osd
$dir 2 ||
return 1
396 run_osd
$dir 3 ||
return 1
397 run_osd
$dir 4 ||
return 1
399 create_pool
$poolname 1 1
400 ceph osd pool
set $poolname size
2
402 wait_for_clean ||
return 1
404 for i
in $
(seq 1 $objects)
406 rados
-p $poolname put obj
$i /dev
/null
409 local PG
=$
(get_pg
$poolname obj1
)
410 # Remember primary during the backfill
411 local primary
=$
(get_primary
$poolname obj1
)
412 local otherosd
=$
(get_not_primary
$poolname obj1
)
414 ceph osd
set nobackfill
415 ceph osd out osd.
$otherosd
416 ceph osd out osd.
$primary
417 ceph osd pool
set $poolname size
4
418 # Primary might change before backfill starts
420 primary
=$
(get_primary
$poolname obj1
)
421 ceph osd
unset nobackfill
422 ceph tell osd.
$primary get_latest_osdmap
423 ceph tell osd.
$primary debug kick_recovery_wq
0
426 wait_for_clean ||
return 1
428 local misdeg
=$
(expr $objects \
* 2)
429 check
$dir $PG $primary replicated
$misdeg 0 $misdeg $objects ||
return 1
431 delete_pool
$poolname
432 kill_daemons
$dir ||
return 1
436 # [1,2,0] -> [3]/[1,2]
437 # misplaced 1000 -> 500
438 # state ends at active+clean+remapped [3]/[3,1]
439 # 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
440 # 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
441 function TEST_backfill_remapped
() {
444 run_mon
$dir a ||
return 1
445 run_mgr
$dir x ||
return 1
446 run_osd
$dir 0 ||
return 1
447 run_osd
$dir 1 ||
return 1
448 run_osd
$dir 2 ||
return 1
449 run_osd
$dir 3 ||
return 1
451 create_pool
$poolname 1 1
452 ceph osd pool
set $poolname size
3
455 wait_for_clean ||
return 1
457 for i
in $
(seq 1 $objects)
459 rados
-p $poolname put obj
$i /dev
/null
462 local PG
=$
(get_pg
$poolname obj1
)
463 # Remember primary during the backfill
464 local primary
=$
(get_primary
$poolname obj1
)
465 local otherosd
=$
(get_not_primary
$poolname obj1
)
467 ceph osd
set nobackfill
468 ceph osd out osd.
${otherosd}
469 for i
in $
(get_osds
$poolname obj1
)
471 if [ $i = $primary -o $i = $otherosd ];
478 ceph osd out osd.
${primary}
479 ceph osd pool
set $poolname size
2
482 # primary may change due to invalidating the old pg_temp, which was [1,2,0],
483 # but up_primary (3) chooses [0,1] for acting.
484 primary
=$
(get_primary
$poolname obj1
)
486 ceph osd
unset nobackfill
487 ceph tell osd.
$primary get_latest_osdmap
488 ceph tell osd.
$primary debug kick_recovery_wq
0
492 wait_for_clean ||
return 1
494 local misplaced
=$
(expr $objects \
* 2)
496 check
$dir $PG $primary replicated
0 0 $misplaced $objects "" "" false ||
return 1
498 delete_pool
$poolname
499 kill_daemons
$dir ||
return 1
502 # [1,0,2] -> [4,3,NONE]/[1,0,2]
503 # misplaced 1500 -> 500
504 # state ends at active+clean+remapped [4,3,NONE]/[4,3,2]
506 # 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
507 # 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
512 # 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
513 # 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
514 function TEST_backfill_ec_all_out
() {
517 run_mon
$dir a ||
return 1
518 run_mgr
$dir x ||
return 1
519 run_osd
$dir 0 ||
return 1
520 run_osd
$dir 1 ||
return 1
521 run_osd
$dir 2 ||
return 1
522 run_osd
$dir 3 ||
return 1
523 run_osd
$dir 4 ||
return 1
525 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
526 create_pool
$poolname 1 1 erasure myprofile
528 wait_for_clean ||
return 1
530 for i
in $
(seq 1 $objects)
532 rados
-p $poolname put obj
$i /dev
/null
535 local PG
=$
(get_pg
$poolname obj1
)
536 # Remember primary during the backfill
537 local primary
=$
(get_primary
$poolname obj1
)
539 ceph osd
set nobackfill
540 for o
in $
(get_osds
$poolname obj1
)
544 # Primary might change before backfill starts
546 primary
=$
(get_primary
$poolname obj1
)
547 ceph osd
unset nobackfill
548 ceph tell osd.
$primary get_latest_osdmap
549 ceph tell osd.
$primary debug kick_recovery_wq
0
552 wait_for_clean ||
return 1
554 local misplaced
=$
(expr $objects \
* 3)
555 check
$dir $PG $primary erasure
0 0 $misplaced $objects ||
return 1
557 delete_pool
$poolname
558 kill_daemons
$dir ||
return 1
562 # [1,0,2] -> [4, 0, 2]
564 # active+remapped+backfilling
566 # 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
567 # 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
568 function TEST_backfill_ec_prim_out
() {
571 run_mon
$dir a ||
return 1
572 run_mgr
$dir x ||
return 1
573 run_osd
$dir 0 ||
return 1
574 run_osd
$dir 1 ||
return 1
575 run_osd
$dir 2 ||
return 1
576 run_osd
$dir 3 ||
return 1
577 run_osd
$dir 4 ||
return 1
579 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
580 create_pool
$poolname 1 1 erasure myprofile
582 wait_for_clean ||
return 1
584 for i
in $
(seq 1 $objects)
586 rados
-p $poolname put obj
$i /dev
/null
589 local PG
=$
(get_pg
$poolname obj1
)
590 # Remember primary during the backfill
591 local primary
=$
(get_primary
$poolname obj1
)
593 ceph osd
set nobackfill
594 ceph osd out osd.
$primary
595 # Primary might change before backfill starts
597 primary
=$
(get_primary
$poolname obj1
)
598 ceph osd
unset nobackfill
599 ceph tell osd.
$primary get_latest_osdmap
600 ceph tell osd.
$primary debug kick_recovery_wq
0
603 wait_for_clean ||
return 1
605 local misplaced
=$
(expr $objects \
* 3)
606 check
$dir $PG $primary erasure
0 0 $objects 0 ||
return 1
608 delete_pool
$poolname
609 kill_daemons
$dir ||
return 1
614 # misplaced 1000 -> 0
616 # 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
617 # 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
618 function TEST_backfill_ec_down_all_out
() {
621 run_mon
$dir a ||
return 1
622 run_mgr
$dir x ||
return 1
623 run_osd
$dir 0 ||
return 1
624 run_osd
$dir 1 ||
return 1
625 run_osd
$dir 2 ||
return 1
626 run_osd
$dir 3 ||
return 1
627 run_osd
$dir 4 ||
return 1
628 run_osd
$dir 5 ||
return 1
630 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
631 create_pool
$poolname 1 1 erasure myprofile
632 ceph osd pool
set $poolname min_size
2
634 wait_for_clean ||
return 1
636 for i
in $
(seq 1 $objects)
638 rados
-p $poolname put obj
$i /dev
/null
641 local PG
=$
(get_pg
$poolname obj1
)
642 # Remember primary during the backfill
643 local primary
=$
(get_primary
$poolname obj1
)
644 local otherosd
=$
(get_not_primary
$poolname obj1
)
645 local allosds
=$
(get_osds
$poolname obj1
)
647 ceph osd
set nobackfill
648 kill $
(cat $dir/osd.
${otherosd}.pid
)
649 ceph osd down osd.
${otherosd}
654 # Primary might change before backfill starts
656 primary
=$
(get_primary
$poolname obj1
)
657 ceph osd
unset nobackfill
658 ceph tell osd.
$primary get_latest_osdmap
659 ceph tell osd.
$primary debug kick_recovery_wq
0
663 # Wait for recovery to finish
664 # Can't use wait_for_clean() because state goes from active+undersized+degraded+remapped+backfilling
665 # to active+undersized+remapped
668 if test "$(ceph --format json pg dump pgs |
669 jq '.pg_stats | [.[] | .state | select(. == "incomplete
")] | length')" -ne "0"
679 if ceph pg dump pgs |
grep ^
$PG |
grep -qv backfilling
685 echo "Timeout waiting for recovery to finish"
693 local misplaced
=$
(expr $objects \
* 2)
694 check
$dir $PG $primary erasure
$objects 0 $misplaced 0 ||
return 1
696 delete_pool
$poolname
697 kill_daemons
$dir ||
return 1
703 # active+backfilling+degraded
705 # 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
706 # 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
707 function TEST_backfill_ec_down_out
() {
710 run_mon
$dir a ||
return 1
711 run_mgr
$dir x ||
return 1
712 run_osd
$dir 0 ||
return 1
713 run_osd
$dir 1 ||
return 1
714 run_osd
$dir 2 ||
return 1
715 run_osd
$dir 3 ||
return 1
716 run_osd
$dir 4 ||
return 1
717 run_osd
$dir 5 ||
return 1
719 ceph osd erasure-code-profile
set myprofile plugin
=jerasure technique
=reed_sol_van k
=2 m
=1 crush-failure-domain
=osd
720 create_pool
$poolname 1 1 erasure myprofile
721 ceph osd pool
set $poolname min_size
2
723 wait_for_clean ||
return 1
725 for i
in $
(seq 1 $objects)
727 rados
-p $poolname put obj
$i /dev
/null
730 local PG
=$
(get_pg
$poolname obj1
)
731 # Remember primary during the backfill
732 local primary
=$
(get_primary
$poolname obj1
)
733 local otherosd
=$
(get_not_primary
$poolname obj1
)
735 ceph osd
set nobackfill
736 kill $
(cat $dir/osd.
${otherosd}.pid
)
737 ceph osd down osd.
${otherosd}
738 ceph osd out osd.
${otherosd}
739 # Primary might change before backfill starts
741 primary
=$
(get_primary
$poolname obj1
)
742 ceph osd
unset nobackfill
743 ceph tell osd.
$primary get_latest_osdmap
744 ceph tell osd.
$primary debug kick_recovery_wq
0
747 wait_for_clean ||
return 1
749 local misplaced
=$
(expr $objects \
* 2)
750 check
$dir $PG $primary erasure
$objects 0 0 0 ||
return 1
752 delete_pool
$poolname
753 kill_daemons
$dir ||
return 1
757 main osd-backfill-stats
"$@"
760 # compile-command: "make -j4 && ../qa/run-standalone.sh osd-backfill-stats.sh"