From 36c398b072a0d010a5a3bd55e92dfc9155329bdc Mon Sep 17 00:00:00 2001 From: Donald Buczek <buczek@molgen.mpg.de> Date: Mon, 7 Apr 2025 10:10:45 +0200 Subject: [PATCH] pbackup: Maintain stat_generation 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 ');