From 06ec004b813716e92b69477e9933a560e97be4e7 Mon Sep 17 00:00:00 2001 From: "bugreport%peshkin.net" Date: Tue, 30 Aug 2005 16:04:39 +0000 Subject: [PATCH] Bug 305126: Fix table locks after removal of derive_groups Patch by Joel Peshkin r=lpsolit, a=myk --- webtools/bugzilla/attachment.cgi | 10 ++++------ webtools/bugzilla/post_bug.cgi | 3 ++- webtools/bugzilla/process_bug.cgi | 11 ++--------- webtools/bugzilla/votes.cgi | 1 + webtools/bugzilla/whine.pl | 4 ++-- 5 files changed, 11 insertions(+), 18 deletions(-) diff --git a/webtools/bugzilla/attachment.cgi b/webtools/bugzilla/attachment.cgi index 86cd1698d32a..c406516a3a36 100755 --- a/webtools/bugzilla/attachment.cgi +++ b/webtools/bugzilla/attachment.cgi @@ -1190,12 +1190,10 @@ sub update # cc, bug_group_map, user_group_map, and groups are in here so we # can check the permissions of flag requestees and email addresses # on the flag type cc: lists via the CanSeeBug - # function call in Flag::notify. group_group_map is in here in case - # Bugzilla::User needs to rederive groups. profiles and - # user_group_map would be READ locks instead of WRITE locks if it - # weren't for derive_groups, which needs to write to those tables. - 'bugs WRITE', 'profiles WRITE', 'email_setting READ', - 'cc READ', 'bug_group_map READ', 'user_group_map WRITE', + # function call in Flag::notify. group_group_map is in here si + # Bugzilla::User can flatten groups. + 'bugs WRITE', 'profiles READ', 'email_setting READ', + 'cc READ', 'bug_group_map READ', 'user_group_map READ', 'group_group_map READ', 'groups READ'); # Get a copy of the attachment record before we make changes diff --git a/webtools/bugzilla/post_bug.cgi b/webtools/bugzilla/post_bug.cgi index 77f076139504..f32ef9b1475a 100755 --- a/webtools/bugzilla/post_bug.cgi +++ b/webtools/bugzilla/post_bug.cgi @@ -370,7 +370,8 @@ while (MoreSQLData()) { # Add the bug report to the DB. $dbh->bz_lock_tables('bugs WRITE', 'bug_group_map WRITE', 'longdescs 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'); SendSQL($sql); diff --git a/webtools/bugzilla/process_bug.cgi b/webtools/bugzilla/process_bug.cgi index b60f5aa6061d..8f325dd61149 100755 --- a/webtools/bugzilla/process_bug.cgi +++ b/webtools/bugzilla/process_bug.cgi @@ -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 .= "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', 'longdescs WRITE', 'profiles READ', 'groups READ', 'bug_group_map READ', 'group_group_map READ', @@ -1266,16 +1264,11 @@ foreach my $id (@idlist) { # whether we do LOW_PRIORITY ... $dbh->bz_lock_tables("bugs $write", "bugs_activity $write", "cc $write", "cc AS selectVisible_cc $write", - "profiles $write", "dependencies $write", "votes $write", + "profiles READ", "dependencies $write", "votes $write", "products READ", "components READ", "keywords $write", "longdescs $write", "fielddefs $write", "bug_group_map $write", "flags $write", "duplicates $write", - # user_group_map would be a READ lock except that Flag::process - # 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", + "user_group_map READ", "group_group_map READ", "flagtypes READ", "flaginclusions AS i READ", "flagexclusions AS e READ", "keyworddefs READ", "groups READ", "attachments READ", "group_control_map AS oldcontrolmap READ", diff --git a/webtools/bugzilla/votes.cgi b/webtools/bugzilla/votes.cgi index 13f1ec7e265f..b4401a373680 100755 --- a/webtools/bugzilla/votes.cgi +++ b/webtools/bugzilla/votes.cgi @@ -134,6 +134,7 @@ sub show_user { $dbh->bz_lock_tables('bugs READ', 'products READ', 'votes WRITE', 'cc READ', 'bug_group_map READ', 'user_group_map READ', + 'group_group_map READ', 'cc AS selectVisible_cc READ', 'groups READ'); if ($canedit && $bug_id) { diff --git a/webtools/bugzilla/whine.pl b/webtools/bugzilla/whine.pl index c4a4547759f9..068774ca0fa1 100755 --- a/webtools/bugzilla/whine.pl +++ b/webtools/bugzilla/whine.pl @@ -228,10 +228,10 @@ sub get_next_event { $dbh->bz_lock_tables('whine_schedules WRITE', 'whine_events READ', - 'profiles WRITE', + 'profiles READ', 'groups READ', 'group_group_map READ', - 'user_group_map WRITE'); + 'user_group_map READ'); # Get the event ID for the first pending schedule $sth_next_scheduled_event->execute;