diff --git a/docs/databaseadminfunctions.rst b/docs/databaseadminfunctions.rst index 3003723484..d91859f790 100644 --- a/docs/databaseadminfunctions.rst +++ b/docs/databaseadminfunctions.rst @@ -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 =========================== diff --git a/sql/upgrade/4.0/README.rst b/sql/upgrade/4.0/README.rst new file mode 100644 index 0000000000..ca43bf983f --- /dev/null +++ b/sql/upgrade/4.0/README.rst @@ -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. \ No newline at end of file diff --git a/sql/upgrade/4.0/add_startup_crashes_col.sql b/sql/upgrade/4.0/add_startup_crashes_col.sql new file mode 100644 index 0000000000..30998218c4 --- /dev/null +++ b/sql/upgrade/4.0/add_startup_crashes_col.sql @@ -0,0 +1,4 @@ +\set ON_ERROR_STOP 1 + +alter table tcbs add column startup_count int; + diff --git a/sql/upgrade/4.0/update_tcbs.sql b/sql/upgrade/4.0/update_tcbs.sql new file mode 100644 index 0000000000..23d6ed00c0 --- /dev/null +++ b/sql/upgrade/4.0/update_tcbs.sql @@ -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$; + + + + + + + + + + + diff --git a/sql/upgrade/4.0/upgrade.sh b/sql/upgrade/4.0/upgrade.sh new file mode 100755 index 0000000000..45cdd87744 --- /dev/null +++ b/sql/upgrade/4.0/upgrade.sh @@ -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 \ No newline at end of file