From: Jonas Theisen <j.theisen@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [PATCH proxmox v3 01/10] fix #7904: Add 'disable' to {sync,verify,tape,gc} job schema and datastore config
Date: Fri, 9 Oct 2026 16:53:10 +0200 [thread overview]
Message-ID: <20261009145328.281554-2-j.theisen@proxmox.com> (raw)
In-Reply-To: <20261009145328.281554-1-j.theisen@proxmox.com>
To be able to en-/disable the respective jobs this patch adds the
"disable" field to the job config and the needed schema.
This also adds the gc_disable parameter to the datastore config
to allow this type of job to be disabled.
Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=7904
Signed-off-by: Jonas Theisen <j.theisen@proxmox.com>
---
pbs-api-types/src/datastore.rs | 17 +++++++++++++++++
pbs-api-types/src/jobs.rs | 27 +++++++++++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs
index 93ccaf07..b8ef7509 100644
--- a/pbs-api-types/src/datastore.rs
+++ b/pbs-api-types/src/datastore.rs
@@ -460,6 +460,11 @@ pub const COUNTER_RESET_SCHEDULE_SCHEMA: Schema =
optional: true,
schema: SINGLE_LINE_COMMENT_SCHEMA,
},
+ "gc-disable": {
+ description: "Disable scheduled execution of garbage collection.",
+ optional: true,
+ type: Boolean,
+ },
"gc-schedule": {
optional: true,
schema: GC_SCHEDULE_SCHEMA,
@@ -524,6 +529,10 @@ pub struct DataStoreConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
+ #[serde(default, skip_serializing_if = "is_false")]
+ #[updater(serde(skip_serializing_if = "Option::is_none"))]
+ pub gc_disable: bool,
+
#[serde(skip_serializing_if = "Option::is_none")]
pub gc_schedule: Option<String>,
@@ -605,6 +614,7 @@ impl DataStoreConfig {
name,
path,
comment: None,
+ gc_disable: Default::default(),
gc_schedule: None,
gc_on_unmount: None,
prune_schedule: None,
@@ -1704,6 +1714,9 @@ pub struct GarbageCollectionJobStatus {
pub store: String,
#[serde(flatten)]
pub status: GarbageCollectionStatus,
+ /// Is this job disabled
+ #[serde(default)]
+ pub disable: bool,
/// Schedule of the gc job
#[serde(skip_serializing_if = "Option::is_none")]
pub schedule: Option<String>,
@@ -1721,6 +1734,10 @@ pub struct GarbageCollectionJobStatus {
pub duration: Option<i64>,
}
+fn is_false(b: &bool) -> bool {
+ !b
+}
+
#[api(
properties: {
"gc-status": {
diff --git a/pbs-api-types/src/jobs.rs b/pbs-api-types/src/jobs.rs
index 9a5d2b77..73d7c13f 100644
--- a/pbs-api-types/src/jobs.rs
+++ b/pbs-api-types/src/jobs.rs
@@ -228,6 +228,11 @@ pub const VERIFICATION_OUTDATED_AFTER_SCHEMA: Schema =
optional: true,
schema: VERIFICATION_SCHEDULE_SCHEMA,
},
+ disable: {
+ type: Boolean,
+ optional: true,
+ default: false,
+ },
ns: {
optional: true,
schema: BACKUP_NAMESPACE_SCHEMA,
@@ -267,6 +272,10 @@ pub struct VerificationJobConfig {
#[serde(skip_serializing_if = "Option::is_none")]
/// when to schedule this job in calendar event notation
pub schedule: Option<String>,
+ /// Disable this job.
+ #[serde(default, skip_serializing_if = "is_false")]
+ #[updater(serde(skip_serializing_if = "Option::is_none"))]
+ pub disable: bool,
#[serde(skip_serializing_if = "Option::is_none", default)]
/// on which backup namespace to run the verification recursively
pub ns: Option<BackupNamespace>,
@@ -403,6 +412,11 @@ pub struct TapeBackupJobSetup {
optional: true,
schema: SYNC_SCHEDULE_SCHEMA,
},
+ disable: {
+ type: Boolean,
+ optional: true,
+ default: false,
+ },
}
)]
#[derive(Serialize, Deserialize, Clone, Updater, PartialEq)]
@@ -417,6 +431,10 @@ pub struct TapeBackupJobConfig {
pub comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub schedule: Option<String>,
+ /// Disable this job.
+ #[serde(default, skip_serializing_if = "is_false")]
+ #[updater(serde(skip_serializing_if = "Option::is_none"))]
+ pub disable: bool,
}
#[api(
@@ -642,6 +660,11 @@ pub const UNMOUNT_ON_SYNC_DONE_SCHEMA: Schema =
optional: true,
schema: SYNC_SCHEDULE_SCHEMA,
},
+ disable: {
+ type: Boolean,
+ optional: true,
+ default: false,
+ },
"group-filter": {
schema: GROUP_FILTER_LIST_SCHEMA,
optional: true,
@@ -717,6 +740,10 @@ pub struct SyncJobConfig {
pub comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub schedule: Option<String>,
+ /// Disable this job.
+ #[serde(default, skip_serializing_if = "is_false")]
+ #[updater(serde(skip_serializing_if = "Option::is_none"))]
+ pub disable: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub group_filter: Option<Vec<GroupFilter>>,
#[serde(flatten)]
--
2.47.3
next prev parent reply other threads:[~2026-10-09 14:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-09 14:53 [PATCH proxmox{,-backup} v3 00/10] fix #7904: Implement Enable checkboxes for all jobs Jonas Theisen
2026-10-09 14:53 ` Jonas Theisen [this message]
2026-10-09 14:53 ` [PATCH proxmox v3 02/10] pbs-api-types: prune job: make schedule optional Jonas Theisen
2026-10-09 14:53 ` [PATCH proxmox-backup v3 03/10] ui: prune job: align prune edit window to other "Enable" checkboxes Jonas Theisen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261009145328.281554-2-j.theisen@proxmox.com \
--to=j.theisen@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox