~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to database/schema/upgrade.py

  • Committer: Raphael Badin
  • Date: 2012-01-06 08:27:55 UTC
  • mfrom: (14513.5.4 builder-history-lfa)
  • mto: This revision was merged to the branch mainline in revision 14654.
  • Revision ID: raphael.badin@canonical.com-20120106082755-95a0eh6nakv5hj3b
Merge devel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
        LaunchpadDatabaseRevision.start_time
111
111
            = transaction_timestamp() AT TIME ZONE 'UTC';
112
112
    """)
113
 
START_UPDATE_LOG_SQL = dedent("""\
114
 
    INSERT INTO LaunchpadDatabaseUpdateLog (
115
 
        start_time, end_time, branch_nick, revno, revid)
116
 
    VALUES (transaction_timestamp() AT TIME ZONE 'UTC', NULL, %s, %s, %s);
117
 
    """)
118
 
FINISH_UPDATE_LOG_SQL = dedent("""\
119
 
    UPDATE LaunchpadDatabaseUpdateLog
120
 
    SET end_time = statement_timestamp() AT TIME ZONE 'UTC'
121
 
    WHERE start_time = transaction_timestamp() AT TIME ZONE 'UTC';
122
 
    """)
123
113
 
124
114
 
125
115
def to_seconds(td):
172
162
 
173
163
def apply_patches_normal(con):
174
164
    """Update a non replicated database."""
175
 
    # On dev environments, until we create a fresh database baseline the
176
 
    # LaunchpadDatabaseUpdateLog tables does not exist at this point (it
177
 
    # will be created later via database patch). Don't try to update
178
 
    # LaunchpadDatabaseUpdateLog if it does not exist.
179
 
    cur = con.cursor()
180
 
    cur.execute("""
181
 
        SELECT EXISTS (
182
 
            SELECT TRUE FROM information_schema.tables
183
 
            WHERE
184
 
                table_schema='public'
185
 
                AND table_name='launchpaddatabaseupdatelog')
186
 
            """)
187
 
    updatelog_exists = cur.fetchone()[0]
188
 
 
189
 
    # Add a record to LaunchpadDatabaseUpdateLog that we are starting
190
 
    # an update.
191
 
    if updatelog_exists:
192
 
        cur.execute(START_UPDATE_LOG_SQL % sqlvalues(*get_bzr_details()))
193
 
 
194
165
    # trusted.sql contains all our stored procedures, which may
195
166
    # be required for patches to apply correctly so must be run first.
196
167
    apply_other(con, 'trusted.sql')
197
168
 
198
169
    # Prepare to repair patch timestamps if necessary.
 
170
    cur = con.cursor()
199
171
    cur.execute(FIX_PATCH_TIMES_PRE_SQL)
200
172
 
201
173
    # Apply the patches
210
182
    # Update comments.
211
183
    apply_comments(con)
212
184
 
213
 
    # Update the LaunchpadDatabaseUpdateLog record, stating the
214
 
    # completion time.
215
 
    if updatelog_exists:
216
 
        cur.execute(FINISH_UPDATE_LOG_SQL)
217
 
 
218
185
 
219
186
def apply_patches_replicated():
220
187
    """Update a Slony-I cluster."""
248
215
            # Flush or we might lose statements from buffering.
249
216
            combined_sql.flush()
250
217
 
251
 
    # Add a LaunchpadDatabaseUpdateLog record that we are starting patch
252
 
    # application.
253
 
    add_sql(START_UPDATE_LOG_SQL % sqlvalues(*get_bzr_details()))
254
 
 
255
218
    # Apply trusted.sql
256
219
    add_sql(open(os.path.join(SCHEMA_DIR, 'trusted.sql'), 'r').read())
257
220