]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Search.pm
search: add note about SCHEMA_VERSION 15
[public-inbox.git] / lib / PublicInbox / Search.pm
index d861cf471932aacddff0915f6ede3e8ec103fd6e..88c8dc70e17c3bedf3883f07555894b6c54eb7c3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2018 all contributors <meta@public-inbox.org>
+# Copyright (C) 2015-2019 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 # based on notmuch, but with no concept of folders, files or flags
 #
@@ -54,6 +54,9 @@ use constant {
        # 13 - fix threading for empty References/In-Reply-To
        #      (commit 83425ef12e4b65cdcecd11ddcb38175d4a91d5a0)
        # 14 - fix ghost root vivification
+       # 15 - see public-inbox-v2-format(5)
+       #      further bumps likely unnecessary, we'll suggest in-place
+       #      "--reindex" use for further fixes and tweaks
        SCHEMA_VERSION => 15,
 };
 
@@ -126,14 +129,14 @@ chomp @HELP;
 sub xdir ($;$) {
        my ($self, $rdonly) = @_;
        if ($self->{version} == 1) {
-               "$self->{mainrepo}/public-inbox/xapian" . SCHEMA_VERSION;
+               "$self->{inboxdir}/public-inbox/xapian" . SCHEMA_VERSION;
        } else {
-               my $dir = "$self->{mainrepo}/xap" . SCHEMA_VERSION;
+               my $dir = "$self->{inboxdir}/xap" . SCHEMA_VERSION;
                return $dir if $rdonly;
 
-               my $part = $self->{partition};
-               defined $part or die "partition not given";
-               $dir .= "/$part";
+               my $shard = $self->{shard};
+               defined $shard or die "shard not given";
+               $dir .= "/$shard";
        }
 }
 
@@ -143,15 +146,15 @@ sub _xdb ($) {
        my ($xdb, $slow_phrase);
        my $qpf = \($self->{qp_flags} ||= $QP_FLAGS);
        if ($self->{version} >= 2) {
-               foreach my $part (<$dir/*>) {
-                       -d $part && $part =~ m!/\d+\z! or next;
-                       my $sub = Search::Xapian::Database->new($part);
+               foreach my $shard (<$dir/*>) {
+                       -d $shard && $shard =~ m!/[0-9]+\z! or next;
+                       my $sub = Search::Xapian::Database->new($shard);
                        if ($xdb) {
                                $xdb->add_database($sub);
                        } else {
                                $xdb = $sub;
                        }
-                       $slow_phrase ||= -f "$part/iamchert";
+                       $slow_phrase ||= -f "$shard/iamchert";
                }
        } else {
                $slow_phrase = -f "$dir/iamchert";
@@ -170,17 +173,12 @@ sub xdb ($) {
 }
 
 sub new {
-       my ($class, $mainrepo, $altid) = @_;
-       my $version = 1;
-       my $ibx = $mainrepo;
-       if (ref $ibx) {
-               $version = $ibx->{version} || 1;
-               $mainrepo = $ibx->{mainrepo};
-       }
+       my ($class, $ibx) = @_;
+       ref $ibx or die "BUG: expected PublicInbox::Inbox object: $ibx";
        my $self = bless {
-               mainrepo => $mainrepo,
-               altid => $altid,
-               version => $version,
+               inboxdir => $ibx->{inboxdir},
+               altid => $ibx->{altid},
+               version => $ibx->{version} // 1,
        }, $class;
        my $dir = xdir($self, 1);
        $self->{over_ro} = PublicInbox::Over->new("$dir/over.sqlite3");
@@ -228,7 +226,9 @@ sub retry_reopen {
                        warn "reopen try #$i on $@\n";
                        reopen($self);
                } else {
-                       warn "ref: ", ref($@), "\n";
+                       # let caller decide how to spew, because ExtMsg queries
+                       # get wonky and trigger:
+                       # "something terrible happened at .../Xapian/Enquire.pm"
                        die;
                }
        }