[pbs-devel] [PATCH proxmox-backup v5 1/2] fix #5439: allow to reuse existing datastore
Gabriel Goller
g.goller at proxmox.com
Thu Aug 29 14:58:25 CEST 2024
On 29.08.2024 13:58, Wolfgang Bumiller wrote:
>On Thu, Aug 29, 2024 at 01:56:46PM GMT, Wolfgang Bumiller wrote:
>> Just noticed another thing...
>>
>> On Thu, Aug 29, 2024 at 12:45:10PM GMT, Gabriel Goller wrote:
>> > @@ -70,21 +70,43 @@ pub(crate) fn do_create_datastore(
>> > _lock: BackupLockGuard,
>> > mut config: SectionConfigData,
>> > datastore: DataStoreConfig,
>> > + reuse_datastore: bool,
>> > ) -> Result<(), Error> {
>> > let path: PathBuf = datastore.path.clone().into();
>> >
>> > + if path.parent().is_none() {
>> > + bail!("cannot create datastore in root path");
>> > + }
>> > +
>> > let tuning: DatastoreTuning = serde_json::from_value(
>> > DatastoreTuning::API_SCHEMA
>> > .parse_property_string(datastore.tuning.as_deref().unwrap_or(""))?,
>> > )?;
>> > - let backup_user = pbs_config::backup_user()?;
>> > - let _store = ChunkStore::create(
>> > - &datastore.name,
>> > - path,
>> > - backup_user.uid,
>> > - backup_user.gid,
>> > - tuning.sync_level.unwrap_or_default(),
>> > - )?;
>> > +
>> > + if reuse_datastore {
>> > + ChunkStore::verify_chunkstore(&path)?;
>> > + } else {
>> > + let datastore_empty = std::fs::read_dir(path.clone()).map_or(true, |mut d| {
>>
>> No need to clone() path here.
>>
>> > + d.all(|dir| {
>> > + dir.map_or(false, |file| {
>> > + file.file_name()
>> > + .to_str()
>> > + .map_or(false, |name| name.starts_with('.'))
>>
>> IMO if we manage to open the directory, but the iteration fails, we
>> should actually fail here as well.
>> Also we should not just ignore *anything* starting with a `.`, but
>> specifically only exactly `.` and `..`.
>>
>> Something like
>>
>> let datastore_empty = 'empty: {
>> if let Ok(dir) = std::fs::read_dir(&path) {
>> for file in dir {
>> let name = file?.file_name();
>> let name = name.as_encoded_bytes();
>> if name != b"." && name != b".." {
>> break 'empty false;
>
>Ummm
>Actually the `bail!()` could just be moved up here and the labeled block
>skipped, duh ;-)
Done!
Also reverted to `starts_with('.')` as discussed offlist to accomodate
for files such as '.zfs'.
Thanks for reviewing!
Posted a v6!
More information about the pbs-devel
mailing list