From: Hannes Laimer <h.laimer@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [PATCH proxmox-backup v4 0/7] fixes #6195: add support for moving groups and namespaces
Date: Wed, 11 Mar 2026 16:13:08 +0100 [thread overview]
Message-ID: <20260311151315.133637-1-h.laimer@proxmox.com> (raw)
Implements moving both backup groups and namespaces within a datastore.
This also adds namespace locking, this allows moves to happen within a
datastore that is otherwise in-use.
# Namespace locking
To make move_group and move_namespace safe against concurrent
operations, a namespace-level locking scheme is introduced in the first
patch.
Lock files live at:
/run/proxmox-backup/locks/<store>/<ns:colon:encoded>/.ns-lock
Two lock modes are used, both non-blocking (timeout=0):
- Shared: held by operations that read from or write into a namespace
(backup, pull/push sync, verify per snapshot, prune per group).
Acquiring a shared lock on ns also acquires shared locks on all
non-root ancestors, so an exclusive lock on any ancestor blocks
all active operations below it.
- Exclusive: held by operations that structurally modify a namespace
(move_namespace, move_group on the group lock).
Acquiring an exclusive lock on ns also acquires shared locks on all
non-root ancestors, mirroring the shared variant so that two
concurrent structural operations on related namespaces contend
correctly.
Locking up the ancestor chain rather than down the subtree keeps the
cost O(depth), bounded by MAX_NAMESPACE_DEPTH (8).
Verify and prune skip gracefully when a namespace lock cannot be
acquired, since a concurrent move is a transient condition.
create_locked_backup_group now returns (owner, ns_guard, group_guard),
all callers updated.
# Moving
## Groups
1. lock source ns (shared), lock target ns (shared), lock group (exclusive)
2. create target type directory
3. FS: rename group directory
S3: copy objects, rename cache, delete source objects
## Namespace
1. lock source ns (exclusive), lock target ns (exclusive)
2. FS: rename namespace directory
S3: - create target ns dirs and markers, both on S3 and local cache
- move groups one by one, if copying fails the group stays at
the source and can be moved afterwards manually
- clean up empty source ns dirs
Hannes Laimer (7):
datastore: add namespace-level locking
datastore: add move_group
datastore: add move_namespace
api: add PUT endpoint for move_group
api: add PUT endpoint for move_namespace
ui: add move group action
ui: add move namespace action
pbs-datastore/src/backup_info.rs | 235 ++++++++++++++++++++++-
pbs-datastore/src/datastore.rs | 308 ++++++++++++++++++++++++++++++-
src/api2/admin/datastore.rs | 76 +++++++-
src/api2/admin/namespace.rs | 84 ++++++++-
src/api2/backup/environment.rs | 4 +
src/api2/backup/mod.rs | 14 +-
src/api2/tape/restore.rs | 9 +-
src/backup/verify.rs | 19 +-
src/server/prune_job.rs | 11 ++
src/server/pull.rs | 8 +-
src/server/push.rs | 6 +
www/Makefile | 2 +
www/datastore/Content.js | 60 ++++++
www/form/NamespaceSelector.js | 11 ++
www/window/GroupMove.js | 56 ++++++
www/window/NamespaceMove.js | 79 ++++++++
16 files changed, 956 insertions(+), 26 deletions(-)
create mode 100644 www/window/GroupMove.js
create mode 100644 www/window/NamespaceMove.js
--
2.47.3
next reply other threads:[~2026-03-11 15:13 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-11 15:13 Hannes Laimer [this message]
2026-03-11 15:13 ` [PATCH proxmox-backup v4 1/7] datastore: add namespace-level locking Hannes Laimer
2026-03-12 15:43 ` Christian Ebner
2026-03-13 7:40 ` Hannes Laimer
2026-03-13 7:56 ` Christian Ebner
2026-03-17 13:03 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 2/7] datastore: add move_group Hannes Laimer
2026-03-12 16:08 ` Christian Ebner
2026-03-13 7:28 ` Hannes Laimer
2026-03-13 7:52 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 3/7] datastore: add move_namespace Hannes Laimer
2026-03-11 15:13 ` [PATCH proxmox-backup v4 4/7] api: add PUT endpoint for move_group Hannes Laimer
2026-03-12 16:17 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 5/7] api: add PUT endpoint for move_namespace Hannes Laimer
2026-03-12 16:19 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 6/7] ui: add move group action Hannes Laimer
2026-03-17 11:43 ` Christian Ebner
2026-03-17 11:48 ` Hannes Laimer
2026-03-11 15:13 ` [PATCH proxmox-backup v4 7/7] ui: add move namespace action Hannes Laimer
2026-03-12 16:21 ` [PATCH proxmox-backup v4 0/7] fixes #6195: add support for moving groups and namespaces Christian Ebner
2026-03-17 13:47 ` 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=20260311151315.133637-1-h.laimer@proxmox.com \
--to=h.laimer@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