$self->checkpoint;
$max = $self->git_epoch_max + 1;
}
+ my (undef, $tl) = eidx_init($self); # acquire lock
my $pfx = $self->git_pfx;
$max //= $self->git_epoch_max;
while (1) {
my $git = PublicInbox::Git->new($latest);
if (!$old) {
$git->qx(qw(config core.sharedRepository 0600));
- $self->done; # force eidx_init on next round
+ $self->done; # unlock
+ # re-acquire lock, update alternates for new epoch
+ (undef, $tl) = eidx_init($self);
}
my $packed_bytes = $git->packed_bytes;
my $unpacked_bytes = $packed_bytes / $self->packing_factor;
my $tl = wantarray && $self->{-err_wr} ?
PublicInbox::OnDestroy->new($$, \&_tail_err, $self) :
undef;
- $eidx->idx_init({-private => 1});
+ $eidx->idx_init({-private => 1}); # acquires lock
wantarray ? ($eidx, $tl) : $eidx;
}
\@docids;
}
+sub set_sync_info {
+ my ($self, $oidhex, $folder, $id) = @_;
+ ($self->{lms} //= do {
+ require PublicInbox::LeiMailSync;
+ my $f = "$self->{priv_eidx}->{topdir}/mail_sync.sqlite3";
+ my $lms = PublicInbox::LeiMailSync->new($f);
+ $lms->lms_begin;
+ $lms;
+ })->set_src($oidhex, $folder, $id);
+}
+
sub add_eml {
my ($self, $eml, $vmd, $xoids) = @_;
my $im = $self->importer; # may create new epoch
- my ($eidx, $tl) = eidx_init($self); # updates/writes alternates file
+ my ($eidx, $tl) = eidx_init($self);
my $oidx = $eidx->{oidx}; # PublicInbox::Import::add checks this
my $smsg = bless { -oidx => $oidx }, 'PublicInbox::Smsg';
- $im->add($eml, undef, $smsg) or return; # duplicate returns undef
+ my $im_mark = $im->add($eml, undef, $smsg);
+ if ($vmd && $vmd->{sync_info}) {
+ set_sync_info($self, $smsg->{blob}, @{$vmd->{sync_info}});
+ }
+ $im_mark or return; # duplicate blob returns undef
local $self->{current_info} = $smsg->{blob};
my $vivify_xvmd = delete($smsg->{-vivify_xvmd}) // []; # exact matches
warn $err;
}
}
+ if (my $lms = delete $self->{lms}) {
+ $lms->lms_commit;
+ }
$self->{priv_eidx}->done; # V2Writable::done
xchg_stderr($self);
die $err if $err;
close $err->[0];
$self->{-err_wr} = $err->[1];
}
- $SIG{__WARN__} = PublicInbox::Eml::warn_ignore_cb();
$self->SUPER::ipc_atfork_child;
}