From 073e4082a07ddeebf7c3efcadde35d98adb21c92 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 10 Aug 2020 02:12:02 +0000 Subject: convert: support new -index options Converting v1 inboxes from v2 can be a painful experience on HDD. Some of the new options in the CLI or config file make it less painful. --- lib/PublicInbox/Admin.pm | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'lib') diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm index 8a9a81c9..ce720beb 100644 --- a/lib/PublicInbox/Admin.pm +++ b/lib/PublicInbox/Admin.pm @@ -265,4 +265,40 @@ sub parse_unsigned ($) { 1; } +sub index_prepare ($$) { + my ($opt, $cfg) = @_; + my $env; + if ($opt->{compact}) { + require PublicInbox::Xapcmd; + PublicInbox::Xapcmd::check_compact(); + $opt->{compact_opt} = { -coarse_lock => 1, compact => 1 }; + if (defined(my $jobs = $opt->{jobs})) { + $opt->{compact_opt}->{jobs} = $jobs; + } + } + for my $k (qw(max_size batch_size)) { + my $git_key = "publicInbox.index".ucfirst($k); + $git_key =~ s/_([a-z])/\U$1/g; + defined(my $v = $opt->{$k} // $cfg->{lc($git_key)}) or next; + parse_unsigned(\$v) or die "`$git_key=$v' not parsed\n"; + $v > 0 or die "`$git_key=$v' must be positive\n"; + $opt->{$k} = $v; + } + + # out-of-the-box builds of Xapian 1.4.x are still limited to 32-bit + # https://getting-started-with-xapian.readthedocs.io/en/latest/concepts/indexing/limitations.html + $opt->{batch_size} and + $env = { XAPIAN_FLUSH_THRESHOLD => '4294967295' }; + + for my $k (qw(sequential_shard)) { + my $git_key = "publicInbox.index".ucfirst($k); + $git_key =~ s/_([a-z])/\U$1/g; + defined(my $s = $opt->{$k} // $cfg->{lc($git_key)}) or next; + defined(my $v = $cfg->git_bool($s)) + or die "`$git_key=$s' not boolean\n"; + $opt->{$k} = $v; + } + $env; +} + 1; -- cgit v1.2.3-24-ge0c7