Skip to content

Commit

Permalink
Merge pull request mozilla-services#458 from jberkus/master
Browse files Browse the repository at this point in the history
4.0 database changes
  • Loading branch information
jberkus committed Mar 23, 2012
2 parents 5fe3372 + 5aca303 commit a978f8c
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 0 deletions.
27 changes: 27 additions & 0 deletions docs/databaseadminfunctions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,33 @@ such, running either the update or backfill function replaces all existing data.
Since it needs an exclusive lock on the matview, it is possible (though
unlikely) for it to fail to obtain the lock and error out.

update_nightly_builds, backfill_nightly_builds
----------------------------------------------

Purpose: updates "nightly_builds" based on the contents of the reports_clean table

Called By: daily cron job

::

update_nightly_builds (
updateday DATE optional default yesterday,
checkdata BOOLEAN optional default true
)
SELECT update_nightly_builds ( '2011-11-26' );
backfill_nightly_builds (
updateday DATE optional default yesterday
)
SELECT backfill_nightly_builds ( '2011-11-26' );
updateday
UTC day to pull data for.
checkdata
whether or not to check dependant data and throw an error if it's not found. Optional.


Schema Management Functions
===========================
Expand Down
12 changes: 12 additions & 0 deletions sql/upgrade/4.0/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
4.0 Database Updates
====================

This batch makes the following database changes:

bug 738323
add column for startup crash count to TCBS

...

The above changes should take only a few minutes to deploy.
This upgrade does not require a downtime.
4 changes: 4 additions & 0 deletions sql/upgrade/4.0/add_startup_crashes_col.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
\set ON_ERROR_STOP 1

alter table tcbs add column startup_count int;

76 changes: 76 additions & 0 deletions sql/upgrade/4.0/update_tcbs.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
\set ON_ERROR_STOP 1

create or replace function update_tcbs (
updateday date, checkdata boolean default true )
RETURNS BOOLEAN
LANGUAGE plpgsql
SET work_mem = '512MB'
SET temp_buffers = '512MB'
AS $f$
BEGIN
-- this procedure goes throught the daily TCBS update for the
-- new TCBS table
-- designed to be run only once for each day
-- this new version depends on reports_clean

-- check that it hasn't already been run

IF checkdata THEN
PERFORM 1 FROM tcbs
WHERE report_date = updateday LIMIT 1;
IF FOUND THEN
RAISE EXCEPTION 'TCBS has already been run for the day %.',updateday;
END IF;
END IF;

-- check if reports_clean is complete
IF NOT reports_clean_done(updateday) THEN
IF checkdata THEN
RAISE EXCEPTION 'Reports_clean has not been updated to the end of %',updateday;
ELSE
RETURN TRUE;
END IF;
END IF;

-- populate the matview

INSERT INTO tcbs (
signature_id, report_date, product_version_id,
process_type, release_channel,
report_count, win_count, mac_count, lin_count, hang_count,
startup_count
)
SELECT signature_id, updateday, product_version_id,
process_type, release_channel,
count(*),
sum(case when os_name = 'Windows' THEN 1 else 0 END),
sum(case when os_name = 'Mac OS X' THEN 1 else 0 END),
sum(case when os_name = 'Linux' THEN 1 else 0 END),
count(hang_id),
sum(case when uptime < INTERVAL '1 minute' THEN 1 else 0 END)
FROM reports_clean
JOIN product_versions USING (product_version_id)
WHERE utc_day_is(date_processed, updateday)
AND tstz_between(date_processed, build_date, sunset_date)
GROUP BY signature_id, updateday, product_version_id,
process_type, release_channel;

ANALYZE tcbs;

-- tcbs_ranking removed until it's being used

-- done
RETURN TRUE;
END;
$f$;











24 changes: 24 additions & 0 deletions sql/upgrade/4.0/upgrade.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash
#please see README

set -e

CURDIR=$(dirname $0)
VERSION=4.0

#echo '*********************************************************'
#echo 'support functions'
#psql -f ${CURDIR}/support_functions.sql breakpad

echo '*********************************************************'
echo 'add startup crash count to TCBS'
echo 'bug 738323'
psql -f ${CURDIR}/add_startup_crashes_col.sql breakpad
psql -f ${CURDIR}/update_tcbs.sql breakpad

#change version in DB
psql -c "SELECT update_socorro_db_version( '$VERSION' )" breakpad

echo "$VERSION upgrade done"

exit 0

0 comments on commit a978f8c

Please sign in to comment.