[Gluster-devel] feature/trash and NetBSD

Emmanuel Dreyfus manu at netbsd.org
Wed Mar 18 08:30:20 UTC 2015


On Wed, Mar 18, 2015 at 11:26:02AM +0530, Anoop C S wrote:
> Trash translator creates the original file inside .trashcan directory on
> receiving a truncate/ftruncate call and then truncates the file. During
> the above mentioned procedure, whether a truncate/ftruncate call is
> issued internally?

The kernel sends SETATTR with new file size, and glusterfs turns this
into a truncate call. I have to dig deeper to tell how.

> We have started looking into the failures. And I see many instances of
> the following error:
> du: unknown option -- b

Yes, I had to fix a few shell portability problems
- The -p option for mkdir must be before the directory name
- du -b is not portable. Use ls -l instead.
- test -e file* fails if file* expands to multiple files. 
  I introduced wildcard_exists() and wildcard_not_exists() to work 
  this around.

Attached patch adresses the three points.

-- 
Emmanuel Dreyfus
manu at netbsd.org
-------------- next part --------------
diff --git a/tests/features/trash.t b/tests/features/trash.t
index e0b85da..bdb56f3 100755
--- a/tests/features/trash.t
+++ b/tests/features/trash.t
@@ -37,29 +37,35 @@ unlink_op() {
         sleep 2
 
         test ! -e $M0/$1
-        test -e $M0/.trashcan/$1*
+        wildcard_exists $M0/.trashcan/$1*
 
         # remove from trashcan
         rm -f $M0/.trashcan/$1*
-        test ! -e $M0/.trashcan/$1*
+        wildcard_not_exists $M0/.trashcan/$1*
 }
 
 truncate_op() {
-
         truncate -s 2 $M0/$1
         ls $M0/.trashcan/1/2/3 &> /dev/null
         sleep 2
 
         test -e $M0/$1
-        test $(du -b $M0/$1 | awk '{print $1}') -eq 2 &>/dev/null
-        test -e $M0/.trashcan/$1*
-        test $(du -b $M0/.trashcan/$1*|awk '{print $1}') -eq $2 &>/dev/null
+        test $(ls -l $M0/$1 | awk '{print $5}') -eq 2 &>/dev/null
+        wildcard_exists $M0/.trashcan/$1*
+        test $(ls -l $M0/.trashcan/$1*|awk '{print $5}') -eq $2 &>/dev/null
 
         # truncate from trashcan
         truncate -s 1 $M0/.trashcan/$1*
         test $(ls $M0/.trashcan/$1* | wc -l) -eq 1
 }
 
+wildcard_exists() {
+        test -e $1
+}
+
+wildcard_not_exists() {
+        test ! -e $1
+}
 
 # testing glusterd [1-3]
 TEST glusterd
@@ -94,7 +100,7 @@ TEST unlink_op file1
 TEST truncate_op file2 4
 
 # create files directory hierarchy and check [16]
-mkdir $M0/1/2/3 -p
+mkdir -p $M0/1/2/3
 create_files $M0/1/2/3/foo1 $M0/1/2/3/foo2
 TEST file_exists 1/2/3/foo1 1/2/3/foo2
 
@@ -117,13 +123,13 @@ TEST file_exists a/test1 a/test2
 
 # remove from eliminate pattern [22]
 rm -f $M0/a/test1
-TEST [ ! -e $M0/.trashcan/a/test1* ]
+TEST wildcard_not_exists $M0/.trashcan/a/test1*
 
 # truncate from eliminate path [23-25]
 truncate -s 2 $M0/a/test2
 TEST [ -e $M0/a/test2 ]
-TEST [ `du -b $M0/a/test2 | awk '{print $1}'` -eq 2 ]
-TEST [ ! -e $M0/.trashcan/a/test2* ]
+TEST [ `ls -l $M0/a/test2 | awk '{print $5}'` -eq 2 ]
+TEST wildcard_not_exists $M0/.trashcan/a/test2*
 
 # set internal op on [26-27]
 TEST $CLI volume set $V0 features.trash-internal-op on
@@ -157,7 +163,7 @@ sleep 3
 
 # check whether rebalance was succesful [38-40]
 TEST [ -e $B0/${V0}3/rebal2 ]
-TEST [ -e $B0/${V0}1/.trashcan/internal_op/rebal2* ]
+TEST wildcard_exists $B0/${V0}1/.trashcan/internal_op/rebal2*
 TEST stop_vol
 
 # create a replicated volume [41]
@@ -190,21 +196,21 @@ TEST [ -e $B0/${V1}1/self -a -e $B0/${V1}2/self ]
 kill `ps aux| grep glusterfsd | awk '{print $2}' | head -1`
 sleep 2
 rm -f $M1/self
-TEST [ -e $M1/.trashcan/self* ]
+TEST wildcard_exists $M1/.trashcan/self*
 
 # force start the volume and trigger the self-heal manually [56]
 TEST $CLI volume start $V1 force
 sleep 3
 
 # check for the removed file in trashcan [57]
-TEST [ -e $B0/${V1}1/.trashcan/internal_op/self* -o -e $B0/${V1}2/.trashcan/internal_op/self* ]
+TEST [ wildcard_exists $B0/${V1}1/.trashcan/internal_op/self* -o  wildcard_exists $B0/${V1}2/.trashcan/internal_op/self* ]
 
 # check renaming of trash directory through cli [58-62]
 TEST $CLI volume set $V0 trash-dir abc
 TEST $CLI volume start $V0
 TEST glusterfs -s $H0 --volfile-id $V0 $M0 --attribute-timeout=0
 TEST [ -e $M0/abc -a ! -e $M0/.trashcan ]
-TEST [ -e $B0/${V0}1/abc/internal_op/rebal2* ]
+TEST wildcard_exists $B0/${V0}1/abc/internal_op/rebal2*
 sleep 2
 
 # ensure that rename and delete operation on trash directory fails [63-65]


More information about the Gluster-devel mailing list