~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to database/schema/upgrade.py

  • Committer: Stuart Bishop
  • Date: 2011-10-10 14:58:41 UTC
  • mto: (7675.1212.22 pending-db-changes)
  • mto: This revision was merged to the branch mainline in revision 14138.
  • Revision ID: stuart.bishop@canonical.com-20111010145841-0x4yivg9rtl5ipca
upgrade.py Slony-I 2.o fix

Show diffs side-by-side

added added

removed removed

Lines of Context:
397
397
    # We also scan for tables and sequences we want to drop and do so using
398
398
    # a final slonik script. Instead of dropping tables in the DB patch,
399
399
    # we rename them into the ToDrop namespace.
 
400
    #
 
401
    # First, remove all todrop.* sequences from replication.
 
402
    cur.execute("""
 
403
        SELECT seq_nspname, seq_relname, seq_id from %s
 
404
        WHERE seq_nspname='todrop'
 
405
        """ % fqn(replication.helpers.CLUSTER_NAMESPACE, 'sl_sequence'))
 
406
    seqs_to_unreplicate = set(
 
407
        (fqn(nspname, relname), tab_id)
 
408
        for nspname, relname, tab_id in cur.fetchall())
 
409
    if seqs_to_unreplicate:
 
410
        log.info("Unreplicating sequences: %s" % ', '.join(
 
411
            name for name, id in seqs_to_unreplicate))
 
412
        # Generate a slonik script to remove sequences from the
 
413
        # replication set.
 
414
        sk = StringIO()
 
415
        print >> sk, "try {"
 
416
        for seq_name, seq_id in seqs_to_unreplicate:
 
417
            if seq_id is not None:
 
418
                print >> sk, dedent("""\
 
419
                    echo 'Removing %s from replication';
 
420
                    set drop sequence (origin=@master_node, id=%d);
 
421
                    """ % (seq_name, seq_id))
 
422
        print >> sk, dedent("""\
 
423
            }
 
424
            on error {
 
425
                echo 'Failed to unreplicate sequences. Aborting.';
 
426
                exit 1;
 
427
                }
 
428
            """)
 
429
        log.info(
 
430
            "Generated slonik(1) script to unreplicate sequences. Invoking.")
 
431
        if not replication.helpers.execute_slonik(sk.getvalue()):
 
432
            log.fatal("Aborting.")
 
433
        log.info("slonik(1) script to drop sequences completed.")
 
434
 
 
435
    # Generate a slonik script to remove tables from the replication set,
 
436
    # and a DROP TABLE/DROP SEQUENCE sql script to run after.
400
437
    cur.execute("""
401
438
        SELECT nspname, relname, tab_id
402
439
        FROM pg_class
407
444
    tabs_to_drop = set(
408
445
        (fqn(nspname, relname), tab_id)
409
446
        for nspname, relname, tab_id in cur.fetchall())
410
 
 
411
 
    # Generate a slonik script to remove tables from the replication set,
412
 
    # and a DROP TABLE/DROP SEQUENCE sql script to run after.
413
447
    if tabs_to_drop:
414
448
        log.info("Dropping tables: %s" % ', '.join(
415
449
            name for name, id in tabs_to_drop))
441
475
        log.info("slonik(1) script to drop tables completed.")
442
476
        sql.close()
443
477
 
444
 
    # Now drop sequences. We don't do this at the same time as the tables,
445
 
    # as most sequences will be dropped implicitly with the table drop.
 
478
    # Now drop any remaining sequences. Most sequences will be dropped
 
479
    # implicitly with the table drop.
446
480
    cur.execute("""
447
481
        SELECT nspname, relname, seq_id
448
482
        FROM pg_class