blob: ff707bb019cb691f75c7351085b802cd2f1ca955 [file]
#
# CephFS specific common functions.
#
# _ceph_create_file_layout <filename> <stripe unit> <stripe count> <object size>
# This function creates a new empty file and sets the file layout according to
# parameters. It will exit if the file already exists.
_ceph_create_file_layout()
{
local fname=$1
local stripe_unit=$2
local stripe_count=$3
local obj_size=$4
if [ -e $fname ]; then
echo "File $fname already exists."
_exit 1
fi
touch $fname
$SETFATTR_PROG -n ceph.file.layout \
-v "stripe_unit=$objsz stripe_count=1 object_size=$objsz" \
$fname
}
# this test requires to access file capabilities through vxattr 'ceph.caps'.
_require_ceph_vxattr_caps()
{
$GETFATTR_PROG -n "ceph.caps" $TEST_DIR >/dev/null 2>&1 \
|| _notrun "ceph.caps vxattr not supported"
}
_ceph_get_cluster_fsid()
{
$GETFATTR_PROG --only-values -n "ceph.cluster_fsid" $TEST_DIR 2>/dev/null
}
_ceph_get_client_id()
{
$GETFATTR_PROG --only-values -n "ceph.client_id" $TEST_DIR 2>/dev/null
}
# Get the snapshot directory name from mount options
# Defaults to ".snap" if snapdirname option is not set
_ceph_get_snapdirname()
{
local mnt_point=$1
local snapdirname
# Extract snapdirname from mount options
snapdirname=$(findmnt -n -o OPTIONS "$mnt_point" | grep -o 'snapdirname=[^,]*' | cut -d'=' -f2)
# Default to .snap if not set
if [ -z "$snapdirname" ]; then
echo ".snap"
else
echo "$snapdirname"
fi
}
# Create a CephFS snapshot
# _ceph_create_snapshot <directory_path> <snapshot_name>
# Creates a snapshot under <directory_path>/.snap/<snapshot_name>
# or <directory_path>/<custom_snapdir>/<snapshot_name> if snapdirname is set
_ceph_create_snapshot()
{
local dir_path=$1
local snap_name=$2
local snapdirname
local snapdir
local mnt_point
if [ -z "$dir_path" ] || [ -z "$snap_name" ]; then
echo "Usage: _ceph_create_snapshot <directory_path> <snapshot_name>"
return 1
fi
# Find the mount point for this directory
mnt_point=$(df -P "$dir_path" | tail -1 | awk '{print $NF}')
snapdirname=$(_ceph_get_snapdirname "$mnt_point")
snapdir="$dir_path/$snapdirname/$snap_name"
mkdir "$snapdir" || _fail "Failed to create snapshot $snapdir"
echo "$snapdir"
}
# Remove a CephFS snapshot
# _ceph_remove_snapshot <directory_path> <snapshot_name>
_ceph_remove_snapshot()
{
local dir_path=$1
local snap_name=$2
local snapdirname
local snapdir
local mnt_point
if [ -z "$dir_path" ] || [ -z "$snap_name" ]; then
echo "Usage: _ceph_remove_snapshot <directory_path> <snapshot_name>"
return 1
fi
# Find the mount point for this directory
mnt_point=$(df -P "$dir_path" | tail -1 | awk '{print $NF}')
snapdirname=$(_ceph_get_snapdirname "$mnt_point")
snapdir="$dir_path/$snapdirname/$snap_name"
rmdir "$snapdir" 2>/dev/null
}
# this test requires ceph snapshot support
_require_ceph_snapshot()
{
local snapdirname=$(_ceph_get_snapdirname "$TEST_DIR")
local test_snapdir="$TEST_DIR/$snapdirname/test_snap_$$"
mkdir "$test_snapdir" 2>/dev/null || \
_notrun "Ceph snapshots not supported (requires fs flag 'allow_snaps' and client auth capability 'snap')"
rmdir "$test_snapdir"
}