all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH manager/docs] handle missed jobs better
@ 2022-06-01 10:23 Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 1/3] fix #4026: add 'skip-missed' option for jobs Dominik Csapak
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Dominik Csapak @ 2022-06-01 10:23 UTC (permalink / raw)
  To: pve-devel

by adding a config option 'skip-missed' for jobs that skips the jobs
on pvescheduler start and when changing from disabled -> enabled

i did not use the systemd name 'persistent' since the name does
not really convey what it means, so i tried to come up with
a better name for it (the logic is just reversed from the systemd
variant, and our default is 0)

pve-manager:

Dominik Csapak (3):
  fix #4026: add 'skip-missed' option for jobs
  fix #4053: enable 'skip-missed' behaviour also for change from
    disabled->enabled
  ui: dc/Backup: add 'skip-missed' checkbox

 PVE/API2/Backup.pm          | 33 +++++++++++++++++++++++++++++----
 PVE/Jobs.pm                 |  5 +++++
 PVE/Jobs/Plugin.pm          |  6 ++++++
 PVE/Jobs/VZDump.pm          |  1 +
 PVE/Service/pvescheduler.pm |  6 +++++-
 www/manager6/dc/Backup.js   |  9 +++++++++
 6 files changed, 55 insertions(+), 5 deletions(-)

pve-docs:

Dominik Csapak (1):
  vzdump: add section about 'skip-missed'

 vzdump.adoc | 6 ++++++
 1 file changed, 6 insertions(+)

-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH manager 1/3] fix #4026: add 'skip-missed' option for jobs
  2022-06-01 10:23 [pve-devel] [PATCH manager/docs] handle missed jobs better Dominik Csapak
@ 2022-06-01 10:23 ` Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 2/3] fix #4053: enable 'skip-missed' behaviour also for change from disabled->enabled Dominik Csapak
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2022-06-01 10:23 UTC (permalink / raw)
  To: pve-devel

like an inverse of systemd-timers 'persistent'.
so that the user can configure it to not be run after powering up
when it was previously missed

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 PVE/API2/Backup.pm          | 19 ++++++++++++++++++-
 PVE/Jobs.pm                 |  5 +++++
 PVE/Jobs/Plugin.pm          |  6 ++++++
 PVE/Jobs/VZDump.pm          |  1 +
 PVE/Service/pvescheduler.pm |  6 +++++-
 5 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/PVE/API2/Backup.pm b/PVE/API2/Backup.pm
index 5d36789a..7b00567a 100644
--- a/PVE/API2/Backup.pm
+++ b/PVE/API2/Backup.pm
@@ -180,6 +180,12 @@ __PACKAGE__->register_method({
 		description => "Enable or disable the job.",
 		default => '1',
 	    },
+	    'skip-missed' => {
+		optional => 1,
+		type => 'boolean',
+		description => "If true, the job will not be run after boot if it was missed earlier.",
+		default => 0,
+	    },
 	    comment => {
 		optional => 1,
 		type => 'string',
@@ -381,6 +387,12 @@ __PACKAGE__->register_method({
 		description => "Enable or disable the job.",
 		default => '1',
 	    },
+	    'skip-missed' => {
+		optional => 1,
+		type => 'boolean',
+		description => "If true, the job will not be run after boot if it was missed earlier.",
+		default => 0,
+	    },
 	    comment => {
 		optional => 1,
 		type => 'string',
@@ -440,8 +452,13 @@ __PACKAGE__->register_method({
 		die "no such vzdump job\n" if !$job || $job->{type} ne 'vzdump';
 	    }
 
+	    my $deletable = {
+		comment => 1,
+		'skip-missed' => 1,
+	    };
+
 	    foreach my $k (@$delete) {
-		if (!PVE::VZDump::option_exists($k) && $k ne 'comment') {
+		if (!PVE::VZDump::option_exists($k) && !$deletable->{$k}) {
 		    raise_param_exc({ delete => "unknown option '$k'" });
 		}
 
diff --git a/PVE/Jobs.pm b/PVE/Jobs.pm
index da648630..299fddd6 100644
--- a/PVE/Jobs.pm
+++ b/PVE/Jobs.pm
@@ -209,6 +209,7 @@ sub get_last_runtime {
 }
 
 sub run_jobs {
+    my ($first_run) = @_;
     synchronize_job_states_with_config();
 
     my $jobs_cfg = cfs_read_file('jobs.cfg');
@@ -228,6 +229,10 @@ sub run_jobs {
 	    next;
 	}
 
+	# update last_run_time on the first run when 'skip-missed' is 1, so that a missed job will not
+	# start immediately after boot
+	updated_job_schedule($id, $type) if $first_run && $cfg->{'skip-missed'};
+
 	next if defined($cfg->{enabled}) && !$cfg->{enabled}; # only schedule actually enabled jobs
 
 	my $last_run = get_last_runtime($id, $type);
diff --git a/PVE/Jobs/Plugin.pm b/PVE/Jobs/Plugin.pm
index 6098360b..f5111442 100644
--- a/PVE/Jobs/Plugin.pm
+++ b/PVE/Jobs/Plugin.pm
@@ -39,6 +39,12 @@ my $defaultData = {
 	    description => "Description for the Job.",
 	    maxLength => 512,
 	},
+	'skip-missed' => {
+	    optional => 1,
+	    type => 'boolean',
+	    description => "If true, the job will not be run after boot if it was missed earlier.",
+	    default => 0,
+	},
     },
 };
 
diff --git a/PVE/Jobs/VZDump.pm b/PVE/Jobs/VZDump.pm
index 44fe33dc..70e1e130 100644
--- a/PVE/Jobs/VZDump.pm
+++ b/PVE/Jobs/VZDump.pm
@@ -26,6 +26,7 @@ sub options {
 	enabled => { optional => 1 },
 	schedule => {},
 	comment => { optional => 1 },
+	'skip-missed' => { optional => 1 },
     };
     foreach my $opt (keys %$props) {
 	if ($props->{$opt}->{optional}) {
diff --git a/PVE/Service/pvescheduler.pm b/PVE/Service/pvescheduler.pm
index f05f3bb9..40be5977 100755
--- a/PVE/Service/pvescheduler.pm
+++ b/PVE/Service/pvescheduler.pm
@@ -97,6 +97,8 @@ sub run {
 	$jobs->{$type}->{$child} = 1;
     };
 
+    my $first_run = 1;
+
     my $run_jobs = sub {
 	# TODO: actually integrate replication in PVE::Jobs and do not always fork here, we could
 	# do the state lookup and check if there's new work scheduled before doing so, e.g., by
@@ -109,8 +111,10 @@ sub run {
 	});
 
 	$fork->('jobs', sub {
-	    PVE::Jobs::run_jobs();
+	    PVE::Jobs::run_jobs($first_run);
 	});
+
+	$first_run = 0;
     };
 
     PVE::Jobs::setup_dirs();
-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH manager 2/3] fix #4053: enable 'skip-missed' behaviour also for change from disabled->enabled
  2022-06-01 10:23 [pve-devel] [PATCH manager/docs] handle missed jobs better Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 1/3] fix #4026: add 'skip-missed' option for jobs Dominik Csapak
@ 2022-06-01 10:23 ` Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 3/3] ui: dc/Backup: add 'skip-missed' checkbox Dominik Csapak
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2022-06-01 10:23 UTC (permalink / raw)
  To: pve-devel

so that if 'persistent' is configured to off, we don't immediately run
the job

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 PVE/API2/Backup.pm | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/PVE/API2/Backup.pm b/PVE/API2/Backup.pm
index 7b00567a..251a892d 100644
--- a/PVE/API2/Backup.pm
+++ b/PVE/API2/Backup.pm
@@ -452,6 +452,8 @@ __PACKAGE__->register_method({
 		die "no such vzdump job\n" if !$job || $job->{type} ne 'vzdump';
 	    }
 
+	    my $old_enabled = $job->{enabled} // 1;
+
 	    my $deletable = {
 		comment => 1,
 		'skip-missed' => 1,
@@ -465,15 +467,21 @@ __PACKAGE__->register_method({
 		delete $job->{$k};
 	    }
 
-	    my $schedule_updated = 0;
+	    my $need_run_time_update = 0;
 	    if (defined($param->{schedule}) && $param->{schedule} ne $job->{schedule}) {
-		$schedule_updated = 1;
+		$need_run_time_update = 1;
 	    }
 
 	    foreach my $k (keys %$param) {
 		$job->{$k} = $param->{$k};
 	    }
 
+	    my $new_enabled = $job->{enabled} // 1;
+
+	    if ($new_enabled && !$old_enabled && $job->{'skip-missed'}) {
+		$need_run_time_update = 1;
+	    }
+
 	    $job->{all} = 1 if (defined($job->{exclude}) && !defined($job->{pool}));
 
 	    if (defined($param->{vmid})) {
@@ -491,7 +499,7 @@ __PACKAGE__->register_method({
 
 	    PVE::VZDump::verify_vzdump_parameters($job, 1);
 
-	    if ($schedule_updated) {
+	    if ($need_run_time_update) {
 		PVE::Jobs::updated_job_schedule($id, 'vzdump');
 	    }
 
-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH manager 3/3] ui: dc/Backup: add 'skip-missed' checkbox
  2022-06-01 10:23 [pve-devel] [PATCH manager/docs] handle missed jobs better Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 1/3] fix #4026: add 'skip-missed' option for jobs Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 2/3] fix #4053: enable 'skip-missed' behaviour also for change from disabled->enabled Dominik Csapak
@ 2022-06-01 10:23 ` Dominik Csapak
  2022-06-01 10:23 ` [pve-devel] [PATCH docs 1/1] vzdump: add section about 'skip-missed' Dominik Csapak
  2022-06-02  7:07 ` [pve-devel] [PATCH manager/docs] handle missed jobs better Thomas Lamprecht
  4 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2022-06-01 10:23 UTC (permalink / raw)
  To: pve-devel

so that the users can configure how to handle missed job runs

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 www/manager6/dc/Backup.js | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/www/manager6/dc/Backup.js b/www/manager6/dc/Backup.js
index 3494aa54..6a7dc6b1 100644
--- a/www/manager6/dc/Backup.js
+++ b/www/manager6/dc/Backup.js
@@ -182,6 +182,14 @@ Ext.define('PVE.dc.BackupEdit', {
 	    },
 	    selModeField,
 	    selPool,
+	    {
+		xtype: 'proxmoxcheckbox',
+		fieldLabel: gettext('Skip missed'),
+		name: 'skip-missed',
+		uncheckedValue: 0,
+		defaultValue: 0,
+		deleteDefaultValue: 1,
+	    },
 	];
 
 	let column2 = [
@@ -581,6 +589,7 @@ Ext.define('PVE.dc.BackupView', {
 	    delete job.node;
 	    delete job.comment;
 	    delete job['next-run'];
+	    delete job['skip-missed'];
 	    job.all = job.all === true ? 1 : 0;
 
 	    if (job['prune-backups']) {
-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH docs 1/1] vzdump: add section about 'skip-missed'
  2022-06-01 10:23 [pve-devel] [PATCH manager/docs] handle missed jobs better Dominik Csapak
                   ` (2 preceding siblings ...)
  2022-06-01 10:23 ` [pve-devel] [PATCH manager 3/3] ui: dc/Backup: add 'skip-missed' checkbox Dominik Csapak
@ 2022-06-01 10:23 ` Dominik Csapak
  2022-06-02  7:07 ` [pve-devel] [PATCH manager/docs] handle missed jobs better Thomas Lamprecht
  4 siblings, 0 replies; 6+ messages in thread
From: Dominik Csapak @ 2022-06-01 10:23 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 vzdump.adoc | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/vzdump.adoc b/vzdump.adoc
index 544ed5e..f475b50 100644
--- a/vzdump.adoc
+++ b/vzdump.adoc
@@ -54,6 +54,12 @@ will in turn be parsed and executed by the `pvescheduler` daemon.
 These jobs use the xref:chapter_calendar_events[calendar events] for
 defining the schedule.
 
+Since scheduled backups miss their execution when the host was offline or the
+job was disabled during the scheduled time, it is possible to configure the
+behaviour for catching up. By enabling the `Skip missed` option (`skip-missed`
+in the config), you can tell the scheduler that it should not catch up the
+missed runs in those two cases.
+
 Backup modes
 ------------
 
-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [pve-devel] [PATCH manager/docs] handle missed jobs better
  2022-06-01 10:23 [pve-devel] [PATCH manager/docs] handle missed jobs better Dominik Csapak
                   ` (3 preceding siblings ...)
  2022-06-01 10:23 ` [pve-devel] [PATCH docs 1/1] vzdump: add section about 'skip-missed' Dominik Csapak
@ 2022-06-02  7:07 ` Thomas Lamprecht
  4 siblings, 0 replies; 6+ messages in thread
From: Thomas Lamprecht @ 2022-06-02  7:07 UTC (permalink / raw)
  To: Proxmox VE development discussion, Dominik Csapak

Am 01/06/2022 um 12:23 schrieb Dominik Csapak:
> by adding a config option 'skip-missed' for jobs that skips the jobs
> on pvescheduler start and when changing from disabled -> enabled
> 
> i did not use the systemd name 'persistent' since the name does
> not really convey what it means, so i tried to come up with
> a better name for it (the logic is just reversed from the systemd
> variant, and our default is 0)
> 

for the record the off list exchange:

* skipping immediate "catch up" run on disable->enable change should be unconditionally
  off

* "skip-missed" is somewhat double negative, rather negate that and use "persistent",
   like systemd does, or "repeat-missed"

* the behaviour should then be off by default to avoid triggering lots of backups during
  boot up.

* I'd move the box into advanced section in the gui





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-06-02  7:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-01 10:23 [pve-devel] [PATCH manager/docs] handle missed jobs better Dominik Csapak
2022-06-01 10:23 ` [pve-devel] [PATCH manager 1/3] fix #4026: add 'skip-missed' option for jobs Dominik Csapak
2022-06-01 10:23 ` [pve-devel] [PATCH manager 2/3] fix #4053: enable 'skip-missed' behaviour also for change from disabled->enabled Dominik Csapak
2022-06-01 10:23 ` [pve-devel] [PATCH manager 3/3] ui: dc/Backup: add 'skip-missed' checkbox Dominik Csapak
2022-06-01 10:23 ` [pve-devel] [PATCH docs 1/1] vzdump: add section about 'skip-missed' Dominik Csapak
2022-06-02  7:07 ` [pve-devel] [PATCH manager/docs] handle missed jobs better Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal