public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Christian Ebner <c.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [PATCH proxmox-backup v4 13/14] api: datastore: move prune job and s3 backend logic to create helper
Date: Mon,  3 Aug 2026 11:07:46 +0200	[thread overview]
Message-ID: <20260803090747.265683-14-c.ebner@proxmox.com> (raw)
In-Reply-To: <20260803090747.265683-1-c.ebner@proxmox.com>

Moving the logic to the common datastore create helper will facilitate
switching to the datastore create maintenance mode in following changes.

The same logic can be used for the directory/zfs datastore creation, as
prune job creation and s3 backend logic can be skipped there.

No functional changes intended.

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
---
 src/api2/config/datastore.rs     | 28 ++++++++++++++++++----------
 src/api2/node/disks/directory.rs | 15 +++++++++++----
 src/api2/node/disks/zfs.rs       | 17 ++++++++++++-----
 3 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs
index 7505e8c78..5d0aa966a 100644
--- a/src/api2/config/datastore.rs
+++ b/src/api2/config/datastore.rs
@@ -9,6 +9,7 @@ use proxmox_router::{Permission, Router, RpcEnvironment, RpcEnvironmentType, htt
 use proxmox_schema::{ApiType, api, param_bail};
 use proxmox_section_config::SectionConfigData;
 use proxmox_uuid::Uuid;
+use proxmox_worker_task::WorkerTaskContext;
 
 use pbs_api_types::{
     Authid, DATASTORE_SCHEMA, DataStoreConfig, DataStoreConfigUpdater, DatastoreBackendType,
@@ -95,7 +96,10 @@ impl Drop for UnmountGuard {
 pub(crate) fn do_create_datastore(
     lock: BackupLockGuard,
     mut config: SectionConfigData,
+    worker: &dyn WorkerTaskContext,
+    backend_type: DatastoreBackendType,
     mut datastore: DataStoreConfig,
+    prune_job_config: Option<PruneJobConfig>,
     reuse_datastore: bool,
     overwrite_in_use: bool,
 ) -> Result<(), Error> {
@@ -118,6 +122,16 @@ pub(crate) fn do_create_datastore(
 
     unmount_guard.disable();
 
+    drop(lock);
+
+    if let Some(prune_job_config) = prune_job_config {
+        do_create_prune_job(prune_job_config)?;
+    }
+
+    if reuse_datastore && backend_type == DatastoreBackendType::S3 {
+        crate::api2::admin::datastore::do_s3_refresh(&datastore.name, worker)?;
+    }
+
     Ok(())
 }
 
@@ -214,19 +228,13 @@ pub fn create_datastore(
             do_create_datastore(
                 lock,
                 section_config,
+                &worker,
+                backend,
                 config,
+                prune_job_config,
                 reuse_datastore,
                 overwrite_in_use,
-            )?;
-
-            if let Some(prune_job_config) = prune_job_config {
-                do_create_prune_job(prune_job_config)?;
-            }
-
-            if reuse_datastore && backend == DatastoreBackendType::S3 {
-                crate::api2::admin::datastore::do_s3_refresh(&store_name, &worker)?;
-            }
-            Ok(())
+            )
         },
     )
 }
diff --git a/src/api2/node/disks/directory.rs b/src/api2/node/disks/directory.rs
index 9979355e5..7fc7187bf 100644
--- a/src/api2/node/disks/directory.rs
+++ b/src/api2/node/disks/directory.rs
@@ -11,8 +11,8 @@ use proxmox_schema::api;
 use proxmox_section_config::SectionConfigData;
 
 use pbs_api_types::{
-    BLOCKDEVICE_NAME_SCHEMA, DATASTORE_MOUNT_DIR, DATASTORE_SCHEMA, DataStoreConfig, NODE_SCHEMA,
-    PRIV_SYS_AUDIT, PRIV_SYS_MODIFY, UPID_SCHEMA,
+    BLOCKDEVICE_NAME_SCHEMA, DATASTORE_MOUNT_DIR, DATASTORE_SCHEMA, DataStoreConfig,
+    DatastoreBackendType, NODE_SCHEMA, PRIV_SYS_AUDIT, PRIV_SYS_MODIFY, UPID_SCHEMA,
 };
 
 use crate::tools::disks::{
@@ -214,7 +214,7 @@ pub fn create_datastore_disk(
         Some(name.clone()),
         auth_id,
         to_stdout,
-        move |_worker| {
+        move |worker| {
             info!("create datastore '{name}' on disk {disk}");
 
             let filesystem = filesystem.unwrap_or(FileSystemType::Ext4);
@@ -251,7 +251,14 @@ pub fn create_datastore_disk(
                 pbs_config::datastore::validate_new_datastore_config(&datastore, &config, &lock)?;
 
                 crate::api2::config::datastore::do_create_datastore(
-                    lock, config, datastore, false, false,
+                    lock,
+                    config,
+                    &worker,
+                    DatastoreBackendType::Filesystem,
+                    datastore,
+                    None,
+                    false,
+                    false,
                 )?;
             }
 
diff --git a/src/api2/node/disks/zfs.rs b/src/api2/node/disks/zfs.rs
index 0e8ce75b5..2a44c3d2d 100644
--- a/src/api2/node/disks/zfs.rs
+++ b/src/api2/node/disks/zfs.rs
@@ -6,9 +6,9 @@ use proxmox_router::{Permission, Router, RpcEnvironment, RpcEnvironmentType};
 use proxmox_schema::api;
 
 use pbs_api_types::{
-    DATASTORE_SCHEMA, DISK_ARRAY_SCHEMA, DISK_LIST_SCHEMA, DataStoreConfig, NODE_SCHEMA,
-    PRIV_SYS_AUDIT, PRIV_SYS_MODIFY, UPID_SCHEMA, ZFS_ASHIFT_SCHEMA, ZPOOL_NAME_SCHEMA,
-    ZfsCompressionType, ZfsRaidLevel, ZpoolListItem,
+    DATASTORE_SCHEMA, DISK_ARRAY_SCHEMA, DISK_LIST_SCHEMA, DataStoreConfig, DatastoreBackendType,
+    NODE_SCHEMA, PRIV_SYS_AUDIT, PRIV_SYS_MODIFY, UPID_SCHEMA, ZFS_ASHIFT_SCHEMA,
+    ZPOOL_NAME_SCHEMA, ZfsCompressionType, ZfsRaidLevel, ZpoolListItem,
 };
 
 use crate::tools::disks::{
@@ -228,7 +228,7 @@ pub fn create_zpool(
         Some(name.clone()),
         auth_id,
         to_stdout,
-        move |_worker| {
+        move |worker| {
             info!("create {raidlevel:?} zpool '{name}' on devices '{devices_text}'");
 
             let mut command = std::process::Command::new("zpool");
@@ -311,7 +311,14 @@ pub fn create_zpool(
                 pbs_config::datastore::validate_new_datastore_config(&datastore, &config, &lock)?;
 
                 crate::api2::config::datastore::do_create_datastore(
-                    lock, config, datastore, false, false,
+                    lock,
+                    config,
+                    &worker,
+                    DatastoreBackendType::Filesystem,
+                    datastore,
+                    None,
+                    false,
+                    false,
                 )?;
             }
 
-- 
2.47.3





  parent reply	other threads:[~2026-08-03  9:08 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-03  9:07 [PATCH proxmox{,-backup} v4 00/14] keep datastore config unlocked during long running operations Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox v4 01/14] pbs-api-types: add datastore create maintenance-mode type Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 02/14] api: config: early perform user access checks for datastore creation Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 03/14] api: config: unlocked s3 bucket access check " Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 04/14] api: config: rearrange independent code block " Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 05/14] api/datastore: refactor datastore creation helper logic Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 06/14] datastore: restrict chunk store scope to pbs-datastore crate Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 07/14] datastore: move lock files base path constant to central location Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 08/14] datastore: move file lock helper to centralized place Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 09/14] datastore: add additional check for device number on lock helper Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 10/14] datastore: create lockdir with correct mode for backup user access Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 11/14] api/datastore: use maintenance-mode lock to protect against changes Christian Ebner
2026-08-03  9:07 ` [PATCH proxmox-backup v4 12/14] pbs-config: add helper to check new datastore config sections Christian Ebner
2026-08-03  9:07 ` Christian Ebner [this message]
2026-08-03  9:07 ` [PATCH proxmox-backup v4 14/14] datastore: protect datastore creation by maintenance-mode Christian Ebner

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=20260803090747.265683-14-c.ebner@proxmox.com \
    --to=c.ebner@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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal