Thanks for the review! You've brought on some good improvements there: > > === modified file 'lib/lp/translations/browser/tests/test_baseexportview.py' > > --- lib/lp/translations/browser/tests/test_baseexportview.py 2010-02-19 > 17:06:01 +0000 > > +++ lib/lp/translations/browser/tests/test_baseexportview.py 2010-03-05 > 17:38:34 +0000 > > @@ -15,13 +16,14 @@ > > ProductSeriesTranslationsExportView) > > from lp.translations.interfaces.translationfileformat import ( > > TranslationFileFormat) > > +from lp.translations.model.poexportrequest import POExportRequest > > from lp.testing import TestCaseWithFactory > > > > > > def wipe_queue(queue): > > """Erase all export queue entries.""" > > - while queue.entry_count > 0: > > - queue.popRequest() > > + queue_ids = IMasterStore(POExportRequest).execute( > > You don't need to store the queue ids here, do you? You're right, I don't, and this can be cleaned up. Just did that. > > === modified file 'lib/lp/translations/doc/poexport-request.txt' > > --- lib/lp/translations/doc/poexport-request.txt 2010-02-19 16:54:42 > +0000 > > +++ lib/lp/translations/doc/poexport-request.txt 2010-03-05 17:38:34 > +0000 > > @@ -53,9 +53,10 @@ > > > > Now we request that the queue be processed. > > > > - >>> from lp.testing.faketransaction import FakeTransaction > > + >>> import transaction > > >>> from lp.translations.scripts.po_export_queue import process_queue > > - >>> process_queue(FakeTransaction(), MockLogger()) > > + >>> transaction.commit() > > + >>> process_queue(transaction, MockLogger()) > > log> Exporting objects for Happy Downloader, related to template pmount > > in Ubuntu Hoary package "pmount" > > log> Stored file at http://.../launchpad-export.tar.gz > > @@ -185,7 +186,8 @@ > > >>> from lp.translations.interfaces.translationfileformat import ( > > ... TranslationFileFormat) > > >>> request_set.addRequest(person, None, [cs], > TranslationFileFormat.MO) > > - >>> process_queue(FakeTransaction(), MockLogger()) > > + >>> transaction.commit() > > Do you think it'd be worth adding comments explaining why we need all > these commits? Definitely. I added a brief note to the first one. > > === added file 'lib/lp/translations/doc/poexportqueue-replication-lag.txt' > > --- lib/lp/translations/doc/poexportqueue-replication-lag.txt 1970-01-01 > 00:00:00 +0000 > > +++ lib/lp/translations/doc/poexportqueue-replication-lag.txt 2010-03-05 > 17:38:34 +0000 > > @@ -0,0 +1,89 @@ > > += Replication Lag and the Export Queue = > > + > > +Due to replication lag it's possible for the export queue to see a > > +request on the slave store that it actually just removed from the master > > +store. > > + > > +We start our story with an empty export queue. > > + > > + >>> from datetime import timedelta > > + >>> import transaction > > + >>> from zope.component import getUtility > > + >>> from canonical.launchpad.interfaces.lpstorm import IMasterStore > > + >>> from lp.translations.interfaces.poexportrequest import ( > > + ... IPOExportRequestSet) > > + >>> from lp.translations.interfaces.pofile import IPOFile > > + >>> from lp.translations.model.poexportrequest import POExportRequest > > + >>> query = IMasterStore(POExportRequest).execute( > > + ... "DELETE FROM POExportRequest") > > + > > + >>> queue = getUtility(IPOExportRequestSet) > > + > > +We have somebody making an export request. > > + > > + >>> requester = factory.makePersonNoCommit( > > + ...