[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