]> Sergey Matveev's repositories - public-inbox.git/commitdiff
xapcmd: preserve indexlevel based on the destination
authorEric Wong <e@80x24.org>
Wed, 12 Jun 2019 08:05:33 +0000 (08:05 +0000)
committerEric Wong <e@80x24.org>
Fri, 14 Jun 2019 01:31:00 +0000 (01:31 +0000)
To support M:N resharding, we need to ensure we store the
indexlevel in the destination shard, rather than the
originating one.

lib/PublicInbox/Xapcmd.pm

index dad080c83bd724ff4998cfd459465a58b2b0b2f3..7204a911a2f4ffbd1df7fdd2afe2c171de08e0f0 100644 (file)
@@ -145,7 +145,8 @@ sub run {
        if ($v == 1) {
                my $old_parent = dirname($old);
                same_fs_or_die($old_parent, $old);
-               $tmp->{$old} = tempdir('xapcmd-XXXXXXXX', DIR => $old_parent);
+               my $v = PublicInbox::Search::SCHEMA_VERSION();
+               $tmp->{$old} = tempdir("xapian$v-XXXXXXXX", DIR => $old_parent);
                push @q, [ $old, $tmp->{$old} ];
        } else {
                opendir my $dh, $old or die "Failed to opendir $old: $!\n";
@@ -276,7 +277,7 @@ sub cpdb ($$) {
                        $dst->set_metadata('last_commit', $lc) if $lc;
 
                        # only the first xapian partition (0) gets 'indexlevel'
-                       if ($old =~ m!(?:xapian[0-9]+|xap[0-9]+/0)\z!) {
+                       if ($new =~ m!(?:xapian[0-9]+|xap[0-9]+/0)\b!) {
                                my $l = $src->get_metadata('indexlevel');
                                if ($l eq 'medium') {
                                        $dst->set_metadata('indexlevel', $l);