public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH proxmox-backup v4 0/7] fixes #6195: add support for moving groups and namespaces
@ 2026-03-11 15:13 Hannes Laimer
  2026-03-11 15:13 ` [PATCH proxmox-backup v4 1/7] datastore: add namespace-level locking Hannes Laimer
                   ` (7 more replies)
  0 siblings, 8 replies; 20+ messages in thread
From: Hannes Laimer @ 2026-03-11 15:13 UTC (permalink / raw)
  To: pbs-devel

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





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

end of thread, other threads:[~2026-03-17 13:03 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-11 15:13 [PATCH proxmox-backup v4 0/7] fixes #6195: add support for moving groups and namespaces Hannes Laimer
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

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