Commit 94468c74 authored by Doug Stull's avatar Doug Stull

Merge branch '338603-feature-flag-removal' into 'master'

Remove the npm_presenter_queries_tuning feature flag

See merge request gitlab-org/gitlab!69058
parents a564138d 0c29fc19
...@@ -12,16 +12,10 @@ module Packages ...@@ -12,16 +12,10 @@ module Packages
end end
def execute def execute
results = base.npm base.npm
.with_name(@package_name) .with_name(@package_name)
.installable .installable
.last_of_each_version .last_of_each_version
unless Feature.enabled?(:npm_presenter_queries_tuning)
results = results.preload_files
end
results
end end
private private
......
...@@ -13,34 +13,6 @@ module Packages ...@@ -13,34 +13,6 @@ module Packages
end end
def versions def versions
if queries_tuning?
new_versions
else
legacy_versions
end
end
def dist_tags
build_package_tags.tap { |t| t["latest"] ||= sorted_versions.last }
end
private
def legacy_versions
package_versions = {}
packages.each do |package|
package_file = package.package_files.last
next unless package_file
package_versions[package.version] = build_package_version(package, package_file)
end
package_versions
end
def new_versions
package_versions = {} package_versions = {}
packages.each_batch do |relation| packages.each_batch do |relation|
...@@ -58,6 +30,12 @@ module Packages ...@@ -58,6 +30,12 @@ module Packages
package_versions package_versions
end end
def dist_tags
build_package_tags.tap { |t| t["latest"] ||= sorted_versions.last }
end
private
def build_package_tags def build_package_tags
package_tags.to_h { |tag| [tag.name, tag.package.version] } package_tags.to_h { |tag| [tag.name, tag.package.version] }
end end
...@@ -84,21 +62,10 @@ module Packages ...@@ -84,21 +62,10 @@ module Packages
def build_package_dependencies(package) def build_package_dependencies(package)
dependencies = Hash.new { |h, key| h[key] = {} } dependencies = Hash.new { |h, key| h[key] = {} }
if queries_tuning?
package.dependency_links.each do |dependency_link| package.dependency_links.each do |dependency_link|
dependency = dependency_link.dependency dependency = dependency_link.dependency
dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern
end end
else
dependency_links = package.dependency_links
.with_dependency_type(%i[dependencies devDependencies bundleDependencies peerDependencies])
.includes_dependency
dependency_links.find_each do |dependency_link|
dependency = dependency_link.dependency
dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern
end
end
dependencies dependencies
end end
...@@ -112,10 +79,6 @@ module Packages ...@@ -112,10 +79,6 @@ module Packages
Packages::Tag.for_packages(packages) Packages::Tag.for_packages(packages)
.preload_package .preload_package
end end
def queries_tuning?
Feature.enabled?(:npm_presenter_queries_tuning)
end
end end
end end
end end
---
name: npm_presenter_queries_tuning
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68275
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/338603
milestone: '14.2'
type: development
group: group::package
default_enabled: false
...@@ -68,20 +68,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do ...@@ -68,20 +68,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do
it { is_expected.to be_empty } it { is_expected.to be_empty }
end end
context 'with npm_presenter_queries_tuning disabled' do
before do
stub_feature_flags(npm_presenter_queries_tuning: false)
end
it_behaves_like 'finding packages by name'
context 'set to nil' do
let(:project) { nil }
it { is_expected.to be_empty }
end
end
end end
context 'with a namespace' do context 'with a namespace' do
...@@ -94,20 +80,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do ...@@ -94,20 +80,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do
it { is_expected.to be_empty } it { is_expected.to be_empty }
end end
context 'with npm_presenter_queries_tuning disabled' do
before do
stub_feature_flags(npm_presenter_queries_tuning: false)
end
it_behaves_like 'accepting a namespace for', 'finding packages by name'
context 'set to nil' do
let_it_be(:namespace) { nil }
it { is_expected.to be_empty }
end
end
end end
end end
...@@ -137,24 +109,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do ...@@ -137,24 +109,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do
it_behaves_like 'accepting a namespace for', 'finding packages by version' it_behaves_like 'accepting a namespace for', 'finding packages by version'
end end
context 'with npm_presenter_queries_tuning disabled' do
before do
stub_feature_flags(npm_presenter_queries_tuning: false)
end
context 'with a project' do
let(:finder) { described_class.new(package_name, project: project) }
it_behaves_like 'finding packages by version'
end
context 'with a namespace' do
let(:finder) { described_class.new(package_name, namespace: namespace) }
it_behaves_like 'accepting a namespace for', 'finding packages by version'
end
end
end end
describe '#last' do describe '#last' do
...@@ -194,13 +148,5 @@ RSpec.describe ::Packages::Npm::PackageFinder do ...@@ -194,13 +148,5 @@ RSpec.describe ::Packages::Npm::PackageFinder do
end end
it_behaves_like 'handling project or namespace parameter' it_behaves_like 'handling project or namespace parameter'
context 'with npm_presenter_queries_tuning disabled' do
before do
stub_feature_flags(npm_presenter_queries_tuning: false)
end
it_behaves_like 'handling project or namespace parameter'
end
end end
end end
...@@ -15,7 +15,6 @@ RSpec.describe ::Packages::Npm::PackagePresenter do ...@@ -15,7 +15,6 @@ RSpec.describe ::Packages::Npm::PackagePresenter do
describe '#versions' do describe '#versions' do
subject { presenter.versions } subject { presenter.versions }
shared_examples 'returning packages versions' do |expect_n_plus_one: false|
context 'for packages without dependencies' do context 'for packages without dependencies' do
it { is_expected.to be_a(Hash) } it { is_expected.to be_a(Hash) }
it { expect(subject[package1.version].with_indifferent_access).to match_schema('public_api/v4/packages/npm_package_version') } it { expect(subject[package1.version].with_indifferent_access).to match_schema('public_api/v4/packages/npm_package_version') }
...@@ -27,7 +26,7 @@ RSpec.describe ::Packages::Npm::PackagePresenter do ...@@ -27,7 +26,7 @@ RSpec.describe ::Packages::Npm::PackagePresenter do
end end
it 'avoids N+1 database queries' do it 'avoids N+1 database queries' do
check_n_plus_one(:versions, expect_it: expect_n_plus_one) do check_n_plus_one(:versions) do
create_list(:npm_package, 5, project: project, name: package_name) create_list(:npm_package, 5, project: project, name: package_name)
end end
end end
...@@ -46,7 +45,7 @@ RSpec.describe ::Packages::Npm::PackagePresenter do ...@@ -46,7 +45,7 @@ RSpec.describe ::Packages::Npm::PackagePresenter do
end end
it 'avoids N+1 database queries' do it 'avoids N+1 database queries' do
check_n_plus_one(:versions, expect_it: expect_n_plus_one) do check_n_plus_one(:versions) do
create_list(:npm_package, 5, project: project, name: package_name).each do |npm_package| create_list(:npm_package, 5, project: project, name: package_name).each do |npm_package|
::Packages::DependencyLink.dependency_types.keys.each do |dependency_type| ::Packages::DependencyLink.dependency_types.keys.each do |dependency_type|
create(:packages_dependency_link, package: npm_package, dependency_type: dependency_type) create(:packages_dependency_link, package: npm_package, dependency_type: dependency_type)
...@@ -57,21 +56,9 @@ RSpec.describe ::Packages::Npm::PackagePresenter do ...@@ -57,21 +56,9 @@ RSpec.describe ::Packages::Npm::PackagePresenter do
end end
end end
it_behaves_like 'returning packages versions'
context 'with npm_presenter_queries_tuning disabled' do
before do
stub_feature_flags(npm_presenter_queries_tuning: false)
end
it_behaves_like 'returning packages versions', expect_n_plus_one: true
end
end
describe '#dist_tags' do describe '#dist_tags' do
subject { presenter.dist_tags } subject { presenter.dist_tags }
shared_examples 'returning packages tags' do
context 'for packages without tags' do context 'for packages without tags' do
it { is_expected.to be_a(Hash) } it { is_expected.to be_a(Hash) }
it { expect(subject["latest"]).to eq(latest_package.version) } it { expect(subject["latest"]).to eq(latest_package.version) }
...@@ -107,18 +94,7 @@ RSpec.describe ::Packages::Npm::PackagePresenter do ...@@ -107,18 +94,7 @@ RSpec.describe ::Packages::Npm::PackagePresenter do
end end
end end
it_behaves_like 'returning packages tags' def check_n_plus_one(field)
context 'with npm_presenter_queries_tuning disabled' do
before do
stub_feature_flags(npm_presenter_queries_tuning: false)
end
it_behaves_like 'returning packages tags'
end
end
def check_n_plus_one(field, expect_it: false)
pkgs = project.packages.npm.with_name(package_name).last_of_each_version.preload_files pkgs = project.packages.npm.with_name(package_name).last_of_each_version.preload_files
control = ActiveRecord::QueryRecorder.new { described_class.new(package_name, pkgs).public_send(field) } control = ActiveRecord::QueryRecorder.new { described_class.new(package_name, pkgs).public_send(field) }
...@@ -126,10 +102,6 @@ RSpec.describe ::Packages::Npm::PackagePresenter do ...@@ -126,10 +102,6 @@ RSpec.describe ::Packages::Npm::PackagePresenter do
pkgs = project.packages.npm.with_name(package_name).last_of_each_version.preload_files pkgs = project.packages.npm.with_name(package_name).last_of_each_version.preload_files
if expect_it
expect { described_class.new(package_name, pkgs).public_send(field) }.to exceed_query_limit(control)
else
expect { described_class.new(package_name, pkgs).public_send(field) }.not_to exceed_query_limit(control) expect { described_class.new(package_name, pkgs).public_send(field) }.not_to exceed_query_limit(control)
end end
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment