]> Sergey Matveev's repositories - public-inbox.git/commitdiff
extindex: SIGUSR1 supports checkpoint
authorEric Wong <e@80x24.org>
Sat, 7 Nov 2020 10:56:59 +0000 (10:56 +0000)
committerEric Wong <e@80x24.org>
Sun, 8 Nov 2020 10:18:22 +0000 (10:18 +0000)
Matching the behavior of git-fast-import(1), we'll allow a user
to send SIGUSR1 to checkpoint over.sqlite3 and Xapian.

lib/PublicInbox/ExtSearchIdx.pm
script/public-inbox-extindex

index 503428021854d827f5970a1c73510790d3c62976..7aaf8291d061909877495313481662429ddea69c 100644 (file)
@@ -284,16 +284,9 @@ sub last_commits {
 }
 
 sub _sync_inbox ($$$) {
-       my ($self, $opt, $ibx) = @_;
-       my $sync = {
-               need_checkpoint => \(my $bool = 0),
-               reindex => $opt->{reindex},
-               -opt => $opt,
-               self => $self,
-               ibx => $ibx,
-               nr => \(my $nr = 0),
-               -regen_fmt => "%u/?\n",
-       };
+       my ($self, $sync, $ibx) = @_;
+       $sync->{ibx} = $ibx;
+       $sync->{nr} = \(my $nr = 0);
        my $v = $ibx->version;
        my $ekey = $ibx->eidx_key;
        if ($v == 2) {
@@ -324,10 +317,18 @@ sub eidx_sync { # main entry point
        local $SIG{__WARN__} = sub {
                $warn_cb->($self->{current_info}, ': ', @_);
        };
+       my $sync = {
+               need_checkpoint => \(my $need_checkpoint = 0),
+               reindex => $opt->{reindex},
+               -opt => $opt,
+               self => $self,
+               -regen_fmt => "%u/?\n",
+       };
+       local $SIG{USR1} = sub { $need_checkpoint = 1 };
 
        # don't use $_ here, it'll get clobbered by reindex_checkpoint
        for my $ibx (@{$self->{ibx_list}}) {
-               _sync_inbox($self, $opt, $ibx);
+               _sync_inbox($self, $sync, $ibx);
        }
 
        $self->{oidx}->rethread_done($opt);
index bb1e174aa338a6a2851062c757977f901786b90d..864a27327e5a70b80a75cb852e423baad78da9a2 100644 (file)
@@ -33,6 +33,7 @@ die "--jobs must be >= 0\n" if defined $opt->{jobs} && $opt->{jobs} < 0;
 
 # require lazily to speed up --help
 my $eidx_dir = shift(@ARGV) // die "E: $help";
+local $SIG{USR1} = 'IGNORE'; # to be overridden in eidx_sync
 require PublicInbox::Admin;
 my $cfg = PublicInbox::Config->new;
 my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV, $opt, $cfg);