Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4.0 database changes #458

Merged
merged 2 commits into from
Mar 23, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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