More rh-bug related stuff:
Peter Rabbitson [Tue, 10 Feb 2009 11:19:20 +0000 (11:19 +0000)]
- Improve message emmitted when confronted with a buggy system
- Port forgotten pieces from trunk to stopgap

lib/DBIx/Class/Manual/Intro.pod
lib/DBIx/Class/Manual/Troubleshooting.pod
t/99rh_perl_perf_bug.t

index 974efe5..1e74f9f 100644 (file)
@@ -377,11 +377,9 @@ L<DBIx::Class::ResultSet/ATTRIBUTES>.
 
 =head2 Problems on RHEL5/CentOS5
 
-There is a problem with slow performance of certain DBIx::Class operations in
-perl-5.8.8-10 and later on RedHat and related systems, due to a bad backport of
-a "use overload" related bug.  The problem is in the Perl binary itself, not in
-DBIx::Class.  If your system has this problem, you will see a warning on
-startup, with some options as to what to do about it.
+There used to be an issue with the system perl on Red Hat Enterprise
+Linux 5, some versions of Fedora and derived systems. Further
+information on this can be found in L<DBIx::Class::Manual::Troubleshooting>
 
 =head1 SEE ALSO
 
index eaa35fe..d559fc6 100644 (file)
@@ -55,5 +55,38 @@ declaration is correct, so for a schema C< MySchema > you need to
 specify a fully qualified namespace: C< package MySchema::MyTable; >
 for example.
 
+=head2 Perl Performance Issues on Red Hat Systems
+
+There is a problem with slow performance of certain DBIx::Class
+operations using the system perl on some Fedora and Red Hat Enterprise
+Linux system (as well as their derivative distributions such as Centos,
+White Box and Scientific Linux).
+
+Distributions affected include Fedora 5 through to Fedora 8 and RHEL5
+upto and including RHEL5 Update 2. Fedora 9 (which uses perl 5.10) has
+never been affected - this is purely a perl 5.8.8 issue.
+
+As of September 2008 the following packages are known to be fixed and so
+free of this performance issue (this means all Fedora and RHEL5 systems
+with full current updates will not be subject to this problem):-
+
+  Fedora 8     - perl-5.8.8-41.fc8
+  RHEL5        - perl-5.8.8-15.el5_2.1
+
+The issue is due to perl doing an exhaustive search of blessed objects
+under certain circumstances.  The problem shows up as performance
+degredation exponential to the number of L<DBIx::Class> row objects in
+memory, so can be unoticeable with certain data sets, but with huge
+performance impacts on other datasets.
+
+A pair of tests for susceptability to the issue, and performance effects
+of the bless/overload problem can be found in the L<DBIx::Class> test
+suite in the file C<t/99rh_perl_perf_bug.t>
+
+Further information on this issue can be found in
+L<https://bugzilla.redhat.com/show_bug.cgi?id=379791>,
+L<https://bugzilla.redhat.com/show_bug.cgi?id=460308> and
+L<http://rhn.redhat.com/errata/RHBA-2008-0876.html>
+
 =cut
 
index 4b275fb..8bed2d7 100644 (file)
@@ -61,11 +61,15 @@ my $ratio = $results->{no_bless}->iters / $results->{bless_overload}->iters;
 
 ok( ( $ratio < 2 ), 'Overload/bless performance acceptable' )
   || diag(
+    "\n",
     "This perl has a substantial slow down when handling large numbers\n",
     "of blessed/overloaded objects.  This can severely adversely affect\n",
     "the performance of DBIx::Class programs.  Please read the section\n",
     "in the Troubleshooting POD documentation entitled\n",
     "'Perl Performance Issues on Red Hat Systems'\n",
+    "As this is an extremely serious condition, the only way to skip\n",
+    "over this test is to --force the installation, or to edit the test\n",
+    "file " . __FILE__ . "\n",
   );
 
 # We will only check for the difference in bless handling (whether the
@@ -106,8 +110,12 @@ SKIP: {
     ok( !_possibly_has_bad_overload_performance(),
         'Checking whether bless applies to reference not object' )
       || diag(
+        "\n",
         "This perl is probably derived from a buggy Red Hat perl build\n",
         "Please read the section in the Troubleshooting POD documentation\n",
         "entitled 'Perl Performance Issues on Red Hat Systems'\n",
+        "As this is an extremely serious condition, the only way to skip\n",
+        "over this test is to --force the installation, or to edit the test\n",
+        "file " . __FILE__ . "\n",
       );
 }