-# Copyright (C) 2018-2020 all contributors <meta@public-inbox.org>
+# Copyright (C) 2018-2021 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
package PublicInbox::Xapcmd;
use strict;
sub commit_changes ($$$$) {
my ($ibx, $im, $tmp, $opt) = @_;
my $reshard = $opt->{reshard};
- my $reindex = $opt->{reindex};
$SIG{INT} or die 'BUG: $SIG{INT} not handled';
my @old_shard;
defined $new or die "BUG: $over exists when culling v2";
$over = PublicInbox::Over->new($over);
my $tmp_over = "$new/over.sqlite3";
- $over->connect->sqlite_backup_to_file($tmp_over);
+ $over->dbh->sqlite_backup_to_file($tmp_over);
$over = undef;
$over_chg = 1;
}
sub cb_spawn {
my ($cb, $args, $opt) = @_; # $cb = cpdb() or compact()
- defined(my $pid = fork) or die "fork: $!";
+ my $seed = rand(0xffffffff);
+ my $pid = fork // die "fork: $!";
return $pid if $pid > 0;
+ srand($seed);
$cb->($args, $opt);
POSIX::_exit(0);
}
}
sub prepare_reindex ($$$) {
- my ($ibx, $im, $reindex) = @_;
+ my ($ibx, $im, $opt) = @_;
if ($ibx->version == 1) {
my $dir = $ibx->search->xdir(1);
my $xdb = $PublicInbox::Search::X{Database}->new($dir);
if (my $lc = $xdb->get_metadata('last_commit')) {
- $reindex->{from} = $lc;
+ $opt->{reindex}->{from} = $lc;
}
} else { # v2
- my $max;
- $im->git_dir_latest(\$max) or return;
- my $from = $reindex->{from};
+ my $max = $ibx->max_git_epoch // return;
+ my $from = $opt->{reindex}->{from};
my $mm = $ibx->mm;
my $v = PublicInbox::Search::SCHEMA_VERSION();
foreach my $i (0..$max) {
sub check_compact () { runnable_or_die($XAPIAN_COMPACT) }
sub _run {
- my ($ibx, $cb, $opt, $reindex) = @_;
+ my ($ibx, $cb, $opt) = @_;
my $im = $ibx->importer(0);
$im->lock_acquire;
my ($tmp, $queue) = prepare_run($ibx, $opt);
# fine-grained locking if we prepare for reindex
if (!$opt->{-coarse_lock}) {
- prepare_reindex($ibx, $im, $reindex);
+ prepare_reindex($ibx, $im, $opt);
$im->lock_release;
}
defined(my $dir = $ibx->{inboxdir}) or die "no inboxdir defined\n";
-d $dir or die "inboxdir=$dir does not exist\n";
check_compact() if $opt->{compact} && $ibx->search;
- my $reindex; # v1:{ from => $x40 }, v2:{ from => [ $x40, $x40, .. ] } }
if (!$opt->{-coarse_lock}) {
- $reindex = $opt->{reindex} = { # per-epoch ranges for v2
- from => $ibx->version == 1 ? '' : [],
- };
+ # per-epoch ranges for v2
+ # v1:{ from => $OID }, v2:{ from => [ $OID, $OID, $OID ] } }
+ $opt->{reindex} = { from => $ibx->version == 1 ? '' : [] };
PublicInbox::SearchIdx::load_xapian_writable();
}
local %SIG = %SIG;
setup_signals();
- $ibx->umask_prepare;
- $ibx->with_umask(\&_run, $ibx, $cb, $opt, $reindex);
+ $ibx->with_umask(\&_run, $ibx, $cb, $opt);
}
sub cpdb_retryable ($$) {