]> git.proxmox.com Git - ceph.git/blame - ceph/qa/workunits/fs/misc/rstats.sh
import 15.2.0 Octopus source
[ceph.git] / ceph / qa / workunits / fs / misc / rstats.sh
CommitLineData
28e407b8
AA
1#!/usr/bin/env bash
2
3set -x
4
5timeout=30
6old_value=""
7new_value=""
8
9wait_until_changed() {
10 name=$1
11 wait=0
12 while [ $wait -lt $timeout ]; do
13 new_value=`getfattr --only-value -n ceph.dir.$name .`
14 [ $new_value == $old_value ] || return 0
15 sleep 1
16 wait=$(($wait + 1))
17 done
18 return 1
19}
20
21check_rctime() {
22 old_sec=$(echo $old_value | cut -d. -f1)
23 old_nsec=$(echo $old_value | cut -d. -f2)
24 new_sec=$(echo $new_value | cut -d. -f1)
25 new_nsec=$(echo $new_value | cut -d. -f2)
26 [ "$old_sec" -lt "$new_sec" ] && return 0
27 [ "$old_sec" -gt "$new_sec" ] && return 1
28 [ "$old_nsec" -lt "$new_nsec" ] && return 0
29 return 1
30}
31
32# sync(3) does not make ceph-fuse flush dirty caps, because fuse kernel module
33# does not notify ceph-fuse about it. Use fsync(3) instead.
34fsync_path() {
35 cmd="import os; fd=os.open(\"$1\", os.O_RDONLY); os.fsync(fd); os.close(fd)"
9f95a23c 36 python3 -c "$cmd"
28e407b8
AA
37}
38
39set -e
40
41mkdir -p rstats_testdir/d1/d2
42cd rstats_testdir
43
44# rfiles
45old_value=`getfattr --only-value -n ceph.dir.rfiles .`
46[ $old_value == 0 ] || false
47touch d1/d2/f1
48wait_until_changed rfiles
49[ $new_value == $(($old_value + 1)) ] || false
50
51# rsubdirs
52old_value=`getfattr --only-value -n ceph.dir.rsubdirs .`
53[ $old_value == 3 ] || false
54mkdir d1/d2/d3
55wait_until_changed rsubdirs
56[ $new_value == $(($old_value + 1)) ] || false
57
58# rbytes
59old_value=`getfattr --only-value -n ceph.dir.rbytes .`
60[ $old_value == 0 ] || false
61echo hello > d1/d2/f2
62fsync_path d1/d2/f2
63wait_until_changed rbytes
64[ $new_value == $(($old_value + 6)) ] || false
65
66#rctime
67old_value=`getfattr --only-value -n ceph.dir.rctime .`
68touch d1/d2/d3 # touch existing file
69fsync_path d1/d2/d3
70wait_until_changed rctime
71check_rctime
72
73old_value=`getfattr --only-value -n ceph.dir.rctime .`
74touch d1/d2/f3 # create new file
75wait_until_changed rctime
76check_rctime
77
78cd ..
79rm -rf rstats_testdir
80echo OK