From: Eric Wong Date: Mon, 10 Aug 2020 02:11:57 +0000 (+0000) Subject: msgmap: tmp_clone: simplify + meaningful filename X-Git-Tag: v1.6.0~153 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=6f9a86728b98887ae0d76234afb2679b6f6dd4ae;ds=sidebyside msgmap: tmp_clone: simplify + meaningful filename Trying to use the newer ->sqlite_backup_to_dbh method doesn't seem worth it, as we'll have to support DBD::SQLite <= 1.60 another decade or more. Dumping 'msgmap-XXXXXXX' into $INBOX_DIR can appear a bit confusing to users, so give it a "mm_tmp-$PID-XXXXXXXX" name to emphasize it's a temporary file tied to a given PID. We also don't want to penalize read-only daemons with loading File::Temp, so do it lazily. --- diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index e7f7e2c9..7290959d 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -9,10 +9,8 @@ # This is maintained by ::SearchIdx package PublicInbox::Msgmap; use strict; -use warnings; use DBI; use DBD::SQLite; -use File::Temp qw(tempfile); use PublicInbox::Over; use PublicInbox::Spawn; @@ -50,18 +48,13 @@ sub new_file { # used to keep track of used numeric mappings for v2 reindex sub tmp_clone { my ($self, $dir) = @_; - my ($fh, $fn) = tempfile('msgmap-XXXXXXXX', EXLOCK => 0, DIR => $dir); + require File::Temp; + my $tmp = "mm_tmp-$$-XXXXXX"; + my ($fh, $fn) = File::Temp::tempfile($tmp, EXLOCK => 0, DIR => $dir); PublicInbox::Spawn::nodatacow_fd(fileno($fh)); - my $tmp; - if ($self->{dbh}->can('sqlite_backup_to_dbh')) { - $tmp = ref($self)->new_file($fn, 2); - $tmp->{dbh}->do('PRAGMA journal_mode = MEMORY'); - $self->{dbh}->sqlite_backup_to_dbh($tmp->{dbh}); - } else { # DBD::SQLite <= 1.61_01 - $self->{dbh}->sqlite_backup_to_file($fn); - $tmp = ref($self)->new_file($fn, 2); - $tmp->{dbh}->do('PRAGMA journal_mode = MEMORY'); - } + $self->{dbh}->sqlite_backup_to_file($fn); + $tmp = ref($self)->new_file($fn, 2); + $tmp->{dbh}->do('PRAGMA journal_mode = MEMORY'); $tmp->{pid} = $$; $tmp; }