[pbs-devel] [PATCH v3 proxmox-backup 45/58] client: pxar: add method for metadata comparison

Christian Ebner c.ebner at proxmox.com
Fri Apr 5 10:14:52 CEST 2024


On 4/5/24 10:08, Fabian Grünbichler wrote:
> Quoting Christian Ebner (2024-03-28 13:36:54)
>> Adds a method to compare the metadata of the current file entry
>> against the metadata of the entry looked up in the previous backup
>> snapshot.
>>
>> If the metadata matched, the start offset for the payload stream is
>> returned.
>>
>> This is in preparation for reusing payload chunks for unchanged files.
>>
>> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
>> ---
>> changes since version 2:
>> - refactored to new padding based threshold
>>
>>   pbs-client/src/pxar/create.rs | 31 ++++++++++++++++++++++++++++++-
>>   1 file changed, 30 insertions(+), 1 deletion(-)
>>
>> diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
>> index 79925bba2..c64084a74 100644
>> --- a/pbs-client/src/pxar/create.rs
>> +++ b/pbs-client/src/pxar/create.rs
>> @@ -21,7 +21,7 @@ use pbs_datastore::index::IndexFile;
>>   use proxmox_sys::error::SysError;
>>   use pxar::accessor::aio::{Accessor, Directory};
>>   use pxar::encoder::{LinkOffset, PayloadOffset, SeqWrite};
>> -use pxar::Metadata;
>> +use pxar::{EntryKind, Metadata};
>>   
>>   use proxmox_io::vec;
>>   use proxmox_lang::c_str;
>> @@ -466,6 +466,35 @@ impl Archiver {
>>           .boxed()
>>       }
>>   
>> +    async fn is_reusable_entry(
>> +        &mut self,
>> +        previous_metadata_accessor: &mut Directory<LocalDynamicReadAt<RemoteChunkReader>>,
>> +        file_name: &Path,
>> +        stat: &FileStat,
>> +        metadata: &Metadata,
>> +    ) -> Result<Option<u64>, Error> {
>> +        if stat.st_nlink > 1 {
>> +            log::debug!("re-encode: {file_name:?} has hardlinks.");
>> +            return Ok(None);
>> +        }
> 
> it would be nice if we had a way to handle those as well.. what's the current
> blocker? shouldn't we be able to use the same scheme as for regular archives?
> 
> first encounter adds (possibly re-uses) the payload and remembers the offset,
> subsequent ones just add another reference/meta entry?

True, this is a leftover from the initial approach with the appendix 
section instead of the split archive where it caused issues.





More information about the pbs-devel mailing list