[pve-devel] [PATCH manager] Treat pvesr as a worker for storage operations
Fabian Ebner
f.ebner at proxmox.com
Tue Oct 29 11:56:02 CET 2019
We currently have a 5 seconds timeout for zfs_request for non-workers and
that is too low for some use cases of pvesr. As a workaround we create
fake workers doing the storage operations and use our own timeouts.
Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
Is 60 a good value for the timeout?
Should we make the timeout configurable via the replication config?
PVE/CLI/pvesr.pm | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/PVE/CLI/pvesr.pm b/PVE/CLI/pvesr.pm
index cb79e2bf..95550860 100644
--- a/PVE/CLI/pvesr.pm
+++ b/PVE/CLI/pvesr.pm
@@ -136,14 +136,22 @@ __PACKAGE__->register_method ({
my $images = $plugin->list_images($storeid, $scfg, $vmid, undef, $cache);
push @$volids, map { $_->{volid} } @$images;
}
- my ($last_snapshots, $cleaned_replicated_volumes) = PVE::Replication::prepare($storecfg, $volids, $jobid, $last_sync, $parent_snapname, $logfunc);
- foreach my $volid (keys %$cleaned_replicated_volumes) {
- if (!$wanted_volids->{$volid}) {
- $logfunc->("$jobid: delete stale volume '$volid'");
- PVE::Storage::vdisk_free($storecfg, $volid);
- delete $last_snapshots->{$volid};
+
+ # FIXME: We currently manually set the worker flag here to avoid
+ # low I/O timeouts. This should be replaced by a lightweight worker
+ # once we have those.
+ my $last_snapshots = PVE::Tools::run_fork_with_timeout(60, sub {
+ PVE::RPCEnvironment->set_worker_flag(1);
+ my ($last_snapshots, $cleaned_replicated_volumes) = PVE::Replication::prepare($storecfg, $volids, $jobid, $last_sync, $parent_snapname, $logfunc);
+ foreach my $volid (keys %$cleaned_replicated_volumes) {
+ if (!$wanted_volids->{$volid}) {
+ $logfunc->("$jobid: delete stale volume '$volid'");
+ PVE::Storage::vdisk_free($storecfg, $volid);
+ delete $last_snapshots->{$volid};
+ }
}
- }
+ return $last_snapshots;
+ });
print to_json($last_snapshots) . "\n";
@@ -200,8 +208,14 @@ __PACKAGE__->register_method ({
print STDERR "$msg\n";
};
- my $last_snapshots = PVE::Replication::prepare(
- $storecfg, $volids, $jobid, $last_sync, undef, $logfunc);
+ # FIXME: We currently manually set the worker flag here to avoid
+ # low I/O timeouts. This should be replaced by a lightweight worker
+ # once we have those.
+ PVE::Tools::run_fork_with_timeout(60, sub {
+ PVE::RPCEnvironment->set_worker_flag(1);
+ my $last_snapshots = PVE::Replication::prepare(
+ $storecfg, $volids, $jobid, $last_sync, undef, $logfunc);
+ });
return undef;
}});
--
2.20.1
More information about the pve-devel
mailing list