~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/scripts/garbo.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2012-01-04 16:24:40 UTC
  • mfrom: (8758.7.4 garbo-bulk-pruner)
  • Revision ID: launchpad@pqm.canonical.com-20120104162440-jy34l21i0bcirh1z
[r=wgrant][no-qa] Trash EmailAddress and Account records not linked
        to a Person.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2009-2012 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
4
"""Database garbage collection."""
65
65
    )
66
66
from lp.services.identity.interfaces.account import AccountStatus
67
67
from lp.services.identity.interfaces.emailaddress import EmailAddressStatus
 
68
from lp.services.identity.model.account import Account
68
69
from lp.services.identity.model.emailaddress import EmailAddress
69
70
from lp.services.job.model.job import Job
70
71
from lp.services.librarian.model import TimeLimitedToken
310
311
        """
311
312
 
312
313
 
 
314
class AccountOnlyEmailAddressPruner(BulkPruner):
 
315
    """Remove EmailAddress records not linked to a Person."""
 
316
    target_table_class = EmailAddress
 
317
    ids_to_prune_query = "SELECT id FROM EmailAddress WHERE person IS NULL"
 
318
 
 
319
 
 
320
class UnlinkedAccountPruner(BulkPruner):
 
321
    """Remove Account records not linked to a Person."""
 
322
    target_table_class = Account
 
323
    # We join with EmailAddress to ensure we only attempt removal after
 
324
    # the EmailAddress rows have been removed by
 
325
    # AccountOnlyEmailAddressPruner. We join with Person to work around
 
326
    # records with bad crosslinks. These bad crosslinks will be fixed by
 
327
    # dropping the EmailAddress.account column.
 
328
    ids_to_prune_query = """
 
329
        SELECT Account.id
 
330
        FROM Account
 
331
        LEFT OUTER JOIN EmailAddress ON Account.id = EmailAddress.account
 
332
        LEFT OUTER JOIN Person ON Account.id = Person.account
 
333
        WHERE
 
334
            EmailAddress.id IS NULL
 
335
            AND Person.id IS NULL
 
336
        """
 
337
 
 
338
 
313
339
class BugSummaryJournalRollup(TunableLoop):
314
340
    """Rollup BugSummaryJournal rows into BugSummary."""
315
341
    maximum_chunk_size = 5000
1242
1268
        SuggestiveTemplatesCacheUpdater,
1243
1269
        POTranslationPruner,
1244
1270
        UnusedPOTMsgSetPruner,
 
1271
        AccountOnlyEmailAddressPruner,
 
1272
        UnlinkedAccountPruner,
1245
1273
        ]
1246
1274
    experimental_tunable_loops = [
1247
1275
        PersonPruner,