diff options
author | Eric Wong <e@80x24.org> | 2021-09-23 00:46:25 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-09-23 04:52:09 +0000 |
commit | 63d7b8ceee55a34cde983e8548d5ce61050d2891 (patch) | |
tree | b893451f9164ce2c7c8f48664ca00865427e24c7 /lib/PublicInbox/Git.pm | |
parent | 356439a571c536eaa487031802b436d087113f4f (diff) | |
download | public-inbox-63d7b8ceee55a34cde983e8548d5ce61050d2891.tar.gz |
Neither Inboxes nor ExtSearch objects were retrying correctly when there are live git processes, but the inboxes were getting rescanned for search or other reasons. Ensure the scan retries eventually if there's live processes. We also need to update the cleanup task to detect Xapian shard count changes, since Xapian ->reopen is enough to detect any other Xapian changes. Otherwise, we just issue an inexpensive ->reopen call and let Xapian check whether there's anything worth reopening. This also lets us eliminate the Devel::Peek dependency.
Diffstat (limited to 'lib/PublicInbox/Git.pm')
-rw-r--r-- | lib/PublicInbox/Git.pm | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index cf51239f..3c577ab3 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -400,7 +400,7 @@ sub cleanup { delete $self->{inflight_c}; _destroy($self, qw(cat_rbuf in out pid)); _destroy($self, qw(chk_rbuf in_c out_c pid_c err_c)); - !!($self->{pid} || $self->{pid_c}); + defined($self->{pid}) || defined($self->{pid_c}); } @@ -523,18 +523,25 @@ sub manifest_entry { $ent; } +# returns true if there are pending cat-file processes sub cleanup_if_unlinked { my ($self) = @_; return cleanup($self) if $^O ne 'linux'; # Linux-specific /proc/$PID/maps access # TODO: support this inside git.git + my $ret = 0; for my $fld (qw(pid pid_c)) { my $pid = $self->{$fld} // next; - open my $fh, '<', "/proc/$pid/maps" or next; + open my $fh, '<', "/proc/$pid/maps" or return cleanup($self); while (<$fh>) { + # n.b. we do not restart for unlinked multi-pack-index + # since it's not too huge, and the startup cost may + # be higher. return cleanup($self) if /\.(?:idx|pack) \(deleted\)$/; } + ++$ret; } + $ret; } 1; |