]> git.proxmox.com Git - ceph.git/blame_incremental - ceph/qa/standalone/osd/repro_long_log.sh
bump version to 18.2.2-pve1
[ceph.git] / ceph / qa / standalone / osd / repro_long_log.sh
... / ...
CommitLineData
1#!/usr/bin/env bash
2#
3# Copyright (C) 2014 Cloudwatt <libre.licensing@cloudwatt.com>
4# Copyright (C) 2018 Red Hat <contact@redhat.com>
5#
6# Author: Josh Durgin <jdurgin@redhat.com>
7# Author: David Zafman <dzafman@redhat.com>
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU Library Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU Library Public License for more details.
18#
19
20source $CEPH_ROOT/qa/standalone/ceph-helpers.sh
21
22function run() {
23 local dir=$1
24 shift
25
26 export CEPH_MON="127.0.0.1:7100" # git grep '\<7100\>' : there must be only one
27 export CEPH_ARGS
28 CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none "
29 CEPH_ARGS+="--mon-host=$CEPH_MON "
30
31 local funcs=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
32 for func in $funcs ; do
33 setup $dir || return 1
34 $func $dir || return 1
35 teardown $dir || return 1
36 done
37}
38
39PGID=
40
41function test_log_size()
42{
43 local PGID=$1
44 local EXPECTED=$2
45 local DUPS_EXPECTED=${3:-0}
46 ceph tell osd.\* flush_pg_stats
47 sleep 3
48 ceph pg $PGID query | jq .info.stats.log_size
49 ceph pg $PGID query | jq .info.stats.log_size | grep "${EXPECTED}"
50 ceph pg $PGID query | jq .info.stats.log_dups_size
51 ceph pg $PGID query | jq .info.stats.log_dups_size | grep "${DUPS_EXPECTED}"
52}
53
54function setup_log_test() {
55 local dir=$1
56 local which=$2
57
58 run_mon $dir a || return 1
59 run_mgr $dir x || return 1
60 run_osd $dir 0 || return 1
61 run_osd $dir 1 || return 1
62 run_osd $dir 2 || return 1
63
64 ceph osd pool create test 1 1 || true
65 POOL_ID=$(ceph osd dump --format json | jq '.pools[] | select(.pool_name == "test") | .pool')
66 PGID="${POOL_ID}.0"
67
68 # With 1 PG setting entries per osd 20 results in a target log of 20
69 ceph tell osd.\* injectargs -- --osd_target_pg_log_entries_per_osd 20 || return 1
70 ceph tell osd.\* injectargs -- --osd-min-pg-log-entries 20 || return 1
71 ceph tell osd.\* injectargs -- --osd-max-pg-log-entries 30 || return 1
72 ceph tell osd.\* injectargs -- --osd-pg-log-trim-min 10 || return 1
73 ceph tell osd.\* injectargs -- --osd_pg_log_dups_tracked 20 || return 1
74
75 touch $dir/foo
76 for i in $(seq 1 20)
77 do
78 rados -p test put foo $dir/foo || return 1
79 done
80
81 test_log_size $PGID 20 || return 1
82
83 rados -p test rm foo || return 1
84
85 # generate error entries
86 for i in $(seq 1 20)
87 do
88 rados -p test rm foo
89 done
90
91 # log should have been trimmed down to min_entries with one extra
92 test_log_size $PGID 21 || return 1
93}
94
95function TEST_repro_long_log1()
96{
97 local dir=$1
98
99 setup_log_test $dir || return 1
100 # regular write should trim the log
101 rados -p test put foo $dir/foo || return 1
102 test_log_size $PGID 22 || return 1
103}
104
105function TEST_repro_long_log2()
106{
107 local dir=$1
108
109 setup_log_test $dir || return 1
110 local PRIMARY=$(ceph pg $PGID query | jq '.info.stats.up_primary')
111 kill_daemons $dir TERM osd.$PRIMARY || return 1
112 CEPH_ARGS="--osd-max-pg-log-entries=2 --osd-pg-log-dups-tracked=3 --no-mon-config" ceph-objectstore-tool --data-path $dir/$PRIMARY --pgid $PGID --op trim-pg-log || return 1
113 activate_osd $dir $PRIMARY || return 1
114 wait_for_clean || return 1
115 test_log_size $PGID 21 18 || return 1
116}
117
118function TEST_trim_max_entries()
119{
120 local dir=$1
121
122 setup_log_test $dir || return 1
123
124 ceph tell osd.\* injectargs -- --osd_target_pg_log_entries_per_osd 2 || return 1
125 ceph tell osd.\* injectargs -- --osd-min-pg-log-entries 2
126 ceph tell osd.\* injectargs -- --osd-pg-log-trim-min 2
127 ceph tell osd.\* injectargs -- --osd-pg-log-trim-max 4
128 ceph tell osd.\* injectargs -- --osd_pg_log_dups_tracked 0
129
130 # adding log entries, should only trim 4 and add one each time
131 rados -p test rm foo
132 test_log_size $PGID 18 || return 1
133 rados -p test rm foo
134 test_log_size $PGID 15 || return 1
135 rados -p test rm foo
136 test_log_size $PGID 12 || return 1
137 rados -p test rm foo
138 test_log_size $PGID 9 || return 1
139 rados -p test rm foo
140 test_log_size $PGID 6 || return 1
141 rados -p test rm foo
142 test_log_size $PGID 3 || return 1
143
144 # below trim_min
145 rados -p test rm foo
146 test_log_size $PGID 4 || return 1
147 rados -p test rm foo
148 test_log_size $PGID 3 || return 1
149 rados -p test rm foo
150 test_log_size $PGID 4 || return 1
151 rados -p test rm foo
152 test_log_size $PGID 3 || return 1
153}
154
155function TEST_trim_max_entries_with_dups()
156{
157 local dir=$1
158
159 setup_log_test $dir || return 1
160
161 ceph tell osd.\* injectargs -- --osd_target_pg_log_entries_per_osd 2 || return 1
162 ceph tell osd.\* injectargs -- --osd-min-pg-log-entries 2
163 ceph tell osd.\* injectargs -- --osd-pg-log-trim-min 2
164 ceph tell osd.\* injectargs -- --osd-pg-log-trim-max 4
165 ceph tell osd.\* injectargs -- --osd_pg_log_dups_tracked 20 || return 1
166
167 # adding log entries, should only trim 4 and add one each time
168 # dups should be trimmed to 1
169 rados -p test rm foo
170 test_log_size $PGID 18 2 || return 1
171 rados -p test rm foo
172 test_log_size $PGID 15 6 || return 1
173 rados -p test rm foo
174 test_log_size $PGID 12 10 || return 1
175 rados -p test rm foo
176 test_log_size $PGID 9 14 || return 1
177 rados -p test rm foo
178 test_log_size $PGID 6 18 || return 1
179 rados -p test rm foo
180 test_log_size $PGID 3 20 || return 1
181
182 # below trim_min
183 rados -p test rm foo
184 test_log_size $PGID 4 20 || return 1
185 rados -p test rm foo
186 test_log_size $PGID 3 20 || return 1
187 rados -p test rm foo
188 test_log_size $PGID 4 20 || return 1
189 rados -p test rm foo
190 test_log_size $PGID 3 20 || return 1
191}
192
193main repro-long-log "$@"
194
195# Local Variables:
196# compile-command: "cd ../.. ; make -j4 && ../qa/run-standalone.sh repro_long_log.sh"
197# End: