diff options
author | terry%mozilla.org <> | 1999-10-12 02:14:30 +0200 |
---|---|---|
committer | terry%mozilla.org <> | 1999-10-12 02:14:30 +0200 |
commit | 73627e594d61e4606b57880cb35bdc50efb3e900 (patch) | |
tree | 329975a02b727ff925fdf1b4aae13b942bd2014c /sanitycheck.cgi | |
parent | 76965a12c5f49e9a6bf99ea0f2d88ba0852bab3d (diff) | |
download | bugzilla-73627e594d61e4606b57880cb35bdc50efb3e900.tar.gz bugzilla-73627e594d61e4606b57880cb35bdc50efb3e900.tar.xz |
Added a "votes" field to the bugs table, which caches the total number
of votes that have been cast for that bug. This let me simplify the
SQL in buglist.cgi, which makes things more efficient and fixes
several strange bugs.
Diffstat (limited to 'sanitycheck.cgi')
-rwxr-xr-x | sanitycheck.cgi | 63 |
1 files changed, 58 insertions, 5 deletions
diff --git a/sanitycheck.cgi b/sanitycheck.cgi index f13fb4a13..b1b2022eb 100755 --- a/sanitycheck.cgi +++ b/sanitycheck.cgi @@ -24,11 +24,14 @@ use strict; require "CGI.pl"; +use vars %::FORM; + print "Content-type: text/html\n"; print "\n"; ConnectToDatabase(); +my $offervotecacherebuild = 0; sub Status { my ($str) = (@_); @@ -45,14 +48,37 @@ sub BugLink { return "<a href='show_bug.cgi?id=$id'>$id</a>"; } +sub AlertBadVoteCache { + my ($id) = (@_); + Alert("Bad vote cache for bug " . BugLink($id)); + $offervotecacherebuild = 1; +} -PutHeader("Bugzilla Sanity Check"); - -print "OK, now running sanity checks.<P>\n"; my @row; my @checklist; +PutHeader("Bugzilla Sanity Check"); + +if (exists $::FORM{'rebuildvotecache'}) { + Status("OK, now rebuilding vote cache."); + SendSQL("lock tables bugs write, votes read"); + SendSQL("update bugs set votes = 0"); + SendSQL("select bug_id, sum(count) from votes group by bug_id"); + my %votes; + while (@row = FetchSQLData()) { + my ($id, $v) = (@row); + $votes{$id} = $v; + } + foreach my $id (keys %votes) { + SendSQL("update bugs set votes = $votes{$id} where bug_id = $id"); + } + SendSQL("unlock tables"); + Status("Vote cache has been rebuild."); +} + +print "OK, now running sanity checks.<P>\n"; + Status("Checking groups"); SendSQL("select bit from groups where bit != pow(2, round(log(bit) / log(2)))"); while (my $bit = FetchOneColumn()) { @@ -124,12 +150,13 @@ undef $profid{0}; Status("Checking reporter/assigned_to/qa_contact ids"); -SendSQL("select bug_id,reporter,assigned_to,qa_contact from bugs"); +SendSQL("select bug_id,reporter,assigned_to,qa_contact,votes from bugs"); +my %votes; my %bugid; while (@row = FetchSQLData()) { - my($id, $reporter, $assigned_to, $qa_contact) = (@row); + my($id, $reporter, $assigned_to, $qa_contact, $v) = (@row); $bugid{$id} = 1; if (!defined $profid{$reporter}) { Alert("Bad reporter $reporter in " . BugLink($id)); @@ -140,8 +167,34 @@ while (@row = FetchSQLData()) { if ($qa_contact != 0 && !defined $profid{$qa_contact}) { Alert("Bad qa_contact $qa_contact in" . BugLink($id)); } + if ($v != 0) { + $votes{$id} = $v; + } +} + +Status("Checking cached vote counts"); +SendSQL("select bug_id, sum(count) from votes group by bug_id"); + +while (@row = FetchSQLData()) { + my ($id, $v) = (@row); + if ($v <= 0) { + Alert("Bad vote sum for bug $id"); + } else { + if (!defined $votes{$id} || $votes{$id} != $v) { + AlertBadVoteCache($id); + } + delete $votes{$id}; + } +} +foreach my $id (keys %votes) { + AlertBadVoteCache($id); } +if ($offervotecacherebuild) { + print qq{<a href="sanitycheck.cgi?rebuildvotecache=1">Click here to rebuild the vote cache</a><p>\n}; +} + + Status("Checking CC table"); SendSQL("select bug_id,who from cc"); |