diff options
author | Eric Wong <e@80x24.org> | 2020-12-24 10:09:19 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2020-12-25 08:56:50 +0000 |
commit | e8d6c34c749d1b0fd1dc1278cd4a2a310b31a9ac (patch) | |
tree | 8d763b9a908846bd5ab438d742f6e7f71162be5a /lib/PublicInbox | |
parent | b3cf37096874c6c80ef554e5153e5d995c72ab95 (diff) | |
download | public-inbox-e8d6c34c749d1b0fd1dc1278cd4a2a310b31a9ac.tar.gz |
Note: I'm not sure if it's worth documenting and supporting this long-term. We can can avoid taking locks for invocations of "index --all" and rely on high-resolution ctime (struct timespec st_ctim) comparisons of msgmap.sqlite3 and the packed-refs + refs/heads directory of the newest epoch. This cuts public-inbox-index invocations with "--all --no-update-extindex -L basic" down from 0.92s to 0.31s. The change with "-L medium" or "-L full" and (default) non-zero jobs is even more drastic, reducing a 12-13s no-op invocation down to the same 0.31s
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/V2Writable.pm | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index 531a72b2..2b849ddf 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -1351,11 +1351,19 @@ sub index_sync { $opt //= {}; return xapian_only($self, $opt) if $opt->{xapian_only}; - my $pr = $opt->{-progress}; my $epoch_max; - my $latest = $self->{ibx}->git_dir_latest(\$epoch_max); - return unless defined $latest; + my $latest = $self->{ibx}->git_dir_latest(\$epoch_max) // return; + if ($opt->{'fast-noop'}) { # nanosecond (st_ctim) comparison + use Time::HiRes qw(stat); + if (my @mm = stat("$self->{ibx}->{inboxdir}/msgmap.sqlite3")) { + my $c = $mm[10]; # 10 = ctime (nsec NV) + my @hd = stat("$latest/refs/heads"); + my @pr = stat("$latest/packed-refs"); + return if $c > ($hd[10] // 0) && $c > ($pr[10] // 0); + } + } + my $pr = $opt->{-progress}; my $seq = $opt->{sequential_shard}; my $art_beg; # the NNTP article number we start xapian_only at my $idxlevel = $self->{ibx}->{indexlevel}; |