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 ');