monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] Solaris breakage


From: William Uther
Subject: [Monotone-devel] Solaris breakage
Date: Tue, 24 Jul 2007 16:22:02 +1000

Hi,
Just taking a break from paper editing... I decided to look at the solaris breakage. It makes no sense to me at all.

The test that is failing is "clone_warning_with_multiple_heads". The part of the test that is failing is where the checked out directory is removed after the failure - the directory is being left around. In particular, from the buildbot we get:

mtn: setting default server to file:/zfs_space/export/home/mtbldbot/ slave-dir/fu ll-sparc-solaris10-sunstudio11/build/tester_dir/ clone_warning_with_multiple_head
s/test.db
mtn: setting default branch include pattern to 'testbranch'
mtn: connecting to file:/zfs_space/export/home/mtbldbot/slave-dir/ full-sparc-sol aris10-sunstudio11/build/tester_dir/clone_warning_with_multiple_heads/ test.db
mtn: finding items to synchronize:
mtn: ticks: >="bytes in"/1024, <="bytes out"/1024, c="certs in"/3, r="revs in"/1
mtn: ><crrcr>crcc
mtn: successful exchange with file:/zfs_space/export/home/mtbldbot/ slave-dir/ful l-sparc-solaris10-sunstudio11/build/tester_dir/ clone_warning_with_multiple_heads
/test.db
mtn: branch testbranch has multiple heads:
mtn: 6d0f3f362b7328e94dff9fef549bbdf0095b2cd6 address@hidden 2007-07-24T03:59
:28
mtn: 89103abeb431f83da74d9b1b99a1609c530643e1 address@hidden 2007-07-24T03:59
:26
mtn: choose one with 'mtn checkout -r<id>'
mtn: error: could not remove '/zfs_space/export/home/mtbldbot/slave- dir/full-spa rc-solaris10-sunstudio11/build/tester_dir/ clone_warning_with_multiple_heads/test
_dir1': Invalid argument


This is correct down to the last line. The "could not remove" error comes from clone trying to remove the test_dir1 directory it partially checked out. This attempted using delete_dir_recursive() defined around line 280 of file_io.cc. Note that the first thing that function does is check that the directory to remove both exists and is actually a directory - i.e. the problem is not with clone passing in the wrong path.

I have no idea why the recursive remove is failing on Solaris. The final failure prints out an os_strerror(errno) of "Invalid argument". We know the file exists. Why else could the argument be invalid?

I thought this patch might help illuminate things:

--- file_io.cc  358fb964dc42e7f936a136342b93bb3a4744d1b3
+++ file_io.cc  d91cbbab9f40622e4c264becb0e2067ee218738e
@@ -269,6 +269,9 @@ do_remove_recursive(any_path const & p)
        i != subdirs.end(); i++)
     do_remove_recursive(p / *i);

+  if (!directory_empty(p))
+ W(F("When attempting to remove directory '%s', we were unsuccessful removing all the files inside it.") % p);
+
   do_remove(p.as_external());
}

but I'm wary of committing that as it will make failures very verbose and slow down every recursive remove.

I'm at a loss to suggest why the recursive remove might be failing. I could imagine the remove of the database inside that dir failing (which is why the test is marked xfail on windows), but we don't get an error removing the db, we get an error later removing the top level dir.

I hope that helps people on Solaris debug. Unfortunately, I don't have a solaris box easily accessible to help with.

Cheers,

Will           :-}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]