summaryrefslogtreecommitdiffstats
path: root/tests/basic/fop-sampling.t
blob: a1b3edc3d5dd378c2851dd39dcecb3e75272e062 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#!/bin/bash
#

. $(dirname $0)/../include.rc
. $(dirname $0)/../nfs.rc
. $(dirname $0)/../volume.rc

BRICK_SAMPLES="$(gluster --print-logdir)/samples/glusterfsd__d_backends_${V0}0.samp"
NFS_SAMPLES="$(gluster --print-logdir)/samples/glusterfs_nfsd_${V0}.samp"
FUSE_SAMPLES="/var/log/glusterfs/samples/glusterfs_${V0}.samp"

function check_path {
        op=$1
        path=$2
        file=$3
        grep $op $file | awk -F, '{print $12}' | grep $path 2>&1 > /dev/null
        if [ $? -eq 0 ]; then
          echo "Y"
        else
          echo "N"
        fi
}

function print_cnt() {
  local FOP_TYPE=$1
  local SAMP_FILE=$2
  local FOP_CNT=$(grep ,${FOP_TYPE} ${SAMP_FILE} | wc -l)
  echo $FOP_CNT
}

# Verify we got non-zero counts for stats/lookup/readdir
check_samples() {
        STAT_CNT=$(print_cnt STAT $BRICK_SAMPLES)
        if [ "$STAT_CNT" -le "0" ]; then
                echo "STAT count is zero"
                return
        fi

        LOOKUP_CNT=$(print_cnt LOOKUP $BRICK_SAMPLES)
        if [ "$LOOKUP_CNT" -le "0" ]; then
                echo "LOOKUP count is zero"
                return
        fi

        READDIR_CNT=$(print_cnt READDIR $BRICK_SAMPLES)
        if [ "$READDIR_CNT" -le "0" ]; then
                echo "READDIR count is zero"
                return
        fi

        echo "OK"
}

cleanup;
TEST glusterd
TEST pidof glusterd
TEST $CLI volume create $V0 replica 3 $H0:$B0/${V0}{0,1,2}
TEST $CLI volume set $V0 nfs.disable off
TEST $CLI volume set $V0 diagnostics.latency-measurement on
TEST $CLI volume set $V0 diagnostics.count-fop-hits on
TEST $CLI volume set $V0 diagnostics.stats-dump-interval 5
TEST $CLI volume set $V0 diagnostics.fop-sample-buf-size 65535
TEST $CLI volume set $V0 diagnostics.fop-sample-interval 1
TEST $CLI volume set $V0 diagnostics.stats-dnscache-ttl-sec 3600
TEST $CLI volume start $V0

>${NFS_SAMPLES}
>${BRICK_SAMPLES}
>${FUSE_SAMPLES}

#################
# Basic Samples #
#################

TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0

for i in {1..5}
do
        dd if=/dev/zero of=${M0}/testfile$i bs=4k count=1
        rm ${M0}/testfile$i
done

TEST ls -l $M0
EXPECT_WITHIN 6 "OK" check_samples
sleep 2

################################
# Paths in the samples #
################################

TEST mount_nfs $H0:$V0 $N0

>$FUSE_SAMPLES

for dir in "$N0" "$M0"; do
  ls $dir &> /dev/null
  touch $dir/file1
  stat $dir/file1 &> /dev/null
  echo "some data" > $dir/file1
  dd if=/dev/zero of=$dir/file2 bs=1M count=10 conv=fsync
  dd if=/dev/zero of=$dir/file1 bs=1M count=1
  cat $dir/file2 &> /dev/null
  mkdir -p $dir/dir1
  rmdir $dir/dir1
  rm $dir/file1
  rm $dir/file2
done;

read -p "Continue? " nothing

EXPECT_WITHIN 10 "Y" check_path CREATE /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path LOOKUP /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path SETATTR /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path WRITE /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path FINODELK /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path ENTRYLK / $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path FLUSH /file2 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path TRUNCATE /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path MKDIR /dir1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path RMDIR /dir1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path UNLINK /file1 $BRICK_SAMPLES
EXPECT_WITHIN 10 "Y" check_path UNLINK /file2 $BRICK_SAMPLES


EXPECT_WITHIN 10 "Y" check_path CREATE /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path LOOKUP /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path ACCESS /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path SETATTR /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path WRITE /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path FLUSH /file2 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path ACCESS /file2 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path READ /file2 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path TRUNCATE /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path MKDIR /dir1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path RMDIR /dir1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path UNLINK /file1 $NFS_SAMPLES
EXPECT_WITHIN 10 "Y" check_path UNLINK /file2 $NFS_SAMPLES


EXPECT_WITHIN 10 "Y" check_path CREATE /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path LOOKUP /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path OPEN /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path SETATTR /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path WRITE /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path FLUSH /file2 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path FSYNC /file2 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path OPEN /file2 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path READ /file2 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path TRUNCATE /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path MKDIR /dir1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path RMDIR /dir1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path UNLINK /file1 $FUSE_SAMPLES
EXPECT_WITHIN 10 "Y" check_path UNLINK /file2 $FUSE_SAMPLES

######################
# Errors in samples  #
#####################

# With a very low sample rate, we should still audit creates & unlinks 1:1
TEST $CLI volume set $V0 diagnostics.fop-sample-interval 1000
TEST $CLI volume set $V0 diagnostics.fop-sample-enable-audit on

>${NFS_SAMPLES}
>${BRICK_SAMPLES}
>${FUSE_SAMPLES}

mkdir -pv $M0/1/2/3/4
touch $M0/1/2/3/4/{a,b,c}
dd if=/dev/zero of=$M0/1/2/3/4/d bs=1k count=10
dd if=/dev/zero of=$M0/1/2/3/4/d bs=1M count=10
rm -rfv $M0/*
sleep 6

TEST grep "MKDIR.*/1/2/3/4" $FUSE_SAMPLES
TEST grep "CREATE.*/1/2/3/4" $FUSE_SAMPLES
TEST grep "RMDIR.*/1/2" $FUSE_SAMPLES
TEST grep "UNLINK.*/1/2/3/4/a" $FUSE_SAMPLES
TEST grep "TRUNCATE.*/1/2/3/4/d" $FUSE_SAMPLES

TEST [ $(print_cnt MKDIR $FUSE_SAMPLES) -eq "4" ]
TEST [ $(print_cnt CREATE $FUSE_SAMPLES) -eq "4" ]
TEST [ $(print_cnt RMDIR $FUSE_SAMPLES) -eq "4" ]
TEST [ $(print_cnt UNLINK $FUSE_SAMPLES) -eq "4" ]
TEST [ $(print_cnt TRUNCATE $FUSE_SAMPLES) -eq "1" ]

cleanup;