From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 758267D301 for ; Mon, 8 Nov 2021 17:47:04 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 5C8D22904C for ; Mon, 8 Nov 2021 17:47:04 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 0B71729038 for ; Mon, 8 Nov 2021 17:47:03 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id D8C2C42468 for ; Mon, 8 Nov 2021 17:47:02 +0100 (CET) From: Hannes Laimer To: pbs-devel@lists.proxmox.com Date: Mon, 8 Nov 2021 17:46:50 +0100 Message-Id: <20211108164655.25913-1-h.laimer@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.080 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH v3 proxmox-backup 0/5] closes #3071: maintenance mode for datastore X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Nov 2021 16:47:04 -0000 Adds a maintenance mode for datatsores. The type specifies what is still allowed on the ds and what is not. Currently there are two types: read only and offline. 'read only' prevents everything that would write something to the ds, but allows to read from it. 'offline' prevents everything on the datastore, neither operation that write nor operations that read form the datastore are allowed. For the tracking of active operations on a datastore a file is created that contains the count of active read and write operations, this file is then checked when the maintenance mode is changed, and if there are active operations that would conflict with the maintenance type, it wont be updated. An operation is considered "active" as long as the reference that is returned by lookup_datastore is not dropped. In this implementation, the DataStore is wrapped in a small struct that contains the type of the operation and an Arc to the datastore struct itself, like that I can be sure that whenever some operation finished the reference is dropped, furthermore it was necessary to relate a datastore reference to a type of operation. What is also covered with this approach. I am not sure if that's the best way do that, so I am open for suggestions on how to implement this differently, same applies for the naming of things. v3, based on Dominik Csapak 's feedback: - added Operation enum(r/w), as suggested by - added active operation tracking - combine type and message into on field v2: - check for maintenance now directly in lookup_datastore - parameter for checking is now the last acceptable maintenance type, description in commit msg of 2nd patch - ui cleanup Hannes Laimer (5): pbs-api-types: add maintenance type pbs-datastore: add check for maintenance in lookup pbs-datastore: add active operations tracking api2: make maintenance_type updatable ui: add option to change the maintenance type pbs-api-types/src/datastore.rs | 8 +- pbs-api-types/src/lib.rs | 3 + pbs-api-types/src/maintenance.rs | 83 +++++++++++++++++ pbs-datastore/Cargo.toml | 1 + pbs-datastore/src/datastore.rs | 132 ++++++++++++++++++++------- pbs-datastore/src/lib.rs | 3 + pbs-datastore/src/snapshot_reader.rs | 6 +- src/api2/admin/datastore.rs | 48 +++++----- src/api2/backup/mod.rs | 4 +- src/api2/config/datastore.rs | 42 ++++++++- src/api2/pull.rs | 4 +- src/api2/reader/mod.rs | 6 +- src/api2/status.rs | 4 +- src/api2/tape/backup.rs | 6 +- src/api2/tape/restore.rs | 6 +- src/bin/proxmox-backup-api.rs | 1 + src/bin/proxmox-backup-proxy.rs | 6 +- src/server/mod.rs | 17 +++- src/server/prune_job.rs | 4 +- src/server/verify_job.rs | 4 +- www/Makefile | 1 + www/Utils.js | 14 +++ www/datastore/OptionView.js | 9 ++ www/window/MaintenanceOptions.js | 72 +++++++++++++++ 24 files changed, 401 insertions(+), 83 deletions(-) create mode 100644 pbs-api-types/src/maintenance.rs create mode 100644 www/window/MaintenanceOptions.js -- 2.30.2