- my ($self, $eml, @kw) = @_;
- add_eml($self, $eml, @kw) // set_eml_keywords($self, $eml, @kw);
+ my ($self, $eml, $vmd) = @_;
+ add_eml($self, $eml, $vmd) // set_eml_vmd($self, $eml, $vmd);
+}
+
+sub add_eml_maybe {
+ my ($self, $eml) = @_;
+ my $lxs = $self->{lxs_all_local} // die 'BUG: no {lxs_all_local}';
+ return if $lxs->xids_for($eml, 1);
+ add_eml($self, $eml);
+}
+
+# set or update keywords for external message, called via ipc_do
+sub set_xkw {
+ my ($self, $eml, $kw) = @_;
+ my $lxs = $self->{lxs_all_local} // die 'BUG: no {lxs_all_local}';
+ if ($lxs->xids_for($eml, 1)) { # is it in a local external?
+ # TODO: index keywords only
+ } else {
+ set_eml($self, $eml, { kw => $kw });
+ }
+}
+
+sub checkpoint {
+ my ($self, $wait) = @_;
+ if (my $im = $self->{im}) {
+ $wait ? $im->barrier : $im->checkpoint;
+ }
+ $self->{priv_eidx}->checkpoint($wait);