diff options
author | Eric Wong <e@yhbt.net> | 2021-01-17 07:09:59 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-01-18 09:25:12 +0000 |
commit | 597bf28a21da8e89e044090918c0a1ad74efb8b9 (patch) | |
tree | 0c0bedd892cc73ff2e5c47696cd69e0f01675300 /lib/PublicInbox/V2Writable.pm | |
parent | 6b498db4b518938e32d7feff85816f3c6dcf3651 (diff) | |
download | public-inbox-597bf28a21da8e89e044090918c0a1ad74efb8b9.tar.gz |
Xapian v1.2.21..v1.2.24 failed to set the close-on-exec flag on the flintlock FD, causing "git cat-file" processes to hold onto the lock and prevent subsequent Xapian::WritableDatabase from locking the DB. So cleanup git processes after committing the miscidx transaction.
Diffstat (limited to 'lib/PublicInbox/V2Writable.pm')
-rw-r--r-- | lib/PublicInbox/V2Writable.pm | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index 54004fd7..0104f87a 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -17,6 +17,7 @@ use PublicInbox::InboxWritable; use PublicInbox::OverIdx; use PublicInbox::Msgmap; use PublicInbox::Spawn qw(spawn popen_rd run_die); +use PublicInbox::Search; use PublicInbox::SearchIdx qw(log2stack is_ancestor check_size is_bad_blob); use IO::Handle; # ->autoflush use File::Temp (); @@ -608,7 +609,11 @@ shard[$i] bad echo:$echo != $i waiting for txn commit } my $midx = $self->{midx}; # misc index - $midx->commit_txn if $midx; + if ($midx) { + $midx->commit_txn; + $PublicInbox::Search::X{CLOEXEC_UNSET} and + $self->git->cleanup; + } # last_commit is special, don't commit these until # Xapian shards are done: @@ -618,7 +623,10 @@ shard[$i] bad echo:$echo != $i waiting for txn commit $dbh->commit; $dbh->begin_work; } - $midx->begin_txn if $midx; + if ($midx) { + $self->git->batch_prepare; + $midx->begin_txn; + } } $self->{total_bytes} += $self->{transact_bytes}; $self->{transact_bytes} = 0; |