about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-10-27 07:54:23 +0000
committerEric Wong <e@80x24.org>2020-11-07 10:18:55 +0000
commit549aab226464e93345b466bbf5ae04d952230945 (patch)
treedad6d06ddcef88a934584b3ce7809996d37cb579
parent98c03415fed31cce80f8b2030aee9311890c79d6 (diff)
downloadpublic-inbox-549aab226464e93345b466bbf5ae04d952230945.tar.gz
Having a special init path for external indices is probably
easier than further overloading SearchIdx->new initialization
to work without an Inbox object.
-rw-r--r--lib/PublicInbox/SearchIdx.pm13
-rw-r--r--lib/PublicInbox/SearchIdxShard.pm7
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index 0458d9c3..029b2726 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -942,4 +942,17 @@ sub worker_done {
         die "$$ $0 still in transaction\n" if $self->{txn};
 }
 
+sub eidx_shard_new {
+        my ($class, $eidx, $shard) = @_;
+        my $self = bless {
+                xpfx => $eidx->{xpfx},
+                indexlevel => $eidx->{indexlevel},
+                -skip_docdata => 1,
+                shard => $shard,
+                creat => 1,
+        }, $class;
+        $self->{-set_indexlevel_once} = 1 if $self->{indexlevel} eq 'medium';
+        $self;
+}
+
 1;
diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm
index fa77a9f9..ac01340c 100644
--- a/lib/PublicInbox/SearchIdxShard.pm
+++ b/lib/PublicInbox/SearchIdxShard.pm
@@ -12,9 +12,10 @@ use IO::Handle (); # autoflush
 use PublicInbox::Eml;
 
 sub new {
-        my ($class, $v2w, $shard) = @_;
+        my ($class, $v2w, $shard) = @_; # v2w may be ExtSearchIdx
         my $ibx = $v2w->{ibx};
-        my $self = $class->SUPER::new($ibx, 1, $shard);
+        my $self = $ibx ? $class->SUPER::new($ibx, 1, $shard)
+                        : $class->eidx_shard_new($v2w, $shard);
         # create the DB before forking:
         $self->idx_acquire;
         $self->set_metadata_once;
@@ -58,7 +59,7 @@ sub eml ($$) {
 # this reads all the writes to $self->{w} from the parent process
 sub shard_worker_loop ($$$$$) {
         my ($self, $v2w, $r, $shard, $bnote) = @_;
-        $0 = "pi-v2-shard[$shard]";
+        $0 = "shard[$shard]";
         $self->begin_txn_lazy;
         while (my $line = readline($r)) {
                 $v2w->{current_info} = "[$shard] $line";