From 2e5d47e4c02757c027461149b3e1568d713252b1 Mon Sep 17 00:00:00 2001 From: "Eric Wong (Contractor, The Linux Foundation)" Date: Wed, 21 Mar 2018 08:29:25 +0000 Subject: msgmap: add tmp_clone to create an anonymous copy This will be used to keep track of Message-ID <-> NNTP Article numbers to prevent article number reuse when reindexing. --- lib/PublicInbox/Inbox.pm | 2 +- lib/PublicInbox/Msgmap.pm | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index b9cd4c40..f3070383 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -75,7 +75,7 @@ sub new { _set_uint($opts, 'feedmax', 25); $opts->{nntpserver} ||= $pi_config->{'publicinbox.nntpserver'}; my $dir = $opts->{mainrepo}; - if (defined $dir && -f "$dir/msgmap.sqlite3") { # XXX DIRTY + if (defined $dir && -f "$dir/inbox.lock") { $opts->{version} = 2; } bless $opts, $class; diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index 8e81fba0..78922d36 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -12,6 +12,7 @@ use strict; use warnings; use DBI; use DBD::SQLite; +use File::Temp qw(tempfile); sub new { my ($class, $git_dir, $writable) = @_; @@ -45,6 +46,18 @@ sub new_file { $self; } +# used to keep track of used numeric mappings for v2 reindex +sub tmp_clone { + my ($self) = @_; + my ($fh, $fn) = tempfile(EXLOCK => 0); + $self->{dbh}->sqlite_backup_to_file($fn); + my $tmp = ref($self)->new_file($fn, 1); + $tmp->{dbh}->do('PRAGMA synchronous = OFF'); + $tmp->{tmp_name} = $fn; # SQLite won't work if unlinked, apparently + $fh = undef; + $tmp; +} + # n.b. invoked directly by scripts/xhdr-num2mid sub meta_accessor { my ($self, $key, $value) = @_; @@ -189,4 +202,10 @@ sub mid_set { $sth->execute($num, $mid); } +sub DESTROY { + my ($self) = @_; + delete $self->{dbh}; + unlink $self->{tmp_name} if defined $self->{tmp_name}; +} + 1; -- cgit v1.2.3-24-ge0c7