j.c.sackett has proposed merging 
lp:~jcsackett/launchpad/archivemirror-timeout-618400 into lp:launchpad.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)
Related bugs:
  #618400 Distribution:+archivemirrors timing out in 1% of requests
  https://bugs.launchpad.net/bugs/618400

For more details, see:
https://code.launchpad.net/~jcsackett/launchpad/archivemirror-timeout-618400/+merge/46550

Summary
=======

Distribution:+archivemirrors has a timeout caused by a combination of factors: 
1) repeated country queries for each distributionmirror that get expensive in 
aggregate and 2) a very expensive mirror freshness query/calculation.

This branch addresses the first cause; a second branch will need to be landed 
to address the second cause and close bug 618400.

In the process there is a slight refactor to remove some repeated code.

Proposed fix
============

When getting distribution mirrors, get the countries for the mirrors at the 
same time, rather than querying for them one by one later.

Preimplementation
=================

Spoke with Curtis Hovey and William Grant about the country query issue.

Implementation
==============

lib/lp/registry/interfaces/distribution.py
lib/lp/registry/model/distribution.py
-------------------------------------

Added a method, _getActiveMirrors, which can generate the resultset for either 
cdimages or archive mirrors, with or without the country join. Updated the 
archive_mirrors and cdimage_mirrors properties to use this method. Added an 
archive_mirrors_by_country and cdimage_mirrors_by_country property that also 
uses this method, and added them as not-exported CollectionFields to the 
interface.

lib/lp/registry/browser/distribution.py
---------------------------------------

Updated the +archivemirrors view and +cdmirrors view to use their respective 
_by_country property. Updated the parent view to use the returned data properly.

lib/lp/registry/model/distributionmirror.py
-------------------------------------------

Drive by reformat of the __all__ clause per style guidelines.

lib/lp/registry/browser/tests/distribution-views.txt
----------------------------------------------------

Updated test to include archive mirrors alongside cdimage.

Tests
=====

bin/test -t distribution-views\.txt
bin/test -t distributionmirror-views\.txt

QA
==

Make certain that Distribution:+archivemirrors loads fine. Then, make certain 
it doesn't timeout and ceases to be in the timeout reports. The bug itself 
doesn't indicate how often the timeout occurs, which makes this a touch 
difficult to QA.

Lint
====

= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/registry/browser/distribution.py
  lib/lp/registry/browser/tests/distribution-views.txt
  lib/lp/registry/interfaces/distribution.py
  lib/lp/registry/model/distribution.py
  lib/lp/registry/model/distributionmirror.py

./lib/lp/registry/model/distributionmirror.py
     594: E501 line too long (80 characters)
     460: Line exceeds 78 characters.
     478: Line exceeds 78 characters.
     594: Line exceeds 78 characters.
     812: Line exceeds 78 characters.
     865: Line exceeds 78 characters.

The above lint errors are from a number of queries (not in this branch) that I 
think are already hard enough to read without odd wrapping changes.
-- 
https://code.launchpad.net/~jcsackett/launchpad/archivemirror-timeout-618400/+merge/46550
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~jcsackett/launchpad/archivemirror-timeout-618400 into lp:launchpad.

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to