SRM advisory delete doesn't work
There are two issues know with dCache which result in problems with srm-advisory delete or 'lcg-del'.
Triggered by internal dCache timeouts
Symptom
srm-advisory-delete or lcg-del report a problem though the file is finally removed from the pnfs file system and later on from disk.
Details
The SRM is sending the request to delete a file to the dCache core and sets a timeout for the reply to 10 seconds. If the dCache core need more than 10 seconds to fullfil the request, the SRM modules gives up and reports an error to the 'advisory-del' client. Nevertheless the request is performed in the dCache core, so that the file is finally delete from the pnfs filesystem (from dCache).
Solution
We hope to get this fixed as soon as possible.
Triggered by a issue with pnfs
Symptom
srm-advisory-delete or lcg-del report a problem and the file is indeed still in the pnfs filesystem. Very often, this affects only a particular subtree of pnfs but not whle system.
Details
The advisory delete command needs a function of the pnfs filesystem to obtain the filepath by the pnfs i-node (pnfsID). For still unknown reasons, it happens that for a particular subset of the pnfs tree the function doesn't work, due a piece of information lots in one of the pnfs database. A good indication that this happened is to run the pnfs pathfinder command on a pnfs id which exists, but for which the delete didn't work. You will very likely get something similiar to this
MY_COMPUTER $ cd /pnfs/fs MY_COMPUTER $ PATH=/opt/pnfs/tools:$PATH MY_COMPUTER $ pathfinder 00010000000000000000A2C8 00010000000000000000A2C8 generated 0001000000000000000040A8 hone 000100000000000000001060 - 000100000000000000001040 fs 000100000000000000001020 root 000100000000000000001000 - 000000000000000000000100 - 000000000000000000000000 - /root/fs/hone/generatedThis is the line which is obviously not correct
000100000000000000001060 -
How to fix this
Run the script below and send the output to support@….
Usage : SCRIPT <directoryPathInPnfs>
#!/bin/sh
if [ $# -lt 1 ] ; then
echo "Usage : <pnfsDirectoryPath>" >&2
exit 2
fi
#
directory=$1
if [ ! -d $directory ] ; then
echo "not a directory path : $directory" >&2
exit 2
fi
#
cd $directory
#
while :
do
fullpath=`pwd`
name=`basename $fullpath`
cd ..
pnfsid=`cat ".(id)($name)"`
if [ $? -ne 0 ] ; then exit 0 ; fi
parent=`cat ".(parent)($pnfsid)"`
echo "id : $pnfsid ; parent $parent"
done
exit 0
Last Modified by patrick at Wed May 23 06:35:14 2012
