From: Christian Ebner <c.ebner@proxmox.com>
To: Hannes Laimer <h.laimer@proxmox.com>,
Proxmox Backup Server development discussion
<pbs-devel@lists.proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox-backup v7 04/20] datastore: add helper for checking if a removable datastore is available
Date: Mon, 22 Apr 2024 10:23:37 +0200 [thread overview]
Message-ID: <eb9765da-fdbc-4991-9634-2939eaee3c25@proxmox.com> (raw)
In-Reply-To: <D0O7K1XMX34K.3CZFCK869IL4B@proxmox.com>
On 4/19/24 17:35, Hannes Laimer wrote:
> On Fri Apr 19, 2024 at 11:14 AM CEST, Christian Ebner wrote:
>> On 4/19/24 10:58, Hannes Laimer wrote:
>>> Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
>>> ---
>>> pbs-api-types/src/maintenance.rs | 2 +-
>>> pbs-datastore/src/datastore.rs | 44 ++++++++++++++++++++++++++++++++
>>> pbs-datastore/src/lib.rs | 2 +-
>>> 3 files changed, 46 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/pbs-api-types/src/maintenance.rs b/pbs-api-types/src/maintenance.rs
>>> index fd4d3416..4f653ec7 100644
>>> --- a/pbs-api-types/src/maintenance.rs
>>> +++ b/pbs-api-types/src/maintenance.rs
>>> @@ -81,7 +81,7 @@ impl MaintenanceMode {
>>> /// Used for deciding whether the datastore is cleared from the internal cache after the last
>>> /// task finishes, so all open files are closed.
>>> pub fn is_offline(&self) -> bool {
>>> - self.ty == MaintenanceType::Offline
>>> + self.ty == MaintenanceType::Offline || self.ty == MaintenanceType::Unmount
>>> }
>>>
>>> pub fn check(&self, operation: Option<Operation>) -> Result<(), Error> {
>>> diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs
>>> index f95da761..274f1506 100644
>>> --- a/pbs-datastore/src/datastore.rs
>>> +++ b/pbs-datastore/src/datastore.rs
>>> @@ -14,6 +14,7 @@ use proxmox_schema::ApiType;
>>> use proxmox_sys::error::SysError;
>>> use proxmox_sys::fs::{file_read_optional_string, replace_file, CreateOptions};
>>> use proxmox_sys::fs::{lock_dir_noblock, DirLockGuard};
>>> +use proxmox_sys::linux::procfs::MountInfo;
>>> use proxmox_sys::process_locker::ProcessLockSharedGuard;
>>> use proxmox_sys::WorkerTaskContext;
>>> use proxmox_sys::{task_log, task_warn};
>>> @@ -49,6 +50,39 @@ pub fn check_backup_owner(owner: &Authid, auth_id: &Authid) -> Result<(), Error>
>>> Ok(())
>>> }
>>>
>>> +/// check if a removable datastore is currently available/mounted by using the UUID
>>> +/// to find the `/dev/sdX` path and checking in /proc/self/mountinfo for entries containing it.
>>> +/// If it should mounted, but not in the expected path, so config.path, it is considered not
>>> +/// available.
>>> +pub fn is_datastore_available(config: &DataStoreConfig) -> bool {
>>> + config.backing_device.as_ref().map_or(true, |uuid| {
>>> + if let Ok(store_dev_path) = std::fs::read_link(Path::new("/dev/disk/by-uuid").join(uuid))
>>> + .map(|p| p.to_string_lossy().into_owned())
>>
>> while this probably never happens for this case, the `to_string_lossy`
>> might replace non UTF-8 characters here.
>>
>> So I think this and the next two map calls should be replaced with a
>> `canonicalize` of `PathBuf`, which also resolves the symlink?
>>
>> https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.canonicalize
>>
>
> doesn't work, I'm not 100% sure, but I think it's beacuse it uses the
> running dir of the binary as a base
True, but we can work around that by adding the base if the symlink is a
relative path. This should do the trick:
```
config.backing_device.as_ref().map_or(true, |uuid| {
let mut target = PathBuf::from("/dev/disk/by-uuid");
if let Ok(store_dev_path) = std::fs::read_link(target.join(uuid))
.map(|link_target| {
// Replaces current path buffer content if link_target
is absolute path
//
https://docs.rs/rustc-std-workspace-std/latest/std/path/struct.PathBuf.html#method.push
target.push(link_target);
target
})
.and_then(|target| target.canonicalize())
{
```
_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
next prev parent reply other threads:[~2024-04-22 8:24 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-19 8:58 [pbs-devel] [PATCH proxmox-backup v7 00/20] add removable datastores Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 01/20] tools: add disks utility functions Hannes Laimer
2024-04-19 9:54 ` Christian Ebner
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 02/20] pbs-api-types: add backing-device to DataStoreConfig Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 03/20] disks: add UUID to partition info Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 04/20] datastore: add helper for checking if a removable datastore is available Hannes Laimer
2024-04-19 9:14 ` Christian Ebner
2024-04-19 15:35 ` Hannes Laimer
2024-04-22 8:23 ` Christian Ebner [this message]
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 05/20] api: admin: add (un)mount endpoint for removable datastores Hannes Laimer
2024-04-19 10:21 ` Christian Ebner
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 06/20] api: removable datastore creation Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 07/20] api: disks list: add exclude-used flag Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 08/20] pbs-api-types: add removable/is-available flag to DataStoreListItem Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 09/20] bin: manager: add (un)mount command Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 10/20] add auto-mounting for removable datastores Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 11/20] datastore: handle deletion of removable datastore properly Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 12/20] docs: add removable datastores section Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 13/20] ui: add partition selector form Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 14/20] ui: add removable datastore creation support Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 15/20] ui: add (un)mount button to summary Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 16/20] ui: tree: render unmounted datastores correctly Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 17/20] ui: utils: make parseMaintenanceMode more robust Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 18/20] ui: add datastore status mask for unmounted removable datastores Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 19/20] ui: maintenance: fix disable msg field if no type is selected Hannes Laimer
2024-04-19 8:58 ` [pbs-devel] [PATCH proxmox-backup v7 20/20] ui: render 'unmount' maintenance mode correctly Hannes Laimer
2024-04-19 10:10 ` [pbs-devel] [PATCH proxmox-backup v7 00/20] add removable datastores Dietmar Maurer
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=eb9765da-fdbc-4991-9634-2939eaee3c25@proxmox.com \
--to=c.ebner@proxmox.com \
--cc=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal