diff options
-rw-r--r-- | Documentation/public-inbox-init.pod | 14 | ||||
-rwxr-xr-x | script/public-inbox-init | 8 | ||||
-rw-r--r-- | t/v2mirror.t | 4 |
3 files changed, 25 insertions, 1 deletions
diff --git a/Documentation/public-inbox-init.pod b/Documentation/public-inbox-init.pod index 4744da96..495a258f 100644 --- a/Documentation/public-inbox-init.pod +++ b/Documentation/public-inbox-init.pod @@ -48,6 +48,20 @@ added-after-the-fact (without affecting "git clone" followers). Default: unset, no epochs are skipped +=item -j, --jobs=JOBS + +Control the number of Xapian index shards in a +C<-V2> (L<public-inbox-v2-format(5)>) inbox. + +It is useful to use a single shard (C<-j1>) for inboxes on +high-latency storage (e.g. rotational HDD) unless the system has +enough RAM to cache 5-10x the size of the git repository. + +It is generally not useful to specify higher values than the +default due to contention in the top-level producer process. + +Default: the number of online CPUs, up to 4 + =back =head1 ENVIRONMENT diff --git a/script/public-inbox-init b/script/public-inbox-init index 10d3ad45..00147db5 100755 --- a/script/public-inbox-init +++ b/script/public-inbox-init @@ -27,10 +27,12 @@ use Cwd qw/abs_path/; my $version = undef; my $indexlevel = undef; my $skip_epoch; +my $jobs; my %opts = ( 'V|version=i' => \$version, 'L|indexlevel=s' => \$indexlevel, 'S|skip|skip-epoch=i' => \$skip_epoch, + 'j|jobs=i' => \$jobs, ); GetOptions(%opts) or usage(); PublicInbox::Admin::indexlevel_ok_or_die($indexlevel) if defined $indexlevel; @@ -144,6 +146,12 @@ my $ibx = PublicInbox::Inbox->new({ }); my $creat_opt = {}; +if (defined $jobs) { + die "--jobs is only supported for -V2 inboxes\n" if $version == 1; + die "--jobs=$jobs must be >= 1\n" if $jobs <= 0; + $creat_opt->{nproc} = $jobs; +} + PublicInbox::InboxWritable->new($ibx, $creat_opt)->init_inbox(0, $skip_epoch); # needed for git prior to v2.1.0 diff --git a/t/v2mirror.t b/t/v2mirror.t index fc03c3d7..b24528fe 100644 --- a/t/v2mirror.t +++ b/t/v2mirror.t @@ -80,9 +80,11 @@ foreach my $i (0..$epoch_max) { ok(-d "$tmpdir/m/git/$i.git", "mirror $i OK"); } -@cmd = ("-init", '-V2', 'm', "$tmpdir/m", 'http://example.com/m', +@cmd = ("-init", '-j1', '-V2', 'm', "$tmpdir/m", 'http://example.com/m', 'alt@example.com'); ok(run_script(\@cmd), 'initialized public-inbox -V2'); +my @shards = glob("$tmpdir/m/xap*/?"); +is(scalar(@shards), 1, 'got a single shard on init'); ok(run_script([qw(-index -j0), "$tmpdir/m"]), 'indexed'); |