X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FSearchIdx.pm;h=5c39f3d620e3e774faab522c9de3113f995733d5;hb=a27beb758ec7097768416966cf4a7b6984ef5da6;hp=01b9f52dff965a0c7f334867c2d9ad9e2fd6e4d6;hpb=6fcad67f0dbaf33b354f07aa7f3c8fcfc8685bd7;p=public-inbox.git diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 01b9f52d..5c39f3d6 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -18,10 +18,10 @@ use PublicInbox::IdxStack; use Carp qw(croak); use POSIX qw(strftime); use PublicInbox::OverIdx; -use PublicInbox::Spawn qw(spawn); +use PublicInbox::Spawn qw(spawn nodatacow_dir); use PublicInbox::Git qw(git_unquote); use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp); -our @EXPORT_OK = qw(crlf_adjust log2stack is_ancestor check_size nodatacow_dir); +our @EXPORT_OK = qw(crlf_adjust log2stack is_ancestor check_size); my $X = \%PublicInbox::Search::X; my ($DB_CREATE_OR_OPEN, $DB_OPEN); our $DB_NO_SYNC = 0; @@ -67,7 +67,6 @@ sub new { my $dir = $self->xdir; $self->{over} = PublicInbox::OverIdx->new("$dir/over.sqlite3"); $self->{over}->{-no_fsync} = 1 if $ibx->{-no_fsync}; - $self->{index_max_size} = $ibx->{index_max_size}; } elsif ($version == 2) { defined $shard or die "shard is required for v2\n"; # shard is a number @@ -109,12 +108,6 @@ sub load_xapian_writable () { 1; } -sub nodatacow_dir ($) { - my ($dir) = @_; - opendir my $dh, $dir or die "opendir($dir): $!\n"; - PublicInbox::Spawn::set_nodatacow(fileno($dh)); -} - sub idx_acquire { my ($self) = @_; my $flag; @@ -546,11 +539,11 @@ sub unindex_both { # git->cat_async callback # called by public-inbox-index sub index_sync { - my ($self, $opts) = @_; - delete $self->{lock_path} if $opts->{-skip_lock}; - $self->{ibx}->with_umask(\&_index_sync, $self, $opts); - if ($opts->{reindex}) { - my %again = %$opts; + my ($self, $opt) = @_; + delete $self->{lock_path} if $opt->{-skip_lock}; + $self->{ibx}->with_umask(\&_index_sync, $self, $opt); + if ($opt->{reindex}) { + my %again = %$opt; delete @again{qw(rethread reindex)}; index_sync($self, \%again); } @@ -559,10 +552,10 @@ sub index_sync { sub check_size { # check_async cb for -index --max-size=... my ($oid, $type, $size, $arg, $git) = @_; (($type // '') eq 'blob') or die "E: bad $oid in $git->{git_dir}"; - if ($size <= $arg->{index_max_size}) { + if ($size <= $arg->{max_size}) { $git->cat_async($oid, $arg->{index_oid}, $arg); } else { - warn "W: skipping $oid ($size > $arg->{index_max_size})\n"; + warn "W: skipping $oid ($size > $arg->{max_size})\n"; } } @@ -579,7 +572,7 @@ sub v1_checkpoint ($$;$) { $self->{mm}->last_commit($newest); } } else { - ${$sync->{max}} = $BATCH_BYTES; + ${$sync->{max}} = $self->{batch_bytes}; } $self->{mm}->{dbh}->commit; @@ -609,7 +602,7 @@ sub v1_checkpoint ($$;$) { sub process_stack { my ($self, $sync, $stk) = @_; my $git = $self->{ibx}->git; - my $max = $BATCH_BYTES; + my $max = $self->{batch_bytes}; my $nr = 0; $sync->{nr} = \$nr; $sync->{max} = \$max; @@ -623,13 +616,13 @@ sub process_stack { $git->cat_async($oid, \&unindex_both, $self); } } - if ($sync->{index_max_size} = $self->{ibx}->{index_max_size}) { + if ($sync->{max_size} = $sync->{-opt}->{max_size}) { $sync->{index_oid} = \&index_both; } while (my ($f, $at, $ct, $oid) = $stk->pop_rec) { if ($f eq 'm') { my $arg = { %$sync, autime => $at, cotime => $ct }; - if ($sync->{index_max_size}) { + if ($sync->{max_size}) { $git->check_async($oid, \&check_size, $arg); } else { $git->cat_async($oid, \&index_both, $arg); @@ -752,14 +745,15 @@ sub reindex_from ($$) { # indexes all unindexed messages (v1 only) sub _index_sync { - my ($self, $opts) = @_; - my $tip = $opts->{ref} || 'HEAD'; + my ($self, $opt) = @_; + my $tip = $opt->{ref} || 'HEAD'; my $git = $self->{ibx}->git; + $self->{batch_bytes} = $opt->{batch_size} // $BATCH_BYTES; $git->batch_prepare; - my $pr = $opts->{-progress}; - my $sync = { reindex => $opts->{reindex}, -opt => $opts }; + my $pr = $opt->{-progress}; + my $sync = { reindex => $opt->{reindex}, -opt => $opt }; my $xdb = $self->begin_txn_lazy; - $self->{over}->rethread_prepare($opts); + $self->{over}->rethread_prepare($opt); my $mm = _msgmap_init($self); if ($sync->{reindex}) { my $last = $mm->last_commit;