From a28edf3c2423e748f0919ea7a803324c5b269e40 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Mon, 2 Mar 2009 01:21:54 +0000 Subject: Bug 480001: MySQL 5.1.31 throws an error when you try to SET SESSION max_allowed_packet (and previous versions of MySQL were just ignoring the SET SESSION), so just warn people if their max_allowed_packet is too small Patch By Max Kanat-Alexander r=LpSolit, a=LpSolit --- Bugzilla/DB/Mysql.pm | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) (limited to 'Bugzilla/DB') diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm index f85bd31f1..f06900f1b 100644 --- a/Bugzilla/DB/Mysql.pm +++ b/Bugzilla/DB/Mysql.pm @@ -44,6 +44,7 @@ package Bugzilla::DB::Mysql; use strict; use Bugzilla::Constants; +use Bugzilla::Install::Util qw(install_string); use Bugzilla::Util; use Bugzilla::Error; use Bugzilla::DB::Schema::Mysql; @@ -101,20 +102,9 @@ sub new { } } - # The "comments" field of the bugs_fulltext table could easily exceed - # MySQL's default max_allowed_packet. Also, MySQL should never have - # a max_allowed_packet smaller than our max_attachment_size. However, - # if we've already set a max_allowed_packet in MySQL bigger than all - # of those, we should keep it. - my (undef, $current_max_allowed) = $self->selectrow_array( - q{SHOW VARIABLES LIKE 'max\_allowed\_packet'}); - my $min_max_allowed_packet = MAX_COMMENTS * MAX_COMMENT_LENGTH; - my $max_allowed_packet = max($min_max_allowed_packet, - $current_max_allowed, - # This parameter is not yet defined when the DB - # is being built for the very first time. - Bugzilla->params->{'maxattachmentsize'} || 0); - $self->do("SET SESSION max_allowed_packet = $max_allowed_packet"); + # Allow large GROUP_CONCATs (largely for inserting comments + # into bugs_fulltext). + $self->do('SET SESSION group_concat_max_len = 128000000'); return $self; } @@ -291,6 +281,24 @@ sub _bz_get_initial_schema { sub bz_setup_database { my ($self) = @_; + # The "comments" field of the bugs_fulltext table could easily exceed + # MySQL's default max_allowed_packet. Also, MySQL should never have + # a max_allowed_packet smaller than our max_attachment_size. So, we + # warn the user here if max_allowed_packet is too small. + my $min_max_allowed = MAX_COMMENTS * MAX_COMMENT_LENGTH; + my (undef, $current_max_allowed) = $self->selectrow_array( + q{SHOW VARIABLES LIKE 'max\_allowed\_packet'}); + # This parameter is not yet defined when the DB is being built for + # the very first time. The code below still works properly, however, + # because the default maxattachmentsize is smaller than $min_max_allowed. + my $max_attachment = (Bugzilla->params->{'maxattachmentsize'} || 0) * 1024; + my $needed_max_allowed = max($min_max_allowed, $max_attachment); + if ($current_max_allowed < $needed_max_allowed) { + warn install_string('max_allowed_packet', + { current => $current_max_allowed, + needed => $needed_max_allowed }) . "\n"; + } + # Make sure the installation has InnoDB turned on, or we're going to be # doing silly things like making foreign keys on MyISAM tables, which is # hard to fix later. We do this up here because none of the code below -- cgit v1.2.3-24-g4f1b