From: Eric Wong <e@yhbt.net> To: meta@public-inbox.org Subject: [PATCH 10/20] v2writable: use read-only PublicInbox::Git for cat_file Date: Fri, 24 Jul 2020 05:55:56 +0000 [thread overview] Message-ID: <20200724055606.27332-11-e@yhbt.net> (raw) In-Reply-To: <20200724055606.27332-1-e@yhbt.net> We can reduce the number of parameters we pass around on stack and make our read-write and read-only code paths more uniform. --- lib/PublicInbox/V2Writable.pm | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index a1986a469..a85f9e1f8 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -861,16 +861,14 @@ sub atfork_child { $self->{bnote}->[1]; } -sub reindex_checkpoint ($$$) { - my ($self, $sync, $git) = @_; +sub reindex_checkpoint ($$) { + my ($self, $sync) = @_; - $git->cleanup; $sync->{mm_tmp}->atfork_prepare; $self->done; # release lock if (my $pr = $sync->{-opt}->{-progress}) { - my ($bn) = (split('/', $git->{git_dir}))[-1]; - $pr->("$bn ".sprintf($sync->{-regen_fmt}, $sync->{nr})); + $pr->(sprintf($sync->{-regen_fmt}, $sync->{nr})); } # allow -watch or -mda to write... @@ -878,11 +876,11 @@ sub reindex_checkpoint ($$$) { $sync->{mm_tmp}->atfork_parent; } -sub reindex_oid ($$$$) { - my ($self, $sync, $git, $oid) = @_; +sub reindex_oid ($$$) { + my ($self, $sync, $oid) = @_; return if PublicInbox::SearchIdx::too_big($self, $oid); my ($num, $mid0, $len); - my $msgref = $git->cat_file($oid, \$len); + my $msgref = $self->{ibx}->git->cat_file($oid, \$len); return if $len == 0; # purged my $mime = PublicInbox::Eml->new($$msgref); my $mids = mids($mime->header_obj); @@ -951,7 +949,7 @@ sub reindex_oid ($$$$) { }, 'PublicInbox::Smsg'; $smsg->populate($mime, $sync); if (do_idx($self, $msgref, $mime, $smsg)) { - reindex_checkpoint($self, $sync, $git); + reindex_checkpoint($self, $sync); } } @@ -1107,13 +1105,11 @@ sub sync_prepare ($$$) { # our code and blindly injects "d" file history into git repos if (my @leftovers = keys %{delete($sync->{D}) // {}}) { warn('W: unindexing '.scalar(@leftovers)." leftovers\n"); - my $git = $self->{ibx}->git; for my $oid (@leftovers) { $oid = unpack('H*', $oid); $self->{current_info} = "leftover $oid"; - unindex_oid($self, $git, $oid); + unindex_oid($self, $oid); } - $git->cleanup; } return 0 if (!$regen_max && !keys(%{$self->{unindex_range}})); @@ -1135,10 +1131,10 @@ sub unindex_oid_remote ($$$) { } } -sub unindex_oid ($$$;$) { - my ($self, $git, $oid, $unindexed) = @_; +sub unindex_oid ($$;$) { + my ($self, $oid, $unindexed) = @_; my $mm = $self->{mm}; - my $msgref = $git->cat_file($oid); + my $msgref = $self->{ibx}->git->cat_file($oid); my $mime = PublicInbox::Eml->new($msgref); my $mids = mids($mime->header_obj); $mime = $msgref = undef; @@ -1175,7 +1171,7 @@ sub unindex ($$$$) { my $fh = $self->{reindex_pipe} = $git->popen(@cmd, $unindex_range); while (<$fh>) { /\A:\d{6} 100644 $OID ($OID) [AM]\tm$/o or next; - unindex_oid($self, $git, $1, $unindexed); + unindex_oid($self, $1, $unindexed); } delete $self->{reindex_pipe}; close $fh or die "git log failed: \$?=$?"; @@ -1220,9 +1216,9 @@ sub index_epoch ($$$) { if ($f eq 'm') { $sync->{autime} = $at; $sync->{cotime} = $ct; - reindex_oid($self, $sync, $git, $oid); + reindex_oid($self, $sync, $oid); } elsif ($f eq 'd') { - unindex_oid($self, $git, $oid); + unindex_oid($self, $oid); } } delete @$sync{qw(autime cotime)};
next prev parent reply other threads:[~2020-07-24 5:56 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-24 5:55 [PATCH 00/20] indexing changes and new features Eric Wong 2020-07-24 5:55 ` [PATCH 01/20] index: support --rethread switch to fix old indices Eric Wong 2020-07-24 5:55 ` [PATCH 02/20] v2: index forwards (via `git log --reverse') Eric Wong 2020-07-24 5:55 ` [PATCH 03/20] v2writable: introduce idx_stack Eric Wong 2020-07-24 5:55 ` [PATCH 04/20] v2writable: index_sync: reduce fill_alternates calls Eric Wong 2020-07-24 5:55 ` [PATCH 05/20] v2writable: move {autime} and {cotime} into $sync state Eric Wong 2020-07-24 5:55 ` [PATCH 06/20] v2writable: allow >= 40 byte git object IDs Eric Wong 2020-07-24 5:55 ` [PATCH 07/20] v2writable: drop "EPOCH.git indexing $RANGE" progress Eric Wong 2020-07-24 5:55 ` [PATCH 08/20] use consistent {ibx} field for writable code paths Eric Wong 2020-07-24 5:55 ` [PATCH 09/20] search: avoid copying {inboxdir} Eric Wong 2020-07-24 5:55 ` Eric Wong [this message] 2020-07-24 5:55 ` [PATCH 11/20] v2writable: get rid of {reindex_pipe} field Eric Wong 2020-07-24 5:55 ` [PATCH 12/20] v2writable: clarify "epoch" comment Eric Wong 2020-07-24 5:55 ` [PATCH 13/20] xapcmd: set {from} properly for v1 inboxes Eric Wong 2020-07-24 5:56 ` [PATCH 14/20] searchidx: rename _xdb_{acquire,release} => idx_ Eric Wong 2020-07-24 5:56 ` [PATCH 15/20] searchidx: make v1 indexing closer to v2 Eric Wong 2020-07-24 5:56 ` [PATCH 16/20] index+xcpdb: support --no-sync flag Eric Wong 2020-07-24 5:56 ` [PATCH 17/20] v2writable: share log2stack code with v1 Eric Wong 2020-07-24 5:56 ` [PATCH 18/20] searchidx: support async git check Eric Wong 2020-07-24 5:56 ` [PATCH 19/20] searchidx: $batch_cb => v1_checkpoint Eric Wong 2020-07-24 5:56 ` [PATCH 20/20] v2writable: {unindexed} belongs in $sync state Eric Wong
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://public-inbox.org/README * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200724055606.27332-11-e@yhbt.net \ --to=e@yhbt.net \ --cc=meta@public-inbox.org \ --subject='Re: [PATCH 10/20] v2writable: use read-only PublicInbox::Git for cat_file' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://80x24.org/public-inbox.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).