diff options
author | Eric Wong <e@80x24.org> | 2022-08-17 09:33:17 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-08-19 09:03:49 +0000 |
commit | 9daf0816e6b2ea7ddcf82e074dad310c888e8c73 (patch) | |
tree | dac3fb29041c28ab44d1ec3ea432706cac48354f /lib/PublicInbox/LeiStore.pm | |
parent | a8ab1ced5ad9efc4ca0b772e0f89c6a2c08229dd (diff) | |
download | public-inbox-9daf0816e6b2ea7ddcf82e074dad310c888e8c73.tar.gz |
Diffstat (limited to 'lib/PublicInbox/LeiStore.pm')
-rw-r--r-- | lib/PublicInbox/LeiStore.pm | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm index d49746cb..277ed6bd 100644 --- a/lib/PublicInbox/LeiStore.pm +++ b/lib/PublicInbox/LeiStore.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org> +# Copyright (C) all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> # # Local storage (cache/memo) for lei(1), suitable for personal/private @@ -335,6 +335,36 @@ sub _docids_and_maybe_kw ($$) { ($docids, [ sort keys %$kw ]); } +sub _reindex_1 { # git->cat_async callback + my ($bref, $hex, $type, $size, $smsg) = @_; + my ($self, $eidx, $tl) = delete @$smsg{qw(-self -eidx -tl)}; + $bref //= _lms_rw($self)->local_blob($hex, 1); + if ($bref) { + my $eml = PublicInbox::Eml->new($bref); + $smsg->{-merge_vmd} = 1; # preserve existing keywords + $eidx->idx_shard($smsg->{num})->index_eml($eml, $smsg); + } else { + warn("E: $type $hex\n"); + } +} + +sub reindex_art { + my ($self, $art) = @_; + my ($eidx, $tl) = eidx_init($self); + my $smsg = $eidx->{oidx}->get_art($art) // return; + return if $smsg->{bytes} == 0; # external-only message + @$smsg{qw(-self -eidx -tl)} = ($self, $eidx, $tl); + $eidx->git->cat_async($smsg->{blob} // die("no blob (#$art)"), + \&_reindex_1, $smsg); +} + +sub reindex_done { + my ($self) = @_; + my ($eidx, $tl) = eidx_init($self); + $eidx->git->async_wait_all; + # ->done to be called via sto_done_request +} + sub add_eml { my ($self, $eml, $vmd, $xoids) = @_; my $im = $self->{-fake_im} // $self->importer; # may create new epoch |