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
next prev 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