summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2007-11-19 03:23:54 +0100
committerlpsolit%gmail.com <>2007-11-19 03:23:54 +0100
commit68312cf980e2b7d7f55d48fd9102d8480404a1a6 (patch)
treece89937c30cc30ff45ecab8c488d59323e481b06
parent9d6205cdb651fe3769ac58f03068dedb68e7689a (diff)
downloadbugzilla-68312cf980e2b7d7f55d48fd9102d8480404a1a6.tar.gz
bugzilla-68312cf980e2b7d7f55d48fd9102d8480404a1a6.tar.xz
Bug 403834: Replace table locks with database transactions in tokens, votes, and sanitycheck - Patch by Emmanuel Seyman <eseyman@linagora.com> r/a=mkanat
-rwxr-xr-xsanitycheck.cgi22
-rwxr-xr-xtoken.cgi12
-rwxr-xr-xvotes.cgi6
3 files changed, 14 insertions, 26 deletions
diff --git a/sanitycheck.cgi b/sanitycheck.cgi
index b1a48b16a..57dca0c31 100755
--- a/sanitycheck.cgi
+++ b/sanitycheck.cgi
@@ -106,7 +106,7 @@ unless ($user->in_group('editcomponents')) {
if ($cgi->param('rebuildvotecache')) {
Status('vote_cache_rebuild_start');
- $dbh->bz_lock_tables('bugs WRITE', 'votes READ');
+ $dbh->bz_start_transaction();
$dbh->do(q{UPDATE bugs SET votes = 0});
my $sth_update = $dbh->prepare(q{UPDATE bugs
SET votes = ?
@@ -117,7 +117,7 @@ if ($cgi->param('rebuildvotecache')) {
while (my ($id, $v) = $sth->fetchrow_array) {
$sth_update->execute($v, $id);
}
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
Status('vote_cache_rebuild_end');
}
@@ -262,11 +262,7 @@ if ($cgi->param('rescanallBugMail')) {
if ($cgi->param('remove_invalid_bug_references')) {
Status('bug_reference_deletion_start');
- $dbh->bz_lock_tables('attachments WRITE', 'bug_group_map WRITE',
- 'bugs_activity WRITE', 'cc WRITE',
- 'dependencies WRITE', 'duplicates WRITE',
- 'flags WRITE', 'keywords WRITE',
- 'longdescs WRITE', 'votes WRITE', 'bugs READ');
+ $dbh->bz_start_transaction();
foreach my $pair ('attachments/', 'bug_group_map/', 'bugs_activity/', 'cc/',
'dependencies/blocked', 'dependencies/dependson',
@@ -286,7 +282,7 @@ if ($cgi->param('remove_invalid_bug_references')) {
}
}
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
Status('bug_reference_deletion_end');
}
@@ -297,7 +293,7 @@ if ($cgi->param('remove_invalid_bug_references')) {
if ($cgi->param('remove_invalid_attach_references')) {
Status('attachment_reference_deletion_start');
- $dbh->bz_lock_tables('attachments WRITE', 'attach_data WRITE');
+ $dbh->bz_start_transaction();
my $attach_ids =
$dbh->selectcol_arrayref('SELECT attach_data.id
@@ -311,7 +307,7 @@ if ($cgi->param('remove_invalid_attach_references')) {
join(',', @$attach_ids) . ')');
}
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
Status('attachment_reference_deletion_end');
}
@@ -698,7 +694,7 @@ sub _check_keywords {
Status('keyword_cache_start');
if ($cgi->param('rebuildkeywordcache')) {
- $dbh->bz_lock_tables('bugs write', 'keywords read', 'keyworddefs read');
+ $dbh->bz_start_transaction();
}
my $query = q{SELECT keywords.bug_id, keyworddefs.name
@@ -765,7 +761,7 @@ sub _check_keywords {
}
if ($cgi->param('rebuildkeywordcache')) {
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
}
}
@@ -804,10 +800,8 @@ if (scalar(@invalid_flags)) {
if ($cgi->param('remove_invalid_flags')) {
Status('flag_deletion_start');
my @flag_ids = map {$_->[0]} @invalid_flags;
- $dbh->bz_lock_tables('flags WRITE');
# Silently delete these flags, with no notification to requesters/setters.
$dbh->do('DELETE FROM flags WHERE id IN (' . join(',', @flag_ids) .')');
- $dbh->bz_unlock_tables();
Status('flag_deletion_end');
}
else {
diff --git a/token.cgi b/token.cgi
index a880d3294..cf6b37811 100755
--- a/token.cgi
+++ b/token.cgi
@@ -215,13 +215,13 @@ sub changePassword {
# Update the user's password in the profiles table and delete the token
# from the tokens table.
- $dbh->bz_lock_tables('profiles WRITE', 'tokens WRITE');
+ $dbh->bz_start_transaction();
$dbh->do(q{UPDATE profiles
SET cryptpassword = ?
WHERE userid = ?},
undef, ($cryptedpassword, $userid) );
$dbh->do('DELETE FROM tokens WHERE token = ?', undef, $::token);
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
Bugzilla->logout_user_by_id($userid);
@@ -265,7 +265,7 @@ sub changeEmail {
# Update the user's login name in the profiles table and delete the token
# from the tokens table.
- $dbh->bz_lock_tables('profiles WRITE', 'tokens WRITE');
+ $dbh->bz_start_transaction();
$dbh->do(q{UPDATE profiles
SET login_name = ?
WHERE userid = ?},
@@ -273,7 +273,7 @@ sub changeEmail {
$dbh->do('DELETE FROM tokens WHERE token = ?', undef, $::token);
$dbh->do(q{DELETE FROM tokens WHERE userid = ?
AND tokentype = 'emailnew'}, undef, $userid);
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
# The email address has been changed, so we need to rederive the groups
my $user = new Bugzilla::User($userid);
@@ -308,12 +308,10 @@ sub cancelChangeEmail {
# check to see if it has been altered
if($actualemail ne $old_email) {
- $dbh->bz_lock_tables('profiles WRITE');
$dbh->do(q{UPDATE profiles
SET login_name = ?
WHERE userid = ?},
undef, ($old_email, $userid));
- $dbh->bz_unlock_tables();
# email has changed, so rederive groups
# Note that this is done _after_ the tables are unlocked
@@ -335,11 +333,9 @@ sub cancelChangeEmail {
$vars->{'new_email'} = $new_email;
Bugzilla::Token::Cancel($::token, $vars->{'message'}, $vars);
- $dbh->bz_lock_tables('tokens WRITE');
$dbh->do(q{DELETE FROM tokens WHERE userid = ?
AND tokentype = 'emailold' OR tokentype = 'emailnew'},
undef, $userid);
- $dbh->bz_unlock_tables();
# Return HTTP response headers.
print $cgi->header();
diff --git a/votes.cgi b/votes.cgi
index 4b26229a5..9dc728ef8 100755
--- a/votes.cgi
+++ b/votes.cgi
@@ -294,9 +294,7 @@ sub record_votes {
# for products that only allow one vote per bug). In that case, we still
# need to clear the user's votes from the database.
my %affected;
- $dbh->bz_lock_tables('bugs WRITE', 'bugs_activity WRITE',
- 'votes WRITE', 'longdescs WRITE',
- 'products READ', 'fielddefs READ');
+ $dbh->bz_start_transaction();
# Take note of, and delete the user's old votes from the database.
my $bug_list = $dbh->selectcol_arrayref('SELECT bug_id FROM votes
@@ -335,7 +333,7 @@ sub record_votes {
my $confirmed = CheckIfVotedConfirmed($id, $who);
push (@updated_bugs, $id) if $confirmed;
}
- $dbh->bz_unlock_tables();
+ $dbh->bz_commit_transaction();
$vars->{'type'} = "votes";
$vars->{'mailrecipients'} = { 'changer' => Bugzilla->user->login };