From 22ad220040a067e1a45b27b2283d515a8372bbfa Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Mon, 7 Apr 2025 10:10:45 +0200 Subject: [PATCH] pbackup: Maintain stat_generaion on move When we move a run from one volume to another and dedup on the target volume, use the smaller (older) generation number of the two source runs which are joined, because both can contribute data. Remove "review" fuse for cmd_move. --- bin/pbackup | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bin/pbackup b/bin/pbackup index cc46e12..2807092 100755 --- a/bin/pbackup +++ b/bin/pbackup @@ -931,8 +931,8 @@ sub move { # newest run not on target volume # - my ($stat_rowid, $src_volume_id, $src_volume_path, $stat_started, $path_path, $job_id) = $dbh->selectrow_array(<<'EOF', undef, $job_name, $dst_volume_id); -SELECT stat.rowid, volume_id, volume_path, stat_started, path_path, job_id + my ($stat_rowid, $src_volume_id, $src_volume_path, $stat_started, $path_path, $job_id, $src_stat_generation) = $dbh->selectrow_array(<<'EOF', undef, $job_name, $dst_volume_id); +SELECT stat.rowid, volume_id, volume_path, stat_started, path_path, job_id, stat_generation FROM stat, volume, job, path WHERE job_name = ? AND volume_id <> ? @@ -967,8 +967,8 @@ EOF redo; } - my ($linkfrom_job_name, $linkfrom_stat_started, $linkfrom_path_path) = $dbh->selectrow_array(<<'EOF', undef, $linkfrom_stat_rowid); -SELECT job_name, stat_started, path_path + my ($linkfrom_job_name, $linkfrom_stat_started, $linkfrom_path_path, $dst_stat_generation) = $dbh->selectrow_array(<<'EOF', undef, $linkfrom_stat_rowid); +SELECT job_name, stat_started, path_path, stat_generation FROM stat, job, path WHERE stat_job_id = job_id AND job_path_id = path_id @@ -983,7 +983,8 @@ EOF rsync_copy("$src_volume_path/$job_name/$run_name/", "$dst_volume_path/$job_name/$run_name", "$dst_volume_path/$linkfrom_job_name/$linkfrom_run_name"); rename("$src_volume_path/$job_name/$run_name", "$src_volume_path/$job_name/$run_name.BEING_DELETED") or die "$src_volume_path/$job_name/$run_name $src_volume_path/$job_name/$run_name.BEING_DELETED : $!\n"; - $dbh->do('UPDATE stat SET stat_volume_id = ? WHERE rowid = ?', undef, $dst_volume_id, $stat_rowid); + my $new_stat_generation = $src_stat_generation < $dst_stat_generation ? $src_stat_generation : $dst_stat_generation; + $dbh->do('UPDATE stat SET stat_volume_id = ?, stat_generation = ? WHERE rowid = ?', undef, $dst_volume_id, $new_stat_generation, $stat_rowid); lck_unlock("RUN.$stat_rowid", LCK_EX); lck_unlock("RUN.$linkfrom_stat_rowid", LCK_EX); } else { @@ -1430,7 +1431,6 @@ sub cmd_expire { } sub cmd_move { - die "move code needs review w.r.t. stat_generation\n"; my ($job_name, $to) = @_; # 'prj_AGHucho' , [ 'C4123' ] upid_register_self(); move($job_name, $to, 'MOVE ');