]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchIdx.pm
get rid of unnecessary bytes::length usage
[public-inbox.git] / lib / PublicInbox / SearchIdx.pm
index f553eda69b42d3ec8dfe23142812afe15d4f4104..5b0e44581d27f033588c514d1af59deb7941d9ab 100644 (file)
@@ -24,12 +24,17 @@ use PublicInbox::Spawn qw(spawn nodatacow_dir);
 use PublicInbox::Git qw(git_unquote);
 use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
 use PublicInbox::Address;
+use Config;
 our @EXPORT_OK = qw(log2stack is_ancestor check_size prepare_stack
        index_text term_generator add_val is_bad_blob);
 my $X = \%PublicInbox::Search::X;
 our ($DB_CREATE_OR_OPEN, $DB_OPEN);
 our $DB_NO_SYNC = 0;
-our $BATCH_BYTES = $ENV{XAPIAN_FLUSH_THRESHOLD} ? 0x7fffffff : 1_000_000;
+our $BATCH_BYTES = $ENV{XAPIAN_FLUSH_THRESHOLD} ? 0x7fffffff :
+       # assume a typical 64-bit system has 8x more RAM than a
+       # typical 32-bit system:
+       (($Config{ptrsize} >= 8 ? 8192 : 1024) * 1024);
+
 use constant DEBUG => !!$ENV{DEBUG};
 
 my $xapianlevels = qr/\A(?:full|medium)\z/;
@@ -89,7 +94,7 @@ sub need_xapian ($) { $_[0]->{indexlevel} =~ $xapianlevels }
 sub idx_release {
        my ($self, $wake) = @_;
        if (need_xapian($self)) {
-               my $xdb = delete $self->{xdb} or croak 'not acquired';
+               my $xdb = delete $self->{xdb} or croak '{xdb} not acquired';
                $xdb->close;
        }
        $self->lock_release($wake) if $self->{creat};
@@ -98,7 +103,7 @@ sub idx_release {
 
 sub load_xapian_writable () {
        return 1 if $X->{WritableDatabase};
-       PublicInbox::Search::load_xapian() or return;
+       PublicInbox::Search::load_xapian() or die "failed to load Xapian: $@\n";
        my $xap = $PublicInbox::Search::Xap;
        for (qw(Document TermGenerator WritableDatabase)) {
                $X->{$_} = $xap.'::'.$_;
@@ -435,8 +440,9 @@ sub add_xapian ($$$$) {
        if (my $old = $merge_vmd ? _get_doc($self, $smsg->{num}) : undef) {
                my @x = @VMD_MAP;
                while (my ($field, $pfx) = splice(@x, 0, 2)) {
-                       my $vals = xap_terms($pfx, $old);
-                       $doc->add_boolean_term($pfx.$_) for keys %$vals;
+                       for my $term (xap_terms($pfx, $old)) {
+                               $doc->add_boolean_term($pfx.$term);
+                       }
                }
        }
        $self->{xdb}->replace_document($smsg->{num}, $doc);
@@ -777,7 +783,7 @@ sub v1_checkpoint ($$;$) {
        ${$sync->{max}} = $self->{batch_bytes};
 
        $self->{mm}->{dbh}->commit;
-       my $xdb = need_xapian($self) ? $self->{xdb} : undef;
+       my $xdb = $self->{xdb};
        if ($newest && $xdb) {
                my $cur = $xdb->get_metadata('last_commit');
                if (need_update($self, $cur, $newest)) {