From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id CF3E22067B for ; Thu, 23 May 2019 09:37:13 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 23/26] xcpdb|compact: support some xapian-compact switches Date: Thu, 23 May 2019 09:37:01 +0000 Message-Id: <20190523093704.18367-24-e@80x24.org> In-Reply-To: <20190523093704.18367-1-e@80x24.org> References: <20190523093704.18367-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Allow users to specify the --blocksize , --no-full, --fuller options for xapian-compact(1) for fine-tuning compact behavior for low-traffic/inactive inboxes. We also won't support --multipass, since it doesn't seem compatible with our requirement to use --no-renumber. We also won't support --single-file, since it only seems intended for totally dead inboxes; and it doesn't seem worth the support overhead when "totally dead" turns out to be a misdiagnosis. --- lib/PublicInbox/Xapcmd.pm | 17 ++++++++++++----- script/public-inbox-compact | 3 ++- script/public-inbox-xcpdb | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/Xapcmd.pm b/lib/PublicInbox/Xapcmd.pm index 488c616..74abf99 100644 --- a/lib/PublicInbox/Xapcmd.pm +++ b/lib/PublicInbox/Xapcmd.pm @@ -13,6 +13,7 @@ use File::Basename qw(dirname); # support testing with dev versions of Xapian which installs # commands with a version number suffix (e.g. "xapian-compact-1.5") our $XAPIAN_COMPACT = $ENV{XAPIAN_COMPACT} || 'xapian-compact'; +our @COMPACT_OPT = qw(quiet|q blocksize|b=s no-full|n fuller|F); sub commit_changes ($$$) { my ($ibx, $tmp, $opt) = @_; @@ -213,13 +214,19 @@ sub compact ($$) { defined(my $dfd = $opt->{$fd}) or next; $rdr->{$fd} = $dfd; } - if ($pr) { - $pr->("$pfx compacting...\n"); - $rdr->{1} = fileno($w) if pipe($r, $w); - } + $rdr->{1} = fileno($w) if $pr && pipe($r, $w); # we rely on --no-renumber to keep docids synched to NNTP - my $cmd = [ $XAPIAN_COMPACT, '--no-renumber', $src, $dst ]; + my $cmd = [ $XAPIAN_COMPACT, '--no-renumber' ]; + for my $sw (qw(no-full fuller)) { + push @$cmd, "--$sw" if $opt->{$sw}; + } + for my $sw (qw(blocksize)) { + defined(my $v = $opt->{$sw}) or next; + push @$cmd, "--$sw", $v; + } + $pr->("$pfx `".join(' ', @$cmd)."'\n") if $pr; + push @$cmd, $src, $dst; my $pid = spawn($cmd, undef, $rdr); if ($pr) { close $w or die "close: \$w: $!"; diff --git a/script/public-inbox-compact b/script/public-inbox-compact index 4f58d5a..4bdadfc 100755 --- a/script/public-inbox-compact +++ b/script/public-inbox-compact @@ -10,7 +10,8 @@ use PublicInbox::Admin; PublicInbox::Admin::require_or_die('-index'); my $usage = "Usage: public-inbox-compact REPO_DIR\n"; my $opt = { compact => 1, -coarse_lock => 1 }; -GetOptions($opt, qw(quiet|q)) or die "bad command-line args\n$usage"; +GetOptions($opt, @PublicInbox::Xapcmd::COMPACT_OPT) or + die "bad command-line args\n$usage"; my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV) or die $usage; foreach (@ibxs) { my $ibx = PublicInbox::InboxWritable->new($_); diff --git a/script/public-inbox-xcpdb b/script/public-inbox-xcpdb index bda7be0..badb95e 100755 --- a/script/public-inbox-xcpdb +++ b/script/public-inbox-xcpdb @@ -9,7 +9,8 @@ use PublicInbox::Admin; PublicInbox::Admin::require_or_die('-search'); my $usage = "Usage: public-inbox-xcpdb INBOX_DIR\n"; my $opt = {}; -GetOptions($opt, qw(compact quiet|q)) or die "bad command-line args\n$usage"; +GetOptions($opt, qw(compact), @PublicInbox::Xapcmd::COMPACT_OPT) or + die "bad command-line args\n$usage"; my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV) or die $usage; foreach (@ibxs) { my $ibx = PublicInbox::InboxWritable->new($_); -- EW