diff --git a/syncoid b/syncoid index 147dc80..c8c5262 100755 --- a/syncoid +++ b/syncoid @@ -689,9 +689,23 @@ sub syncdataset { } if ($debug) { print "DEBUG: $bookmarkcmd\n"; } system($bookmarkcmd) == 0 or do { - warn "CRITICAL ERROR: $bookmarkcmd failed: $?"; - if ($exitcode < 2) { $exitcode = 2; } - return 0; + # fallback: assume nameing conflict and try again with guid based suffix + my $guid = $snaps{'source'}{$newsyncsnap}{'guid'}; + $guid = substr($guid, 0, 6); + + if (!$quiet) { print "INFO: bookmark creation failed, retrying with guid based suffix ($guid)...\n"; } + + if ($sourcehost ne '') { + $bookmarkcmd = "$sshcmd $sourcehost " . escapeshellparam("$sourcesudocmd $zfscmd bookmark $sourcefsescaped\@$newsyncsnapescaped $sourcefsescaped\#$newsyncsnapescaped$guid"); + } else { + $bookmarkcmd = "$sourcesudocmd $zfscmd bookmark $sourcefsescaped\@$newsyncsnapescaped $sourcefsescaped\#$newsyncsnapescaped$guid"; + } + if ($debug) { print "DEBUG: $bookmarkcmd\n"; } + system($bookmarkcmd) == 0 or do { + warn "CRITICAL ERROR: $bookmarkcmd failed: $?"; + if ($exitcode < 2) { $exitcode = 2; } + return 0; + } }; } } else {