On Wed, Aug 18, 2010 at 1:01 AM, j.c.sackett <[email protected]> wrote: > The findPathToTeam calculations were a problem b/c in the cases causing the > timeout, the query gets called hundreds of times, leading to the largest set > of time in the process. Because of the iteration through an unknown series of > team relations, there's no easy way to predict how this will work. > > As an example, in > https://lp-oops.canonical.com/oops.py/?oopsid=OOPS-1688ED2377 you can see the > query used in findPathToTeam being called 261 times, for a total time of > 4610. The other +participation OOPS reports show the same thing.
Ok, so theres basic reason for it to be slow. Have you considered this algorithm (psuedo code): # 1 query, we want all the teams he participates in # (that is, all rows that have the member == user, and the team == anything # should return a list of tuples [(user, t1), (user, t2)] or something like that memberships = list(get_memberships(person==user)) teams = [team for _, team in memberships] # Get all the memberships of those teams themselves; because memberships # are transitive, this will be a subset of the first result, and lets us infer # a valid graph cheaply (there can be multiple paths to a team, we only # need to show one) team_temberships = get_memberships(person in teams) graph_edges = list(team_memberships) graph = dict(graph_edges) graph.update(memberships) # now render ... -- https://code.launchpad.net/~jcsackett/launchpad/plus-participation-additional-fixes/+merge/32820 Your team Launchpad code reviewers is requested to review the proposed merge of lp:~jcsackett/launchpad/plus-participation-additional-fixes into lp:launchpad/devel. _______________________________________________ Mailing list: https://launchpad.net/~launchpad-reviewers Post to : [email protected] Unsubscribe : https://launchpad.net/~launchpad-reviewers More help : https://help.launchpad.net/ListHelp

