mirror of
git://git.proxmox.com/git/pve-storage.git
synced 2024-12-23 17:34:34 +03:00
api: status: rework err cleanup
avoid open3 on local node. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
a84804c432
commit
b11d054be0
@ -5,6 +5,7 @@ use warnings;
|
|||||||
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
|
use POSIX qw(ENOENT);
|
||||||
|
|
||||||
use PVE::Cluster;
|
use PVE::Cluster;
|
||||||
use PVE::Exception qw(raise_param_exc);
|
use PVE::Exception qw(raise_param_exc);
|
||||||
@ -445,10 +446,9 @@ __PACKAGE__->register_method ({
|
|||||||
# best effort to match apl_download behaviour
|
# best effort to match apl_download behaviour
|
||||||
chmod 0644, $tmpfilename;
|
chmod 0644, $tmpfilename;
|
||||||
|
|
||||||
# we simply overwrite the destination file if it already exists
|
my $err_cleanup = sub { unlink $dest, $tmpfilename; die "cleanup failed: $!" if $! && $! != ENOENT };
|
||||||
|
|
||||||
my $cmd;
|
my $cmd;
|
||||||
my $err_cmd;
|
|
||||||
if ($node ne 'localhost' && $node ne PVE::INotify::nodename()) {
|
if ($node ne 'localhost' && $node ne PVE::INotify::nodename()) {
|
||||||
my $remip = PVE::Cluster::remote_node_ip($node);
|
my $remip = PVE::Cluster::remote_node_ip($node);
|
||||||
|
|
||||||
@ -467,14 +467,15 @@ __PACKAGE__->register_method ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
$cmd = ['/usr/bin/scp', @ssh_options, '-p', '--', $tmpfilename, "[$remip]:" . PVE::Tools::shell_quote($dest)];
|
$cmd = ['/usr/bin/scp', @ssh_options, '-p', '--', $tmpfilename, "[$remip]:" . PVE::Tools::shell_quote($dest)];
|
||||||
$err_cmd = [@remcmd, 'unlink', '--', $dest];
|
|
||||||
|
$err_cleanup = sub { run_command([@remcmd, 'rm', '-f', '--', $dest, $tmpfilename]) };
|
||||||
} else {
|
} else {
|
||||||
PVE::Storage::activate_storage($cfg, $param->{storage});
|
PVE::Storage::activate_storage($cfg, $param->{storage});
|
||||||
File::Path::make_path($dirname);
|
File::Path::make_path($dirname);
|
||||||
$cmd = ['cp', '--', $tmpfilename, $dest];
|
$cmd = ['cp', '--', $tmpfilename, $dest];
|
||||||
$err_cmd = ['unlink', '--', $dest];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# NOTE: we simply overwrite the destination file if it already exists
|
||||||
my $worker = sub {
|
my $worker = sub {
|
||||||
my $upid = shift;
|
my $upid = shift;
|
||||||
|
|
||||||
@ -486,7 +487,8 @@ __PACKAGE__->register_method ({
|
|||||||
|
|
||||||
eval { run_command($cmd, errmsg => 'import failed'); };
|
eval { run_command($cmd, errmsg => 'import failed'); };
|
||||||
if (my $err = $@) {
|
if (my $err = $@) {
|
||||||
eval { run_command($err_cmd) };
|
eval { $err_cleanup->() };
|
||||||
|
warn "$@" if $@;
|
||||||
die $err;
|
die $err;
|
||||||
}
|
}
|
||||||
print "finished file import successfully\n";
|
print "finished file import successfully\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user