about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2019-06-09 02:51:37 +0000
committerEric Wong <e@80x24.org>2019-06-09 04:33:16 +0000
commitb517e2acccd21de1c2e88b21f0314410284745b1 (patch)
treec59edb7a520eaa67175bafdb14b80121b6d6d26d /lib
parent5a4caaca8f52799844d0baf93b8c2595edb04f2b (diff)
downloadpublic-inbox-b517e2acccd21de1c2e88b21f0314410284745b1.tar.gz
It's one ugly sub with lots of parameters, but it's better
than calling a bunch of ugly subs with lots of parameters;
as we'll be needing to call it again when reindexing for
message replacements.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/V2Writable.pm29
1 files changed, 14 insertions, 15 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index a8c33ef4..a435814a 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -116,6 +116,18 @@ sub add {
         });
 }
 
+# indexes a message, returns true if checkpointing is needed
+sub do_idx ($$$$$$$) {
+        my ($self, $msgref, $mime, $len, $num, $oid, $mid0) = @_;
+        $self->{over}->add_overview($mime, $len, $num, $oid, $mid0);
+        my $npart = $self->{partitions};
+        my $part = $num % $npart;
+        my $idx = idx_part($self, $part);
+        $idx->index_raw($len, $msgref, $num, $oid, $mid0, $mime);
+        my $n = $self->{transact_bytes} += $len;
+        $n >= (PublicInbox::SearchIdx::BATCH_BYTES * $npart);
+}
+
 sub _add {
         my ($self, $mime, $check_cb) = @_;
 
@@ -141,13 +153,7 @@ sub _add {
         $self->{last_commit}->[$self->{epoch_max}] = $cmt;
 
         my ($oid, $len, $msgref) = @{$im->{last_object}};
-        $self->{over}->add_overview($mime, $len, $num, $oid, $mid0);
-        my $nparts = $self->{partitions};
-        my $part = $num % $nparts;
-        my $idx = $self->idx_part($part);
-        $idx->index_raw($len, $msgref, $num, $oid, $mid0, $mime);
-        my $n = $self->{transact_bytes} += $len;
-        if ($n > (PublicInbox::SearchIdx::BATCH_BYTES * $nparts)) {
+        if (do_idx($self, $msgref, $mime, $len, $num, $oid, $mid0)) {
                 $self->checkpoint;
         }
 
@@ -772,15 +778,8 @@ sub reindex_oid ($$$$) {
         }
         $sync->{mm_tmp}->mid_delete($mid0) or
                 die "failed to delete <$mid0> for article #$num\n";
-
-        $self->{over}->add_overview($mime, $len, $num, $oid, $mid0);
-        my $nparts = $self->{partitions};
-        my $part = $num % $nparts;
-        my $idx = $self->idx_part($part);
-        $idx->index_raw($len, $msgref, $num, $oid, $mid0, $mime);
-        my $n = $self->{transact_bytes} += $len;
         $sync->{nr}++;
-        if ($n > (PublicInbox::SearchIdx::BATCH_BYTES * $nparts)) {
+        if (do_idx($self, $msgref, $mime, $len, $num, $oid, $mid0)) {
                 $git->cleanup;
                 $sync->{mm_tmp}->atfork_prepare;
                 $self->done; # release lock