Thanks, James, for reporting this, and thanks, Matt, for the analysis. I filed
7002362 to track this.
Tom
On 11/23/10 10:43 AM, Matthew Ahrens wrote:
I verified that this bug exists in OpenSolaris as well. The problem is that we
can't destroy the old filesystem "a" (which has been renamed to
"rec2/recv-2176-1" in this case). We can't destroy it because it has a child,
"b". We need to rename "b" to be under the new "a". However, we are not
renaming it, which is the root cause of the problem.
This code in recv_incremental_replication() should detect that we should rename
"b":
if ((stream_parent_fromsnap_guid != 0 &&
parent_fromsnap_guid != 0 &&
stream_parent_fromsnap_guid != parent_fromsnap_guid) || ...
But this will not trigger because we have already destroyed the snapshots of b's
parent (the old "a", now "rec2/recv-2176-1"), so parent_fromsnap_guid will be 0.
I believe that the fix for bug 6921421 introduced this code in build 135, it
used to read:
if ((stream_parent_fromsnap_guid != 0 &&
stream_parent_fromsnap_guid != parent_fromsnap_guid) || ...
So we will have to investigate and see why the "&& parent_fromsnap_guid != 0" is
now needed.
--matt
On Tue, Nov 23, 2010 at 6:16 AM, James Van Artsdalen <james-opensola...@jrv.org
<mailto:james-opensola...@jrv.org>> wrote:
I am seeing a zfs recv bug on FreeBSD and am wondering if someone could test
this in the Solaris code. If it fails there then I guess a bug report into
Solaris is needed.
This is a perverse case of filesystem renaming between snapshots.
kraken:/root# cat zt
zpool create rec1 da3
zpool create rec2 da4
zfs create rec1/a
zfs create rec1/a/b
zfs snapshot -r r...@s1
zfs send -R r...@s1 | zfs recv -dvuF rec2
zfs rename rec1/a/b rec1/c
zfs destroy -r rec1/a
zfs create rec1/a
zfs rename rec1/c rec1/a/b # if the rename target is anything other than
rec1/a/b the "zfs recv" result is right
zfs snapshot -r r...@s2
zfs send -R -I @s1 r...@s2 | zfs recv -dvuF rec2
kraken:/root# sh -x zt
+ zpool create rec1 da3
+ zpool create rec2 da4
+ zfs create rec1/a
+ zfs create rec1/a/b
+ zfs snapshot -r r...@s1
+ zfs send -R r...@s1
+ zfs recv -dvuF rec2
receiving full stream of r...@s1 into r...@s1
received 47.4KB stream in 2 seconds (23.7KB/sec)
receiving full stream of rec1/a...@s1 into rec2/a...@s1
received 47.9KB stream in 1 seconds (47.9KB/sec)
receiving full stream of rec1/a/b...@s1 into rec2/a/b...@s1
received 46.3KB stream in 1 seconds (46.3KB/sec)
+ zfs rename rec1/a/b rec1/c
+ zfs destroy -r rec1/a
+ zfs create rec1/a
+ zfs rename rec1/c rec1/a/b
+ zfs snapshot -r r...@s2
+ zfs send -R -I @s1 r...@s2
+ zfs recv -dvuF rec2
attempting destroy rec2/a...@s1
success
attempting destroy rec2/a
failed - trying rename rec2/a to rec2/recv-2176-1
local fs rec2/a/b new parent not found
cannot open 'rec2/a/b': dataset does not exist
another pass:
attempting destroy rec2/recv-2176-1
failed (0)
receiving incremental stream of r...@s2 into r...@s2
received 10.8KB stream in 2 seconds (5.41KB/sec)
receiving full stream of rec1/a...@s2 into rec2/a...@s2
received 47.9KB stream in 1 seconds (47.9KB/sec)
receiving incremental stream of rec1/a/b...@s2 into rec2/recv-2176-1/b...@s2
received 312B stream in 2 seconds (156B/sec)
local fs rec2/a does not have fromsnap (s1 in stream); must have been
deleted locally; ignoring
attempting destroy rec2/recv-2176-1
failed (0)
kraken:/root# zfs list | grep rec1
rec1 238K
1.78T 32K /rec1
rec1/a 63K
1.78T 32K /rec1/a
rec1/a/b 31K
1.78T 31K /rec1/a/b
kraken:/root# zfs list | grep rec2
rec2 293K
1.78T 32K /rec2
rec2/a 32K
1.78T 32K /rec2/a
rec2/recv-2176-1 64K
1.78T 32K /rec2/recv-2176-1
rec2/recv-2176-1/b 32K
1.78T 31K /rec2/recv-2176-1/b
kraken:/root#
--
This message posted from opensolaris.org <http://opensolaris.org>
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org <mailto:zfs-discuss@opensolaris.org>
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss