user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH] index: v2: parallel by default
@ 2020-06-07 20:02  3% Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2020-06-07 20:02 UTC (permalink / raw)
  To: meta

InboxWritable should only set $v2w->{parallel} if the $parallel
flag is defined to 0 or 1.  We want indexing a new inbox to
utilize SMP, just like --reindex.

-index once again allows -j0/--jobs=0 to force single-process
use, and we'll be ensuring that works in tests to maintain
performance on small systems.

Fixes: 61a2fff5b34a3e32 ("admin: move index_inbox over")
---
 lib/PublicInbox/InboxWritable.pm |  2 +-
 script/public-inbox-index        |  2 +-
 t/cgi.t                          |  2 +-
 t/convert-compact.t              |  4 ++--
 t/indexlevels-mirror.t           | 14 +++++++-------
 t/mda_filter_rubylang.t          |  2 +-
 t/multi-mid.t                    |  2 +-
 t/nntpd.t                        |  2 +-
 t/replace.t                      |  4 +++-
 t/v2mirror.t                     | 12 ++++++------
 t/v2reindex.t                    |  2 +-
 t/xcpdb-reshard.t                |  2 +-
 12 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm
index 3558403bca6..c54be046f95 100644
--- a/lib/PublicInbox/InboxWritable.pm
+++ b/lib/PublicInbox/InboxWritable.pm
@@ -57,7 +57,7 @@ sub importer {
 		die "v2 not supported: $@\n" if $@;
 		my $opt = $self->{-creat_opt};
 		my $v2w = PublicInbox::V2Writable->new($self, $opt);
-		$v2w->{parallel} = $parallel;
+		$v2w->{parallel} = $parallel if defined $parallel;
 		$v2w;
 	} elsif ($v == 1) {
 		my @arg = (undef, undef, undef, $self);
diff --git a/script/public-inbox-index b/script/public-inbox-index
index 0018668e6bd..6217fb86c4e 100755
--- a/script/public-inbox-index
+++ b/script/public-inbox-index
@@ -18,7 +18,7 @@ my $opt = { quiet => -1, compact => 0, maxsize => undef };
 GetOptions($opt, qw(verbose|v+ reindex compact|c+ jobs|j=i prune
 		indexlevel|L=s maxsize|max-size=s batchsize|batch-size=s))
 	or die "bad command-line args\n$usage";
-die "--jobs must be positive\n" if defined $opt->{jobs} && $opt->{jobs} <= 0;
+die "--jobs must be >= 0\n" if defined $opt->{jobs} && $opt->{jobs} < 0;
 
 if ($opt->{compact}) {
 	require PublicInbox::Xapcmd;
diff --git a/t/cgi.t b/t/cgi.t
index d1f971504ef..366d6594bb0 100644
--- a/t/cgi.t
+++ b/t/cgi.t
@@ -39,7 +39,7 @@ use_ok 'PublicInbox::InboxWritable';
 use_ok 'PublicInbox::Config';
 my $cfg = PublicInbox::Config->new($pi_config);
 my $ibx = $cfg->lookup_name('test');
-my $im = PublicInbox::InboxWritable->new($ibx)->importer;
+my $im = PublicInbox::InboxWritable->new($ibx)->importer(0);
 
 {
 	local $ENV{HOME} = $home;
diff --git a/t/convert-compact.t b/t/convert-compact.t
index 80efc19c798..26a8fca025f 100644
--- a/t/convert-compact.t
+++ b/t/convert-compact.t
@@ -116,12 +116,12 @@ is(scalar @$msgs, 1, 'only one message in history');
 
 $ibx = undef;
 $err = '';
-$cmd = [ qw(-index --reindex -c), "$tmpdir/v2" ];
+$cmd = [ qw(-index -j0 --reindex -c), "$tmpdir/v2" ];
 ok(run_script($cmd, undef, $rdr), '--reindex -c');
 like($err, qr/xapian-compact/, 'xapian-compact ran (-c)');
 
 $rdr->{2} = \(my $err2 = '');
-$cmd = [ qw(-index --reindex -cc), "$tmpdir/v2" ];
+$cmd = [ qw(-index -j0 --reindex -cc), "$tmpdir/v2" ];
 ok(run_script($cmd, undef, $rdr), '--reindex -c -c');
 like($err2, qr/xapian-compact/, 'xapian-compact ran (-c -c)');
 ok(($err2 =~ tr/\n/\n/) > ($err =~ tr/\n/\n/), '-compacted twice');
diff --git a/t/indexlevels-mirror.t b/t/indexlevels-mirror.t
index 704f7e1174e..44313e40118 100644
--- a/t/indexlevels-mirror.t
+++ b/t/indexlevels-mirror.t
@@ -33,13 +33,13 @@ sub import_index_incremental {
 		-primary_address => 'test@example.com',
 		indexlevel => $level,
 	});
-	my $im = PublicInbox::InboxWritable->new($ibx, {nproc=>1})->importer;
+	my $im = PublicInbox::InboxWritable->new($ibx, {nproc=>1})->importer(0);
 	$mime->header_set('Message-ID', '<m@1>');
 	ok($im->add($mime), 'first message added');
 	$im->done;
 
 	# index master (required for v1)
-	ok(run_script(['-index', $ibx->{inboxdir}, "-L$level"]),
+	ok(run_script([qw(-index -j0), $ibx->{inboxdir}, "-L$level"]),
 		'index master OK');
 	my $ro_master = PublicInbox::Inbox->new({
 		inboxdir => $ibx->{inboxdir},
@@ -68,7 +68,7 @@ sub import_index_incremental {
 	ok(run_script(\@cmd), "v$v init OK");
 
 	# index mirror
-	ok(run_script(['-index', $mirror]), "v$v index mirror OK");
+	ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror OK");
 
 	# read-only access
 	my $ro_mirror = PublicInbox::Inbox->new({
@@ -86,14 +86,14 @@ sub import_index_incremental {
 
 	# mirror updates
 	is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
-	ok(run_script(['-index', $mirror]), "v$v index mirror again OK");
+	ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror again OK");
 	($nr, $msgs) = $ro_mirror->recent;
 	is($nr, 2, '2nd message seen in mirror');
 	is_deeply([sort { $a cmp $b } map { $_->{mid} } @$msgs],
 		['m@1','m@2'], 'got both messages in mirror');
 
 	# incremental index master (required for v1)
-	ok(run_script(['-index', $ibx->{inboxdir}, "-L$level"]),
+	ok(run_script([qw(-index -j0), $ibx->{inboxdir}, "-L$level"]),
 		'index master OK');
 	($nr, $msgs) = $ro_master->recent;
 	is($nr, 2, '2nd message seen in master');
@@ -123,7 +123,7 @@ sub import_index_incremental {
 
 	# sync the mirror
 	is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
-	ok(run_script(['-index', $mirror]), "v$v index mirror again OK");
+	ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror again OK");
 	($nr, $msgs) = $ro_mirror->recent;
 	is($nr, 1, '2nd message gone from mirror');
 	is_deeply([map { $_->{mid} } @$msgs], ['m@1'],
@@ -148,7 +148,7 @@ sub import_index_incremental {
 	}
 	$im->done;
 	is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
-	ok(run_script(['-index', '--reindex', $mirror]),
+	ok(run_script([qw(-index -j0 --reindex), $mirror]),
 		"v$v index --reindex mirror OK");
 	@ro_nums = map { $_->{num} } @{$ro_mirror->over->query_ts(0, 0)};
 	@rw_nums = map { $_->{num} } @{$ibx->over->query_ts(0, 0)};
diff --git a/t/mda_filter_rubylang.t b/t/mda_filter_rubylang.t
index 483fcb85549..5b6bf28b862 100644
--- a/t/mda_filter_rubylang.t
+++ b/t/mda_filter_rubylang.t
@@ -25,7 +25,7 @@ for my $v (qw(V1 V2)) {
 	my $cmd = [ '-init', "-$v", $v, $inboxdir,
 		"http://example.com/$v", $addr ];
 	ok(run_script($cmd), 'public-inbox-init');
-	ok(run_script(['-index', $inboxdir]), 'public-inbox-index');
+	ok(run_script([qw(-index -j0), $inboxdir]), 'public-inbox-index');
 	is(xsys(@cfg, "$cfgpfx.filter", 'PublicInbox::Filter::RubyLang'), 0);
 	is(xsys(@cfg, "$cfgpfx.altid",
 		'serial:alerts:file=msgmap.sqlite3'), 0);
diff --git a/t/multi-mid.t b/t/multi-mid.t
index 91c8597e2e6..41d556b9ceb 100644
--- a/t/multi-mid.t
+++ b/t/multi-mid.t
@@ -70,7 +70,7 @@ for my $order ([$bad, $good], [$good, $bad]) {
 	$cmd = [ '-init', '-Lbasic', '-V2', 'v2c', "$tmpdir/v2-clone",
 		'http://example.com/v2c', 'v2c@example.com' ];
 	ok(run_script($cmd, $env), 'init clone');
-	$cmd = [ '-index', "$tmpdir/v2-clone" ];
+	$cmd = [ qw(-index -j0), "$tmpdir/v2-clone" ];
 	sleep($delay) if $delay;
 	ok(run_script($cmd, $env), 'index the clone');
 	$ibx->cleanup;
diff --git a/t/nntpd.t b/t/nntpd.t
index 69f72ce1216..eee67ea65bb 100644
--- a/t/nntpd.t
+++ b/t/nntpd.t
@@ -53,7 +53,7 @@ $ibx = PublicInbox::Inbox->new($ibx);
 	my $len;
 
 	$ibx = PublicInbox::InboxWritable->new($ibx);
-	my $im = $ibx->importer;
+	my $im = $ibx->importer(0);
 
 	# ensure successful message delivery
 	{
diff --git a/t/replace.t b/t/replace.t
index cef4e7aa6cb..c4dcb89dec1 100644
--- a/t/replace.t
+++ b/t/replace.t
@@ -33,7 +33,7 @@ Date: Fri, 02 Oct 1993 00:00:00 +0000
 
 Top secret info about my house in Malibu...
 EOF
-	my $im = PublicInbox::InboxWritable->new($ibx, {nproc=>1})->importer;
+	my $im = PublicInbox::InboxWritable->new($ibx, {nproc=>1})->importer(0);
 	# fake a bunch of epochs
 	$im->{rotate_bytes} = $opt->{rotate_bytes} if $opt->{rotate_bytes};
 
@@ -145,10 +145,12 @@ EOF
 		is($smsg->{subject}, 'redacted', 'after subject');
 		is($smsg->{mid}, 'replace@example.com', 'before MID');
 	}
+	# $git->cleanup; # needed if $im->{parallel};
 	@warn = ();
 	is($im->replace($orig, $repl), undef, 'no-op replace returns undef');
 	is($im->purge($orig), undef, 'no-op purge returns undef');
 	is_deeply(\@warn, [], 'no warnings on noop');
+	# $im->done; # needed if $im->{parallel}
 }
 
 sub pad_msgs {
diff --git a/t/v2mirror.t b/t/v2mirror.t
index d588808d645..fc03c3d7c3d 100644
--- a/t/v2mirror.t
+++ b/t/v2mirror.t
@@ -84,7 +84,7 @@ foreach my $i (0..$epoch_max) {
 	'alt@example.com');
 ok(run_script(\@cmd), 'initialized public-inbox -V2');
 
-ok(run_script(['-index', "$tmpdir/m"]), 'indexed');
+ok(run_script([qw(-index -j0), "$tmpdir/m"]), 'indexed');
 
 my $mibx = { inboxdir => "$tmpdir/m", address => 'alt@example.com' };
 $mibx = PublicInbox::Inbox->new($mibx);
@@ -111,7 +111,7 @@ $fetch_each_epoch->();
 
 my $mset = $mibx->search->reopen->query('m:15@example.com', {mset => 1});
 is(scalar($mset->items), 0, 'new message not found in mirror, yet');
-ok(run_script(["-index", "$tmpdir/m"]), 'index updated');
+ok(run_script([qw(-index -j0), "$tmpdir/m"]), 'index updated');
 is_deeply([$mibx->mm->minmax], [$ibx->mm->minmax], 'index synched minmax');
 $mset = $mibx->search->reopen->query('m:15@example.com', {mset => 1});
 is(scalar($mset->items), 1, 'found message in mirror');
@@ -142,7 +142,7 @@ $fetch_each_epoch->();
 	$ibx->cleanup;
 	PublicInbox::InboxWritable::cleanup($mibx);
 	$v2w->done;
-	my $cmd = [ '-index', '--prune', "$tmpdir/m" ];
+	my $cmd = [ qw(-index --prune -j0), "$tmpdir/m" ];
 	my ($out, $err) = ('', '');
 	my $opt = { 1 => \$out, 2 => \$err };
 	ok(run_script($cmd, undef, $opt), '-index --prune');
@@ -178,7 +178,7 @@ is($mibx->git->check($to_purge), undef, 'unindex+prune successful in mirror');
 	$fetch_each_epoch->();
 	PublicInbox::InboxWritable::cleanup($mibx);
 
-	my $cmd = [ "-index", "$tmpdir/m" ];
+	my $cmd = [ qw(-index -j0), "$tmpdir/m" ];
 	my ($out, $err) = ('', '');
 	my $opt = { 1 => \$out, 2 => \$err };
 	ok(run_script($cmd, undef, $opt), 'index ran');
@@ -196,7 +196,7 @@ if ('max size') {
 	$ibx->cleanup;
 	$fetch_each_epoch->();
 	PublicInbox::InboxWritable::cleanup($mibx);
-	my $cmd = ['-index', "$tmpdir/m", "--max-size=$max" ];
+	my $cmd = [qw(-index -j0), "$tmpdir/m", "--max-size=$max" ];
 	my $opt = { 2 => \(my $err) };
 	ok(run_script($cmd, undef, $opt), 'indexed with --max-size');
 	like($err, qr/skipping [a-f0-9]{40,}/, 'warned about skipping message');
@@ -211,7 +211,7 @@ if ('max size') {
 EOF
 		close $fh or die;
 	}
-	$cmd = ['-index', "$tmpdir/m", "--reindex" ];
+	$cmd = [ qw(-index -j0 --reindex), "$tmpdir/m" ];
 	ok(run_script($cmd, undef, $opt), 'reindexed w/ indexMaxSize in file');
 	like($err, qr/skipping [a-f0-9]{40,}/, 'warned about skipping message');
 	$mset = $mibx->search->reopen->query('m:2big@a', {mset =>1});
diff --git a/t/v2reindex.t b/t/v2reindex.t
index b99106d0fe7..77deffb4ba9 100644
--- a/t/v2reindex.t
+++ b/t/v2reindex.t
@@ -38,7 +38,7 @@ my ($mark1, $mark2, $mark3, $mark4);
 	my %config = %$ibx_config;
 	my $ibx = PublicInbox::Inbox->new(\%config);
 	my $im = PublicInbox::V2Writable->new($ibx, {nproc => 1});
-	my $im0 = $im->importer();
+	my $im0 = $im->importer(0);
 	foreach my $i (1..10) {
 		$mime->header_set('Message-Id', "<$i\@example.com>");
 		ok($im->add($mime), "message $i added");
diff --git a/t/xcpdb-reshard.t b/t/xcpdb-reshard.t
index 70012cc6f49..1835fa62140 100644
--- a/t/xcpdb-reshard.t
+++ b/t/xcpdb-reshard.t
@@ -30,7 +30,7 @@ my $ibx = PublicInbox::Inbox->new({
 my @xcpdb = qw(-xcpdb -q);
 my $nproc = 8;
 my $ndoc = 13;
-my $im = PublicInbox::InboxWritable->new($ibx, {nproc => $nproc})->importer(1);
+my $im = PublicInbox::InboxWritable->new($ibx, {nproc => $nproc})->importer;
 for my $i (1..$ndoc) {
 	$mime->header_set('Message-ID', "<m$i\@example.com>");
 	ok($im->add($mime), "message $i added");

^ permalink raw reply related	[relevance 3%]

* [PATCH 10/26] admin: move index_inbox over
  2019-05-23  9:36  6% [PATCH 00/26] xcpdb: ease Xapian DB format migrations Eric Wong
@ 2019-05-23  9:36  7% ` Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2019-05-23  9:36 UTC (permalink / raw)
  To: meta

We will be reindexing after copydatabase
---
 lib/PublicInbox/Admin.pm  | 32 +++++++++++++++++++++++
 script/public-inbox-index | 53 ++++++---------------------------------
 2 files changed, 39 insertions(+), 46 deletions(-)

diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm
index 2784820..94f47ab 100644
--- a/lib/PublicInbox/Admin.pm
+++ b/lib/PublicInbox/Admin.pm
@@ -135,4 +135,36 @@ invalid indexlevel=$indexlevel (must be `basic', `medium', or `full')
 	die missing_mod_msg($err) ." required for indexlevel=$indexlevel\n";
 }
 
+sub index_inbox {
+	my ($ibx, $opt) = @_;
+	my $jobs = delete $opt->{jobs} if $opt;
+	if (ref($ibx) && ($ibx->{version} || 1) == 2) {
+		eval { require PublicInbox::V2Writable };
+		die "v2 requirements not met: $@\n" if $@;
+		my $v2w = eval {
+			PublicInbox::V2Writable->new($ibx, {nproc=>$jobs});
+		};
+		if (defined $jobs) {
+			if ($jobs == 0) {
+				$v2w->{parallel} = 0;
+			} else {
+				my $n = $v2w->{partitions};
+				if ($jobs != ($n + 1)) {
+					warn
+"Unable to respect --jobs=$jobs, inbox was created with $n partitions\n";
+				}
+			}
+		}
+		my $warn_cb = $SIG{__WARN__} || sub { print STDERR @_ };
+		local $SIG{__WARN__} = sub {
+			$warn_cb->($v2w->{current_info}, ': ', @_);
+		};
+		$v2w->index_sync($opt);
+	} else {
+		require PublicInbox::SearchIdx;
+		my $s = PublicInbox::SearchIdx->new($ibx, 1);
+		$s->index_sync($opt);
+	}
+}
+
 1;
diff --git a/script/public-inbox-index b/script/public-inbox-index
index 9399c27..b6e3052 100755
--- a/script/public-inbox-index
+++ b/script/public-inbox-index
@@ -13,18 +13,10 @@ my $usage = "public-inbox-index REPO_DIR";
 use PublicInbox::Admin;
 PublicInbox::Admin::require_or_die('-index');
 
-my $reindex;
-my $prune;
-my $jobs = undef;
-my $indexlevel;
-my %opts = (
-	'--reindex' => \$reindex,
-	'--jobs|j=i' => \$jobs,
-	'--prune' => \$prune,
-        'L|indexlevel=s' => \$indexlevel,
-);
-GetOptions(%opts) or die "bad command-line args\n$usage";
-die "--jobs must be positive\n" if defined $jobs && $jobs < 0;
+my $opt = {};
+GetOptions($opt, qw(reindex jobs|j=i prune indexlevel|L=s))
+	or die "bad command-line args\n$usage";
+die "--jobs must be positive\n" if defined $opt->{jobs} && $opt->{jobs} <= 0;
 
 sub usage { print STDERR "Usage: $usage\n"; exit 1 }
 
@@ -35,43 +27,12 @@ PublicInbox::Admin::require_or_die('-index');
 usage() unless @ibxs;
 my $mods = {};
 foreach my $ibx (@ibxs) {
-	if (defined $indexlevel && !defined($ibx->{indexlevel})) {
+	if (defined $opt->{indexlevel} && !defined($ibx->{indexlevel})) {
 		# XXX: users can shoot themselves in the foot, with this...
-		$ibx->{indexlevel} = $indexlevel;
+		$ibx->{indexlevel} = $opt->{indexlevel};
 	}
 	PublicInbox::Admin::scan_ibx_modules($mods, $ibx);
 }
 
 PublicInbox::Admin::require_or_die(keys %$mods);
-
-require PublicInbox::SearchIdx;
-index_inbox($_) for @ibxs;
-
-sub index_inbox {
-	my ($repo) = @_;
-	if (ref($repo) && ($repo->{version} || 1) == 2) {
-		eval { require PublicInbox::V2Writable };
-		die "v2 requirements not met: $@\n" if $@;
-		my $v2w = eval {
-			PublicInbox::V2Writable->new($repo, {nproc=>$jobs});
-		};
-		if (defined $jobs) {
-			if ($jobs == 0) {
-				$v2w->{parallel} = 0;
-			} else {
-				my $n = $v2w->{partitions};
-				if ($jobs != ($n + 1)) {
-					warn
-"Unable to respect --jobs=$jobs, inbox was created with $n partitions\n";
-				}
-			}
-		}
-		local $SIG{__WARN__} = sub {
-			print STDERR $v2w->{current_info}, ': ', @_;
-		};
-		$v2w->index_sync({ reindex => $reindex, prune => $prune });
-	} else {
-		my $s = PublicInbox::SearchIdx->new($repo, 1);
-		$s->index_sync({ reindex => $reindex });
-	}
-}
+PublicInbox::Admin::index_inbox($_, $opt) for @ibxs;
-- 
EW


^ permalink raw reply related	[relevance 7%]

* [PATCH 00/26] xcpdb: ease Xapian DB format migrations
@ 2019-05-23  9:36  6% Eric Wong
  2019-05-23  9:36  7% ` [PATCH 10/26] admin: move index_inbox over Eric Wong
  0 siblings, 1 reply; 3+ results
From: Eric Wong @ 2019-05-23  9:36 UTC (permalink / raw)
  To: meta

I've noticed performance problems in Xapian's old chert
backend which seem alleviated with the new glass backend;
particularly related to phrase searches.

Unfortunately, the tool distributed with Xapian for updating DB
formats, copydatabase(1), is extremely slow and blocking updates
for hours at a time to perform the migration is not acceptable.
(That's right, "copydatabase" is NOT a Postgres command!)

So, I've written "public-inbox-xcpdb" and gotten it to perform
the bulk copy operation without holding inbox.lock and have it
deal gracefully with Xapian DB modifications.  xcpdb is still
slow, but I've (finally!) implemented partial reindexing to
allow it to minimize the lock time and not stall -mda or -watch
processes while it is working.

There's a bunch of cleanups along the way, too; and it should
make future changes to repartition the Xapian DB on existing v2
inboxes easier.

Eric Wong (26):
  t/convert-compact: skip on missing xapian-compact(1)
  v1writable: retire in favor of InboxWritable
  doc: document the reason for --no-renumber
  search: reenable phrase search on non-chert Xapian
  xapcmd: new module for wrapping Xapian commands
  admin: hoist out resolve_inboxes for -compact and -index
  xapcmd: support spawn options
  xcpdb: new tool which wraps Xapian's copydatabase(1)
  xapcmd: do not cleanup on errors
  admin: move index_inbox over
  xcpdb: implement using Perl bindings
  xapcmd: xcpdb supports compaction
  v2writable: hoist out log_range sub for readability
  xcpdb: use fine-grained locking
  xcpdb: implement progress reporting
  xcpdb: cleanup error handling and diagnosis
  xapcmd: avoid EXDEV when finalizing changes
  doc: xcpdb: update to reflect the current state
  xapcmd: use "print STDERR" for progress reporting
  xcpdb: show re-indexing progress
  xcpdb: remove temporary directories on aborts
  compact: reuse infrastructure from xcpdb
  xcpdb|compact: support some xapian-compact switches
  xapcmd: cleanup on interrupted xcpdb "--compact"
  xcpdb|compact: support --jobs/-j flag like gmake(1)
  xapcmd: do not reset %SIG until last Xtmpdir is done

 Documentation/include.mk                 |   6 +-
 Documentation/public-inbox-v1-format.pod |   4 +
 Documentation/public-inbox-v2-format.pod |   4 +
 Documentation/public-inbox-xcpdb.pod     |  57 ++++
 MANIFEST                                 |   4 +-
 lib/PublicInbox/Admin.pm                 |  66 ++++
 lib/PublicInbox/InboxWritable.pm         |  35 ++-
 lib/PublicInbox/Search.pm                |  48 +--
 lib/PublicInbox/SearchIdx.pm             |  34 ++-
 lib/PublicInbox/V1Writable.pm            |  34 ---
 lib/PublicInbox/V2Writable.pm            | 109 ++++---
 lib/PublicInbox/Xapcmd.pm                | 370 +++++++++++++++++++++++
 script/public-inbox-compact              | 102 +------
 script/public-inbox-index                | 102 +------
 script/public-inbox-init                 |  13 +-
 script/public-inbox-xcpdb                |  19 ++
 t/cgi.t                                  |   4 +-
 t/convert-compact.t                      |   4 +
 t/indexlevels-mirror.t                   |  27 +-
 t/init.t                                 |   4 +-
 t/nntpd.t                                |  15 +-
 t/search.t                               |   1 +
 t/v2mirror.t                             |   1 +
 23 files changed, 740 insertions(+), 323 deletions(-)
 create mode 100644 Documentation/public-inbox-xcpdb.pod
 delete mode 100644 lib/PublicInbox/V1Writable.pm
 create mode 100644 lib/PublicInbox/Xapcmd.pm
 create mode 100755 script/public-inbox-xcpdb

-- 
EW

^ permalink raw reply	[relevance 6%]

Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-05-23  9:36  6% [PATCH 00/26] xcpdb: ease Xapian DB format migrations Eric Wong
2019-05-23  9:36  7% ` [PATCH 10/26] admin: move index_inbox over Eric Wong
2020-06-07 20:02  3% [PATCH] index: v2: parallel by default Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).