Home | History | Annotate | Download | only in migrations
      1 DOWN_SQL = """
      2 ALTER TABLE jobs ADD COLUMN synchronizing tinyint(1) default NULL;
      3 ALTER TABLE autotests ADD COLUMN synch_type smallint(6) NOT NULL;
      4 UPDATE autotests SET synch_type = 1;
      5 UPDATE autotests SET synch_type = 2 WHERE sync_count > 1;
      6 ALTER TABLE jobs ADD COLUMN synch_type int(11) default NULL;
      7 UPDATE jobs SET synch_type = 1;
      8 UPDATE jobs SET synch_type = 2 WHERE synch_count > 1;
      9 ALTER TABLE host_queue_entries DROP COLUMN `execution_subdir`;
     10 """
     11 
     12 def migrate_up(manager):
     13     # add execution_subdir field
     14     manager.execute("""ALTER TABLE host_queue_entries ADD COLUMN
     15                        `execution_subdir` varchar(255) NOT NULL""")
     16 
     17     # fill in execution_subdir field for running/complete entries
     18     rows = manager.execute("""
     19         SELECT jobs.id, jobs.synch_type, COUNT(1) FROM jobs
     20         INNER JOIN host_queue_entries AS hqe ON jobs.id = hqe.job_id
     21         GROUP BY jobs.id""")
     22     job_hqe_count = dict((row[0], row[2]) for row in rows)
     23     synch_jobs = set(row[0] for row in rows if row[1] == 2)
     24     hqes = manager.execute("""
     25         SELECT hqe.id, hqe.job_id, hqe.status, hqe.complete, hosts.hostname
     26         FROM host_queue_entries AS hqe
     27         INNER JOIN hosts ON hqe.host_id = hosts.id
     28         WHERE hqe.status IN ('Starting', 'Running') OR complete""")
     29     for id, job_id, status, complete, hostname in hqes:
     30         if job_id in synch_jobs or job_hqe_count[job_id] == 1:
     31             execution_subdir = ''
     32         else:
     33             execution_subdir = hostname
     34         manager.execute(
     35             'UPDATE host_queue_entries SET execution_subdir = %s WHERE id = %s',
     36             execution_subdir, id)
     37 
     38     # ensure synch_type information doesn't get lost if we need to migrate down
     39     manager.execute('UPDATE jobs SET synch_count = 1 WHERE synch_type = 1')
     40     manager.execute('UPDATE jobs SET synch_count = 2 '
     41                     'WHERE synch_type = 2 AND synch_count = 1')
     42     # drop the old synch_type fields
     43     manager.execute('ALTER TABLE jobs DROP COLUMN synch_type')
     44     manager.execute('ALTER TABLE autotests DROP COLUMN synch_type')
     45     # drop deprecated synchronizing field
     46     manager.execute('ALTER TABLE jobs DROP COLUMN synchronizing')
     47 
     48 
     49 def migrate_down(manager):
     50     manager.execute_script(DOWN_SQL)
     51