diff options
author | Eric Wong <e@80x24.org> | 2022-10-01 00:33:15 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-10-01 09:07:51 +0000 |
commit | fa04201baae9d1043e37cf8ef4e5a33fdd0498ff (patch) | |
tree | fc175fde7733450fe92318206e787975d97948e2 /lib | |
parent | f9ac22a4b485ae5f8ad981027d8608c13f09530e (diff) | |
download | public-inbox-fa04201baae9d1043e37cf8ef4e5a33fdd0498ff.tar.gz |
lei: force --jobs=1,1 for SQLite < 3.8.3
SQLite prior to 3.8.3 did not reset its PRNG for generating unique temporary file names, so it would barf on t/lei-up.t occasionally due to O_EXCL -> EEXIST conflicts. This fixes occasional test failures under CentOS 7.x which ships SQLite 3.7.17.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/LeiQuery.pm | 4 | ||||
-rw-r--r-- | lib/PublicInbox/LeiUp.pm | 5 | ||||
-rw-r--r-- | lib/PublicInbox/OverIdx.pm | 12 |
3 files changed, 18 insertions, 3 deletions
diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm index c998e5c0..df9c32b3 100644 --- a/lib/PublicInbox/LeiQuery.pm +++ b/lib/PublicInbox/LeiQuery.pm @@ -1,4 +1,4 @@ -# Copyright (C) 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> # handles "lei q" command and provides internals for @@ -6,6 +6,7 @@ package PublicInbox::LeiQuery; use strict; use v5.10.1; +use PublicInbox::OverIdx; sub prep_ext { # externals_each callback my ($lxs, $exclude, $loc) = @_; @@ -17,6 +18,7 @@ sub _start_query { # used by "lei q" and "lei up" require PublicInbox::LeiOverview; PublicInbox::LeiOverview->new($self) or return; my $opt = $self->{opt}; + PublicInbox::OverIdx::fork_ok($opt); my ($xj, $mj) = split(/,/, $opt->{jobs} // ''); (defined($xj) && $xj ne '' && $xj !~ /\A[1-9][0-9]*\z/) and die "`$xj' search jobs must be >= 1\n"; diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm index b8a98360..5ad21451 100644 --- a/lib/PublicInbox/LeiUp.pm +++ b/lib/PublicInbox/LeiUp.pm @@ -1,4 +1,4 @@ -# Copyright (C) 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> # "lei up" - updates the result of "lei q --save" @@ -7,7 +7,7 @@ use strict; use v5.10.1; # n.b. we use LeiInput to setup IMAP auth use parent qw(PublicInbox::IPC PublicInbox::LeiInput); -use PublicInbox::LeiSavedSearch; +use PublicInbox::LeiSavedSearch; # OverIdx use PublicInbox::DS; use PublicInbox::PktOp; use PublicInbox::LeiFinmsg; @@ -75,6 +75,7 @@ sub redispatch_all ($$) { my $upq = [ (@{$self->{o_local} // []}, @{$self->{o_remote} // []}) ]; return up1($lei, $upq->[0]) if @$upq == 1; # just one, may start MUA + PublicInbox::OverIdx::fork_ok($lei->{opt}); # FIXME: this is also used per-query, see lei->_start_query my $j = $lei->{opt}->{jobs} || do { my $n = $self->detect_nproc // 1; diff --git a/lib/PublicInbox/OverIdx.pm b/lib/PublicInbox/OverIdx.pm index e7c96e14..a49ca6db 100644 --- a/lib/PublicInbox/OverIdx.pm +++ b/lib/PublicInbox/OverIdx.pm @@ -670,4 +670,16 @@ sub vivify_xvmd { $smsg->{-vivify_xvmd} = \@vivify_xvmd; } +sub fork_ok { + return 1 if $DBD::SQLite::sqlite_version >= 3008003; + my ($opt) = @_; + my @j = split(/,/, $opt->{jobs} // ''); + state $warned; + grep { $_ > 1 } @j and $warned //= warn('DBD::SQLite version is ', + $DBD::SQLite::sqlite_version, + ", need >= 3008003 (3.8.3) for --jobs > 1\n"); + $opt->{jobs} = '1,1'; + undef; +} + 1; |