diff options
author | Eric Wong (Contractor, The Linux Foundation) <e@80x24.org> | 2018-02-27 20:29:55 +0000 |
---|---|---|
committer | Eric Wong (Contractor, The Linux Foundation) <e@80x24.org> | 2018-02-28 23:06:20 +0000 |
commit | 4ac55dde4d10887a7ad9c325924d322491bd61d1 (patch) | |
tree | ad3a0fa7696d1947bb55081312c61fc984dffa46 | |
parent | d1915096bbd5fdda4818336b64131799966e9d6e (diff) | |
download | public-inbox-4ac55dde4d10887a7ad9c325924d322491bd61d1.tar.gz |
We need to ensure Xapian transaction commits are made to remote partitions before associated commits hit the skeleton DB. This causes unnecessary commits to be made to the skeleton DB; but they're mostly harmless. Further work will be necessary to ensure proper ordering and avoidance of unnecessary commits.
-rw-r--r-- | lib/PublicInbox/SearchIdxPart.pm | 1 | ||||
-rw-r--r-- | lib/PublicInbox/V2Writable.pm | 13 |
2 files changed, 7 insertions, 7 deletions
diff --git a/lib/PublicInbox/SearchIdxPart.pm b/lib/PublicInbox/SearchIdxPart.pm index 6025fc40..2f577ecf 100644 --- a/lib/PublicInbox/SearchIdxPart.pm +++ b/lib/PublicInbox/SearchIdxPart.pm @@ -45,6 +45,7 @@ sub partition_worker_loop ($$$) { if ($line eq "commit\n") { $xdb->commit_transaction if $txn; $txn = undef; + $self->{skeleton}->remote_commit; } elsif ($line eq "close\n") { $self->_xdb_release; $xdb = $txn = undef; diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index ff3b6573..73110ff0 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -131,22 +131,21 @@ sub searchidx_checkpoint { # order matters, we can only close {skel} after all partitions # are done because the partitions also write to {skel} - if (my $parts = $self->{idx_parts}) { foreach my $idx (@$parts) { - $idx->remote_commit; + $idx->remote_commit; # propagates commit to skel $idx->remote_close unless $more; } delete $self->{idx_parts} unless $more; } if (my $skel = $self->{skel}) { - $skel->{mm}->{dbh}->commit; + my $dbh = $skel->{mm}->{dbh}; + $dbh->commit; if ($more) { - $skel->{mm}->{dbh}->begin_work; - } - $skel->remote_commit; - unless ($more) { + $dbh->begin_work; + } else { + $skel->remote_commit; # XXX should be unnecessary... $skel->remote_close; delete $self->{skel}; } |