From: Dylan William Hardison Date: Tue, 22 Jan 2019 22:43:59 +0000 (-0500) Subject: Bug 1512815 - Store the list of all tracking flags in memcached. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b716792347c7a9ef0c07123ad8208d72d5de3af5;p=thirdparty%2Fbugzilla.git Bug 1512815 - Store the list of all tracking flags in memcached. --- diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index df2e78718..1dd5b72fb 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -736,8 +736,7 @@ sub data { # BMO - to avoid massive amounts of joins, if we're selecting a lot of # tracking flags, replace them with placeholders. the values will be # retrieved later and injected into the result. - my %tf_map - = map { $_ => 1 } Bugzilla::Extension::TrackingFlags::Flag->get_all_names(); + my %tf_map = map { $_ => 1 } Bugzilla->tracking_flag_names; my @tf_selected = grep { exists $tf_map{$_} } @orig_fields; # mysql has a limit of 61 joins, and we want to avoid massive amounts of joins diff --git a/extensions/TrackingFlags/Extension.pm b/extensions/TrackingFlags/Extension.pm index fea0240c8..5879a5e55 100644 --- a/extensions/TrackingFlags/Extension.pm +++ b/extensions/TrackingFlags/Extension.pm @@ -43,7 +43,19 @@ sub _tracking_flags { } sub _tracking_flag_names { - return Bugzilla::Extension::TrackingFlags::Flag->get_all_names(); + my ($class) = @_; + my $memcached = $class->memcached; + my $cache = $class->request_cache; + my $tf_names = $cache->{tracking_flags_names}; + + return @$tf_names if $tf_names; + $tf_names //= $memcached->get_config({key => 'tracking_flag_names'}); + $tf_names //= Bugzilla->dbh->selectcol_arrayref( + "SELECT name FROM tracking_flags ORDER BY name"); + + $cache->{tracking_flags_names} = $tf_names; + + return @$tf_names; } sub page_before_template { diff --git a/extensions/TrackingFlags/lib/Flag.pm b/extensions/TrackingFlags/lib/Flag.pm index 903b0534c..b9ea41ebe 100644 --- a/extensions/TrackingFlags/lib/Flag.pm +++ b/extensions/TrackingFlags/lib/Flag.pm @@ -234,17 +234,6 @@ sub get_all { values %{$cache->{'tracking_flags'}}; } -# avoids the overhead of pre-loading if just the field names are required -sub get_all_names { - my $self = shift; - my $cache = Bugzilla->request_cache; - if (!exists $cache->{'tracking_flags_names'}) { - $cache->{'tracking_flags_names'} = Bugzilla->dbh->selectcol_arrayref( - "SELECT name FROM tracking_flags ORDER BY name"); - } - return @{$cache->{'tracking_flags_names'}}; -} - sub remove_from_db { my $self = shift; my $dbh = Bugzilla->dbh;