my @old_shards;
while (defined(my $dn = readdir($dh))) {
if ($dn =~ /\A[0-9]+\z/) {
- push @old_shards, $dn;
+ push(@old_shards, $dn + 0);
} elsif ($dn eq '.' || $dn eq '..') {
} elsif ($dn =~ /\Aover\.sqlite3/) {
} elsif ($dn eq 'misc' && $misc_ok) {
}
}
die "No Xapian shards found in $old\n" unless @old_shards;
-
+ @old_shards = sort { $a <=> $b } @old_shards;
my ($src, $max_shard);
if (!defined($reshard) || $reshard == scalar(@old_shards)) {
# 1:1 copy
$dst->set_metadata('last_commit', $lc) if $lc;
# only the first xapian shard (0) gets 'indexlevel'
- if ($new =~ m!(?:xapian[0-9]+|xap[0-9]+/0)\b!) {
+ if ($new =~ m!/(?:xapian[0-9]+|(?:ei|xap)[0-9]+/0)\b!) {
my $l = $src->get_metadata('indexlevel');
- if ($l eq 'medium') {
+ $l eq 'medium' and
$dst->set_metadata('indexlevel', $l);
- }
}
if ($pr_data) {
my $tot = $src->get_doccount;
#!perl -w
# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
-use strict;
-use Test::More;
+use v5.12;
use PublicInbox::TestCommon;
use PublicInbox::Config;
use PublicInbox::InboxWritable;
is_deeply($x, $o, 'xref3 and over docids match');
}
+{
+ my $d = "$home/eidx-med";
+ ok(run_script([qw(-extindex --dangerous --all -L medium -j3), $d]),
+ 'extindex medium init');
+ my $es = PublicInbox::ExtSearch->new($d);
+ is($es->xdb->get_metadata('indexlevel'), 'medium',
+ 'es indexlevel before');
+ my @xdb = $es->xdb_shards_flat;
+ is($xdb[0]->get_metadata('indexlevel'), 'medium',
+ '0 indexlevel before');
+ shift @xdb;
+ for (@xdb) {
+ ok(!$_->get_metadata('indexlevel'), 'no indexlevel in >0 shard')
+ }
+ is($es->xdb->get_metadata('indexlevel'), 'medium', 'indexlevel before');
+ ok(run_script([qw(-xcpdb -R5), $d]), 'xcpdb R5');
+ $es = PublicInbox::ExtSearch->new($d);
+ is($es->xdb->get_metadata('indexlevel'), 'medium',
+ '0 indexlevel after');
+ @xdb = $es->xdb_shards_flat;
+ is(scalar(@xdb), 5, 'got 5 shards');
+ is($xdb[0]->get_metadata('indexlevel'), 'medium', '0 indexlevel after');
+ shift @xdb;
+ for (@xdb) {
+ ok(!$_->get_metadata('indexlevel'), 'no indexlevel in >0 shard')
+ }
+}
+
done_testing;