]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa: add mds_dir_max_entries workunit test case 44512/head
authorYongseok Oh <yongseok.oh@linecorp.com>
Fri, 24 Sep 2021 10:30:23 +0000 (10:30 +0000)
committerArthur Outhenin-Chalandre <arthur.outhenin-chalandre@cern.ch>
Mon, 10 Jan 2022 16:05:01 +0000 (17:05 +0100)
Fixes: https://tracker.ceph.com/issues/52725
Signed-off-by: Yongseok Oh <yongseok.oh@linecorp.com>
(cherry picked from commit 1bb9abbe5d66101f0284b629066bc08143485818)

qa/suites/fs/functional/tasks/workunit/dir-max-entries.yaml [new file with mode: 0644]
qa/workunits/fs/maxentries/maxentries.sh [new file with mode: 0755]

diff --git a/qa/suites/fs/functional/tasks/workunit/dir-max-entries.yaml b/qa/suites/fs/functional/tasks/workunit/dir-max-entries.yaml
new file mode 100644 (file)
index 0000000..087dcc3
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- workunit:
+    clients:
+      client.0:
+        - fs/maxentries
diff --git a/qa/workunits/fs/maxentries/maxentries.sh b/qa/workunits/fs/maxentries/maxentries.sh
new file mode 100755 (executable)
index 0000000..d48fd95
--- /dev/null
@@ -0,0 +1,155 @@
+#!/usr/bin/env bash
+
+set -ex
+
+function expect_false()
+{
+       set -x
+       if "$@"; then return 1; else return 0; fi
+}
+
+function make_files()
+{
+  set +x
+  temp_dir=`mktemp -d mkfile_test_XXXXXX`
+  for i in $(seq 1 $1)
+  do
+    echo -n | dd of="${temp_dir}/file_$i" conv=fsync || return 1
+    sync "${temp_dir}" || return 1
+  done
+  set -x
+  return 0
+}
+
+function make_dirs()
+{
+  set +x
+  temp_dir=`mktemp -d mkdir_test_XXXXXX`
+  for i in $(seq 1 $1)
+  do
+    mkdir -p ${temp_dir}/dir_${i} || return 1
+    sync "${temp_dir}" || return 1
+  done
+  set -x
+  return 0
+}
+
+function make_nodes()
+{
+  set +x
+  temp_dir=`mktemp -d mknod_test_XXXXXX`
+  for i in $(seq 1 $1)
+  do
+    mknod ${temp_dir}/fifo_${i} p || return 1
+    sync "${temp_dir}" || return 1
+  done
+  set -x
+  return 0
+}
+
+function rename_files()
+{
+  set +x
+  temp_dir=`mktemp -d rename_test_XXXXXX`
+  mkdir -p ${temp_dir}/rename
+
+  for i in $(seq 1 $1)
+  do
+    touch ${temp_dir}/file_${i} || return 1
+
+    mv ${temp_dir}/file_${i} ${temp_dir}/rename/ || return 1
+    sync "${temp_dir}" || return 1
+  done
+  set -x
+  return 0
+}
+
+function make_symlinks()
+{
+  set +x
+  temp_dir=`mktemp -d symlink_test_XXXXXX`
+  mkdir -p ${temp_dir}/symlink 
+
+  touch ${temp_dir}/file
+
+  for i in $(seq 1 $1)
+  do
+    ln -s ../file ${temp_dir}/symlink/sym_${i} || return 1
+    sync "${temp_dir}" || return 1
+  done
+  set -x
+  return 0
+}
+
+function make_links()
+{
+  set +x
+  temp_dir=`mktemp -d link_test_XXXXXX`
+  mkdir -p ${temp_dir}/link 
+
+  touch ${temp_dir}/file
+
+  for i in $(seq 1 $1)
+  do
+    ln ${temp_dir}/file ${temp_dir}/link/link_${i} || return 1
+    sync "${temp_dir}" || return 1
+  done
+  set -x
+  return 0
+}
+
+function cleanup()
+{
+  rm -rf *
+}
+
+test_dir="max_entries"
+mkdir -p $test_dir
+pushd $test_dir
+
+dir_max_entries=100
+ceph config set mds mds_dir_max_entries $dir_max_entries
+
+ok_dir_max_entries=$dir_max_entries
+fail_dir_max_entries=$((dir_max_entries+1))
+
+# make files test
+make_files $ok_dir_max_entries
+expect_false make_files $fail_dir_max_entries
+
+# make dirs test
+make_dirs $ok_dir_max_entries
+expect_false make_dirs $fail_dir_max_entries
+
+# make nodes test
+make_nodes $ok_dir_max_entries
+expect_false make_nodes $fail_dir_max_entries
+
+# rename files test
+rename_files $ok_dir_max_entries
+expect_false rename_files $fail_dir_max_entries
+
+# symlink files test
+make_symlinks $ok_dir_max_entries
+expect_false make_symlinks $fail_dir_max_entries
+
+# link files test
+make_links $ok_dir_max_entries
+expect_false make_links $fail_dir_max_entries
+
+# no limit (e.g., default value)
+dir_max_entries=0
+ceph config set mds mds_dir_max_entries $dir_max_entries
+
+make_files 500
+make_dirs 500
+make_nodes 500
+rename_files 500
+make_symlinks 500
+make_links 500
+
+cleanup
+
+popd # $test_dir
+
+echo OK