Commit b93b2208 authored by bugreport%peshkin.net's avatar bugreport%peshkin.net

Bug 305126: Fix table locks after removal of derive_groups

Patch by Joel Peshkin <bugreport@peshkin.net> r=lpsolit, a=myk
parent 830eca78
...@@ -1190,12 +1190,10 @@ sub update ...@@ -1190,12 +1190,10 @@ sub update
# cc, bug_group_map, user_group_map, and groups are in here so we # cc, bug_group_map, user_group_map, and groups are in here so we
# can check the permissions of flag requestees and email addresses # can check the permissions of flag requestees and email addresses
# on the flag type cc: lists via the CanSeeBug # on the flag type cc: lists via the CanSeeBug
# function call in Flag::notify. group_group_map is in here in case # function call in Flag::notify. group_group_map is in here si
# Bugzilla::User needs to rederive groups. profiles and # Bugzilla::User can flatten groups.
# user_group_map would be READ locks instead of WRITE locks if it 'bugs WRITE', 'profiles READ', 'email_setting READ',
# weren't for derive_groups, which needs to write to those tables. 'cc READ', 'bug_group_map READ', 'user_group_map READ',
'bugs WRITE', 'profiles WRITE', 'email_setting READ',
'cc READ', 'bug_group_map READ', 'user_group_map WRITE',
'group_group_map READ', 'groups READ'); 'group_group_map READ', 'groups READ');
# Get a copy of the attachment record before we make changes # Get a copy of the attachment record before we make changes
......
...@@ -370,7 +370,8 @@ while (MoreSQLData()) { ...@@ -370,7 +370,8 @@ while (MoreSQLData()) {
# Add the bug report to the DB. # Add the bug report to the DB.
$dbh->bz_lock_tables('bugs WRITE', 'bug_group_map WRITE', 'longdescs WRITE', $dbh->bz_lock_tables('bugs WRITE', 'bug_group_map WRITE', 'longdescs WRITE',
'cc WRITE', 'keywords WRITE', 'dependencies WRITE', 'cc WRITE', 'keywords WRITE', 'dependencies WRITE',
'bugs_activity WRITE', 'groups READ', 'user_group_map READ', 'bugs_activity WRITE', 'groups READ',
'user_group_map READ', 'group_group_map READ',
'keyworddefs READ', 'fielddefs READ'); 'keyworddefs READ', 'fielddefs READ');
SendSQL($sql); SendSQL($sql);
......
...@@ -620,8 +620,6 @@ if ($action eq Param('move-button-text')) { ...@@ -620,8 +620,6 @@ if ($action eq Param('move-button-text')) {
$comment .= "If all went well, please mark this bug verified, and paste\n"; $comment .= "If all went well, please mark this bug verified, and paste\n";
$comment .= "in a link to the new bug. Otherwise, reopen this bug.\n"; $comment .= "in a link to the new bug. Otherwise, reopen this bug.\n";
# $user->derive_groups() has already been called by Bugzilla->login(),
# so the related tables do not need to be locked.
$dbh->bz_lock_tables('bugs WRITE', 'bugs_activity WRITE', 'duplicates WRITE', $dbh->bz_lock_tables('bugs WRITE', 'bugs_activity WRITE', 'duplicates WRITE',
'longdescs WRITE', 'profiles READ', 'groups READ', 'longdescs WRITE', 'profiles READ', 'groups READ',
'bug_group_map READ', 'group_group_map READ', 'bug_group_map READ', 'group_group_map READ',
...@@ -1266,16 +1264,11 @@ foreach my $id (@idlist) { ...@@ -1266,16 +1264,11 @@ foreach my $id (@idlist) {
# whether we do LOW_PRIORITY ... # whether we do LOW_PRIORITY ...
$dbh->bz_lock_tables("bugs $write", "bugs_activity $write", $dbh->bz_lock_tables("bugs $write", "bugs_activity $write",
"cc $write", "cc AS selectVisible_cc $write", "cc $write", "cc AS selectVisible_cc $write",
"profiles $write", "dependencies $write", "votes $write", "profiles READ", "dependencies $write", "votes $write",
"products READ", "components READ", "products READ", "components READ",
"keywords $write", "longdescs $write", "fielddefs $write", "keywords $write", "longdescs $write", "fielddefs $write",
"bug_group_map $write", "flags $write", "duplicates $write", "bug_group_map $write", "flags $write", "duplicates $write",
# user_group_map would be a READ lock except that Flag::process "user_group_map READ", "group_group_map READ", "flagtypes READ",
# may call Flag::notify, which creates a new user object,
# which might call derive_groups, which wants a WRITE lock on that
# table. group_group_map is in here at all because derive_groups
# needs it.
"user_group_map $write", "group_group_map READ", "flagtypes READ",
"flaginclusions AS i READ", "flagexclusions AS e READ", "flaginclusions AS i READ", "flagexclusions AS e READ",
"keyworddefs READ", "groups READ", "attachments READ", "keyworddefs READ", "groups READ", "attachments READ",
"group_control_map AS oldcontrolmap READ", "group_control_map AS oldcontrolmap READ",
......
...@@ -134,6 +134,7 @@ sub show_user { ...@@ -134,6 +134,7 @@ sub show_user {
$dbh->bz_lock_tables('bugs READ', 'products READ', 'votes WRITE', $dbh->bz_lock_tables('bugs READ', 'products READ', 'votes WRITE',
'cc READ', 'bug_group_map READ', 'user_group_map READ', 'cc READ', 'bug_group_map READ', 'user_group_map READ',
'group_group_map READ',
'cc AS selectVisible_cc READ', 'groups READ'); 'cc AS selectVisible_cc READ', 'groups READ');
if ($canedit && $bug_id) { if ($canedit && $bug_id) {
......
...@@ -228,10 +228,10 @@ sub get_next_event { ...@@ -228,10 +228,10 @@ sub get_next_event {
$dbh->bz_lock_tables('whine_schedules WRITE', $dbh->bz_lock_tables('whine_schedules WRITE',
'whine_events READ', 'whine_events READ',
'profiles WRITE', 'profiles READ',
'groups READ', 'groups READ',
'group_group_map READ', 'group_group_map READ',
'user_group_map WRITE'); 'user_group_map READ');
# Get the event ID for the first pending schedule # Get the event ID for the first pending schedule
$sth_next_scheduled_event->execute; $sth_next_scheduled_event->execute;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment