From 31bd43648dfda46f82fa374389ac31403adfc5b6 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 25 Jun 2021 09:22:40 +0200 Subject: [PATCH] api: status: fix unlink on file upload after an error while copying the file to its destination the local path of the destination was unlinked in every case, even when on the destination was copied to via scp. Signed-off-by: Lorenz Stechauner --- PVE/API2/Storage/Status.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PVE/API2/Storage/Status.pm b/PVE/API2/Storage/Status.pm index 796ab66..13bf4b4 100644 --- a/PVE/API2/Storage/Status.pm +++ b/PVE/API2/Storage/Status.pm @@ -448,6 +448,7 @@ __PACKAGE__->register_method ({ # we simply overwrite the destination file if it already exists my $cmd; + my $err_cmd; if ($node ne 'localhost' && $node ne PVE::INotify::nodename()) { my $remip = PVE::Cluster::remote_node_ip($node); @@ -466,10 +467,12 @@ __PACKAGE__->register_method ({ errmsg => "mkdir failed"); $cmd = ['/usr/bin/scp', @ssh_options, '-p', '--', $tmpfilename, "[$remip]:" . PVE::Tools::shell_quote($dest)]; + $err_cmd = [@remcmd, 'unlink', '--', $dest]; } else { PVE::Storage::activate_storage($cfg, $param->{storage}); File::Path::make_path($dirname); $cmd = ['cp', '--', $tmpfilename, $dest]; + $err_cmd = ['unlink', '--', $dest]; } my $worker = sub { @@ -483,7 +486,7 @@ __PACKAGE__->register_method ({ eval { PVE::Tools::run_command($cmd, errmsg => 'import failed'); }; if (my $err = $@) { - unlink $dest; + eval { PVE::Tools::run_command($err_cmd); }; die $err; } print "finished file import successfully\n";