]> Sergey Matveev's repositories - public-inbox.git/commitdiff
xcpdb|compact: support some xapian-compact switches
authorEric Wong <e@80x24.org>
Thu, 23 May 2019 09:37:01 +0000 (09:37 +0000)
committerEric Wong <e@80x24.org>
Thu, 23 May 2019 17:43:50 +0000 (17:43 +0000)
Allow users to specify the --blocksize <B>, --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
script/public-inbox-compact
script/public-inbox-xcpdb

index 488c6165c3d03af5323f3b8383ff47b1844c8970..74abf9999e88274a55c2eb55b7efaf3b22ac0384 100644 (file)
@@ -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: $!";
index 4f58d5aff57054855acfc5bc450c1f9f355d2a2f..4bdadfc38fa1fcbbcfd7567c4813207a3cb4aa46 100755 (executable)
@@ -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($_);
index bda7be0cadfb0192593679444de8c4aade0edb90..badb95e287bc9166a5ef82544fb04e83b7310f1a 100755 (executable)
@@ -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($_);