Skip to content

Commit

Permalink
pbackup: Maintain stat_generation on move
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
donald committed Apr 7, 2025
1 parent d429bd2 commit 36c398b
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions bin/pbackup
Original file line number Diff line number Diff line change
Expand Up @@ -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 <> ?
Expand Down Expand Up @@ -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
Expand All @@ -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 {
Expand Down Expand Up @@ -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 ');
Expand Down

0 comments on commit 36c398b

Please sign in to comment.