[Rt-devel] RT 3.6.5 Bug/Patch - Group Creation

Stephen Turner sturner at MIT.EDU
Tue Apr 22 12:17:48 EDT 2008


RT 3.6.5, Oracle 9i

I discovered a bug in html/Admin/Groups/Modify.html that causes a 
performance problem. In our RT, if we go to Config -> Admin -> Groups 
-> New Group, the page takes 3s+ to display, which is slow for a blank form.

I discovered that most of the time was taken by Oracle doing this query:

SELECT  *
FROM
  Principals WHERE lower(PrincipalType) = :p1 AND (ObjectId IS NULL OR
   ObjectId = :p2)

This involves a full scan of the Principals table.

This query appeared to be inside a call to $Group->Disabled() near 
the end of the INIT section. This shouldn't be happening on a create, 
because there's no $Group object yet.

I moved around the logic that determines the 'enabled' checkbox 
setting so that the $Group object is queried only when appropriate. 
The 'enabled' checkbox will always be checked for a Create action.

Incidentally, I do wonder why the ObjectId columns on Principals is 
nullable - we don;t appear to have any rows with a null value in the 
column in our large-ish database.

Steve



 > diff -u $RT_HOME/share/html/Admin/Groups/Modify.html Modify2.html
--- /usr/local/rt3/share/html/Admin/Groups/Modify.html  Tue Apr 24 
13:21:42 2007
+++ Modify2.html        Tue Apr 22 12:07:21 2008
@@ -99,6 +99,7 @@
  if ($Create) {
      $current_tab = 'Admin/Groups/Modify.html?Create=1';
      $title = loc("Create a new group");
+    $EnabledChecked ="CHECKED";
  }

  else {
@@ -138,22 +139,23 @@
                                             ARGSRef => \%ARGS );
      push (@results, at fieldresults);
      push @results, ProcessObjectCustomFieldUpdates( ARGSRef => 
\%ARGS, Object => $Group );
-}

  #we're asking about enabled on the web page but really care about disabled.
-if ($Enabled == 1) {
-    $Disabled = 0;
-}
-else {
-    $Disabled = 1;
-}
-if  ( ($SetEnabled) and ( $Disabled != $Group->Disabled) ) {
-    my  ($code, $msg) = $Group->SetDisabled($Disabled);
-    push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
-}
+    if ($Enabled == 1) {
+       $Disabled = 0;
+    }
+    else {
+       $Disabled = 1;
+    }
+    if  ( ($SetEnabled) and ( $Disabled != $Group->Disabled) ) {
+       my  ($code, $msg) = $Group->SetDisabled($Disabled);
+       push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
+    }
+
+    unless ($Group->Disabled()) {
+       $EnabledChecked ="CHECKED";
+    }

-unless ($Group->Disabled()) {
-    $EnabledChecked ="CHECKED";
  }




Stephen Turner
Senior Programmer/Analyst - SAIS
MIT Information Services and Technology (IS&T)




More information about the Rt-devel mailing list