]> Sergey Matveev's repositories - public-inbox.git/commitdiff
msgmap: ->new_file to supports $ibx arg, drop ->new
authorEric Wong <e@80x24.org>
Tue, 12 Oct 2021 11:47:04 +0000 (11:47 +0000)
committerEric Wong <e@80x24.org>
Tue, 12 Oct 2021 21:46:36 +0000 (21:46 +0000)
The original Msgmap->new API was v1-specific and not necessary.
The ->new_file API now supports an $ibx object being passed to
it, simplify -no_fsync use.  It will also make an upcoming
change easier...

lib/PublicInbox/Inbox.pm
lib/PublicInbox/InboxWritable.pm
lib/PublicInbox/Msgmap.pm
lib/PublicInbox/SearchIdx.pm
lib/PublicInbox/V2Writable.pm
t/altid.t
t/altid_v2.t
t/filter_rubylang.t
t/init.t
t/msgmap.t

index 61d153bfab289c4885bfe828163ab48891467754..74b8a74f8856e7992fd29b742ff89f75d1dddaf3 100644 (file)
@@ -148,7 +148,7 @@ sub mm {
        $self->{mm} //= eval {
                require PublicInbox::Msgmap;
                _cleanup_later($self);
-               PublicInbox::Msgmap->new_file(mm_file($self));
+               PublicInbox::Msgmap->new_file($self);
        } // ($req ? croak("E: $@") : undef);
 }
 
index 655397810c038b3f3f2fb495cfd57602e46dc5c2..17dfbe18500a6dfa00e87f50209baec4126f61c3 100644 (file)
@@ -47,7 +47,7 @@ sub _init_v1 {
                require PublicInbox::Msgmap;
                my $sidx = PublicInbox::SearchIdx->new($self, 1); # just create
                $sidx->begin_txn_lazy;
-               my $mm = PublicInbox::Msgmap->new($self->{inboxdir}, 1);
+               my $mm = PublicInbox::Msgmap->new_file($self, 1);
                if (defined $skip_artnum) {
                        $mm->{dbh}->begin_work;
                        $mm->skip_artnum($skip_artnum);
index 978730e2fe59deb6966acaf37f0bc3596eb0c402..94a0cbeb5f6a6f6f445839b45f0f73d5c5c71406 100644 (file)
@@ -14,19 +14,17 @@ use DBI;
 use DBD::SQLite;
 use PublicInbox::Over;
 use PublicInbox::Spawn;
-
-sub new {
-       my ($class, $git_dir, $writable) = @_;
-       my $d = "$git_dir/public-inbox";
-       if ($writable && !-d $d && !mkdir $d) {
-               my $err = $!;
-               -d $d or die "$d not created: $err";
-       }
-       new_file($class, "$d/msgmap.sqlite3", $writable);
-}
+use Scalar::Util qw(blessed);
 
 sub new_file {
-       my ($class, $f, $rw) = @_;
+       my ($class, $ibx, $rw) = @_;
+       my $f;
+       if (blessed($ibx)) {
+               $f = $ibx->mm_file;
+               $rw = 2 if $rw && $ibx->{-no_fsync};
+       } else {
+               $f = $ibx;
+       }
        return if !$rw && !-r $f;
 
        my $self = bless { filename => $f }, $class;
index bebe904b783a990491c41ac1a8cd667a1530d733..a2ed94993993ac6d03c5505bad916a5f192583a7 100644 (file)
@@ -453,8 +453,7 @@ sub _msgmap_init ($) {
        die "BUG: _msgmap_init is only for v1\n" if $self->{ibx}->version != 1;
        $self->{mm} //= eval {
                require PublicInbox::Msgmap;
-               my $rw = $self->{ibx}->{-no_fsync} ? 2 : 1;
-               PublicInbox::Msgmap->new($self->{ibx}->{inboxdir}, $rw);
+               PublicInbox::Msgmap->new_file($self->{ibx}, 1);
        };
 }
 
index d04cdda6e3dc2eeaff75096fa92c25e0e96ecd0e..efcc1fc21a18e0a23ba26cf12311d7355220bd7f 100644 (file)
@@ -267,9 +267,7 @@ sub _idx_init { # with_umask callback
 
        # Now that all subprocesses are up, we can open the FDs
        # for SQLite:
-       my $mm = $self->{mm} = PublicInbox::Msgmap->new_file(
-                               "$ibx->{inboxdir}/msgmap.sqlite3",
-                               $ibx->{-no_fsync} ? 2 : 1);
+       my $mm = $self->{mm} = PublicInbox::Msgmap->new_file($ibx, 1);
        $mm->{dbh}->begin_work;
 }
 
index 87635b19a37513233517679a1bcf292694d905f2..3ce08a6a42ab74b19d6d045bb0650311fa3ebad1 100644 (file)
--- a/t/altid.t
+++ b/t/altid.t
@@ -15,7 +15,7 @@ my $altid = [ "serial:gmane:file=$alt_file" ];
 my $ibx;
 
 {
-       my $mm = PublicInbox::Msgmap->new_file($alt_file, 1);
+       my $mm = PublicInbox::Msgmap->new_file($alt_file, 2);
        is($mm->mid_set(1234, 'a@example.com'), 1, 'mid_set once OK');
        ok(0 == $mm->mid_set(1234, 'a@example.com'), 'mid_set not idempotent');
        ok(0 == $mm->mid_set(1, 'a@example.com'), 'mid_set fails with dup MID');
@@ -48,7 +48,7 @@ EOF
 };
 
 {
-       my $mm = PublicInbox::Msgmap->new_file($alt_file, 1);
+       my $mm = PublicInbox::Msgmap->new_file($alt_file, 2);
        my ($min, $max) = $mm->minmax;
        my $num = $mm->mid_insert('b@example.com');
        ok($num > $max, 'auto-increment goes beyond mid_set');
index 47ebec85ff8e9b42fd0afbd12fcff3fb5fcfcb27..281a09d51dd0cfe4af5ed0b5590ec97b8a74b68c 100644 (file)
@@ -13,7 +13,7 @@ my $altid = [ "serial:gmane:file=$another" ];
 my $ibx = create_inbox 'v2', version => 2, indexlevel => 'medium',
                        altid => $altid, sub {
        my ($im, $ibx) = @_;
-       my $mm = PublicInbox::Msgmap->new_file("$ibx->{inboxdir}/$another", 1);
+       my $mm = PublicInbox::Msgmap->new_file("$ibx->{inboxdir}/$another", 2);
        $mm->mid_set(1234, 'a@example.com') == 1 or BAIL_OUT 'mid_set once';
        ok(0 == $mm->mid_set(1234, 'a@example.com'), 'mid_set not idempotent');
        ok(0 == $mm->mid_set(1, 'a@example.com'), 'mid_set fails with dup MID');
@@ -26,7 +26,7 @@ Message-ID: <a@example.com>
 hello world gmane:666
 EOF
 };
-my $mm = PublicInbox::Msgmap->new_file("$ibx->{inboxdir}/$another", 1);
+my $mm = PublicInbox::Msgmap->new_file("$ibx->{inboxdir}/$another", 2);
 ok(0 == $mm->mid_set(1234, 'a@example.com'), 'mid_set not idempotent');
 ok(0 ==  $mm->mid_set(1, 'a@example.com'), 'mid_set fails with dup MID');
 my $mset = $ibx->search->mset('gmane:1234');
index 817994512125c8baa435fee8169e4cae87e4954a..4e9695e13eb663a361760e43418aa9b5a4c5ff1f 100644 (file)
@@ -44,7 +44,7 @@ EOF
        $mime = PublicInbox::Eml->new($msg);
        $ret = $f->delivery($mime);
        is($ret, $mime, "delivery successful");
-       my $mm = PublicInbox::Msgmap->new($git_dir);
+       my $mm = $ibx->mm;
        is($mm->num_for('a@b'), 12, 'MM entry created based on X-ML-Count');
 
        $msg = <<'EOF';
index 752e5af93c0b60ce519cf838331494a2d5c8c472..4bec6a2f31311a66e0ea5777440aec30c67b68e1 100644 (file)
--- a/t/init.t
+++ b/t/init.t
@@ -199,7 +199,8 @@ SKIP: {
        $err = '';
        ok(run_script([qw(-mda --no-precheck)], $env, $rdr), 'deliver V1');
        diag "err=$err" if $err;
-       $mm = PublicInbox::Msgmap->new("$tmpdir/skip4");
+       $mm = PublicInbox::Msgmap->new_file(
+                       "$tmpdir/skip4/public-inbox/msgmap.sqlite3");
        $n = $mm->num_for($mid);
        is($n, 13, 'V1 NNTP article numbers skipped via --skip-artnum');
 }
index 2d462dfb0fa5952114331ab83266a3a968946469..a3b7200f16a566c39041f586c9fc9f97b665de3e 100644 (file)
@@ -7,7 +7,8 @@ use PublicInbox::TestCommon;
 require_mods('DBD::SQLite');
 use_ok 'PublicInbox::Msgmap';
 my ($tmpdir, $for_destroy) = tmpdir();
-my $d = PublicInbox::Msgmap->new($tmpdir, 1);
+my $f = "$tmpdir/msgmap.sqlite3";
+my $d = PublicInbox::Msgmap->new_file($f, 1);
 
 my %mid2num;
 my %num2mid;
@@ -50,7 +51,7 @@ is($d->mid_delete('a@b') + 0, 0, 'delete again returns zero');
 is(undef, $d->num_for('a@b'), 'num_for fails on deleted msg');
 $d = undef;
 
-ok($d = PublicInbox::Msgmap->new($tmpdir, 1), 'idempotent DB creation');
+ok($d = PublicInbox::Msgmap->new_file($f, 1), 'idempotent DB creation');
 my ($min, $max) = $d->minmax;
 ok($min > 0, "article min OK");
 ok($max > 0 && $max < 10, "article max OK");