]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/V2Writable.pm
*idx: pass smsg in even more places
[public-inbox.git] / lib / PublicInbox / V2Writable.pm
index d39a6f894539b4dce8de87c7360f7724a38b86d7..b45d272263b33b72062a054cc23dea7593c558fd 100644 (file)
@@ -19,6 +19,7 @@ use PublicInbox::OverIdx;
 use PublicInbox::Msgmap;
 use PublicInbox::Spawn qw(spawn popen_rd);
 use PublicInbox::SearchIdx;
+use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
 use IO::Handle; # ->autoflush
 use File::Temp qw(tempfile);
 
@@ -148,12 +149,14 @@ 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, $self);
-       my $idx = idx_shard($self, $num % $self->{shards});
-       $idx->index_raw($len, $msgref, $num, $oid, $mid0, $mime, $self);
-       my $n = $self->{transact_bytes} += $len;
+sub do_idx ($$$$) {
+       my ($self, $msgref, $mime, $smsg) = @_;
+       $smsg->{ds} //= msg_datestamp($mime->header_obj, $self->{autime});
+       $smsg->{ts} //= msg_timestamp($mime->header_obj, $self->{cotime});
+       $self->{over}->add_overview($mime, $smsg);
+       my $idx = idx_shard($self, $smsg->{num} % $self->{shards});
+       $idx->index_raw($msgref, $mime, $smsg);
+       my $n = $self->{transact_bytes} += $smsg->{bytes};
        $n >= (PublicInbox::SearchIdx::BATCH_BYTES * $self->{shards});
 }
 
@@ -176,12 +179,13 @@ sub _add {
        defined $num or return; # duplicate
        defined $mid0 or die "BUG: $mid0 undefined\n";
        my $im = $self->importer;
-       my $cmt = $im->add($mime, undef, $self); # sets $self->{(au|co)time}
+       my $smsg = bless { mid => $mid0, num => $num }, 'PublicInbox::Smsg';
+       my $cmt = $im->add($mime, undef, $smsg); # sets $smsg->{ds|ts|blob}
        $cmt = $im->get_mark($cmt);
        $self->{last_commit}->[$self->{epoch_max}] = $cmt;
 
-       my ($oid, $len, $msgref) = @{$im->{last_object}};
-       if (do_idx($self, $msgref, $mime, $len, $num, $oid, $mid0)) {
+       my $msgref = delete $smsg->{-raw_email};
+       if (do_idx($self, $msgref, $mime, $smsg)) {
                $self->checkpoint;
        }
 
@@ -551,17 +555,21 @@ W: $list
        }
 
        # make sure we really got the OID:
-       my ($oid, $type, $len) = $self->{-inbox}->git->check($expect_oid);
-       $oid eq $expect_oid or die "BUG: $expect_oid not found after replace";
+       my ($blob, $type, $bytes) = $self->{-inbox}->git->check($expect_oid);
+       $blob eq $expect_oid or die "BUG: $expect_oid not found after replace";
 
        # don't leak FDs to Xapian:
        $self->{-inbox}->git->cleanup;
 
        # reindex modified messages:
        for my $smsg (@$need_reindex) {
-               my $num = $smsg->{num};
-               my $mid0 = $smsg->{mid};
-               do_idx($self, \$raw, $new_mime, $len, $num, $oid, $mid0);
+               my $new_smsg = bless {
+                       blob => $blob,
+                       bytes => $bytes,
+                       num => $smsg->{num},
+                       mid => $smsg->{mid},
+               }, 'PublicInbox::Smsg';
+               do_idx($self, \$raw, $new_mime, $new_smsg);
        }
        $rewritten->{rewrites};
 }
@@ -787,7 +795,6 @@ sub import_init {
        my ($self, $git, $packed_bytes, $tmp) = @_;
        my $im = PublicInbox::Import->new($git, undef, undef, $self->{-inbox});
        $im->{bytes_added} = int($packed_bytes / $PACKING_FACTOR);
-       $im->{want_object_info} = 1;
        $im->{lock_path} = undef;
        $im->{path_type} = 'v2';
        $self->{im} = $im unless $tmp;
@@ -949,7 +956,13 @@ sub reindex_oid_m ($$$$;$) {
                }
        }
        $sync->{nr}++;
-       if (do_idx($self, $msgref, $mime, $len, $num, $oid, $mid0)) {
+       my $smsg = bless {
+               bytes => $len,
+               num => $num,
+               blob => $oid,
+               mid => $mid0,
+       }, 'PublicInbox::Smsg';
+       if (do_idx($self, $msgref, $mime, $smsg)) {
                reindex_checkpoint($self, $sync, $git);
        }
 }
@@ -1045,7 +1058,13 @@ sub reindex_oid ($$$$) {
        $sync->{mm_tmp}->mid_delete($mid0) or
                die "failed to delete <$mid0> for article #$num\n";
        $sync->{nr}++;
-       if (do_idx($self, $msgref, $mime, $len, $num, $oid, $mid0)) {
+       my $smsg = bless {
+               bytes => $len,
+               num => $num,
+               blob => $oid,
+               mid => $mid0,
+       }, 'PublicInbox::Smsg';
+       if (do_idx($self, $msgref, $mime, $smsg)) {
                reindex_checkpoint($self, $sync, $git);
        }
 }