Skip to content
Snippets Groups Projects
Commit 25c73e5d authored by Stan Hu's avatar Stan Hu
Browse files

Merge branch 'sh-ci-builds-pagination-limit-ff' into 'master'

Add enforce_ci_builds_pagination_limit feature flag

See merge request gitlab-org/gitlab!135162



Merged-by: default avatarStan Hu <stanhu@gmail.com>
parents a39c0135 e9e7c2bf
No related branches found
No related tags found
No related merge requests found
---
name: enforce_ci_builds_pagination_limit
introduced_by_url:
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/429453
milestone: '16.6'
type: ops
group: group::pipeline execution
default_enabled: false
......@@ -57,7 +57,7 @@ class Jobs < ::API::Base
builds = filter_builds(builds, params[:scope])
builds = builds.preload(:user, :job_artifacts_archive, :job_artifacts, :runner, :tags, pipeline: :project)
present paginate_with_strategies(builds, paginator_params: { without_count: true }), with: Entities::Ci::Job
present paginate_with_strategies(builds, user_project, paginator_params: { without_count: true }), with: Entities::Ci::Job
end
# rubocop: enable CodeReuse/ActiveRecord
......
......@@ -50,7 +50,7 @@ def offset_paginator(relation, request_scope)
offset_limit = limit_for_scope(request_scope)
if (Gitlab::Pagination::Keyset.available_for_type?(relation) ||
cursor_based_keyset_pagination_supported?(relation)) &&
cursor_based_keyset_pagination_enforced?(relation) &&
cursor_based_keyset_pagination_enforced?(request_scope, relation) &&
offset_limit_exceeded?(offset_limit)
return error!("Offset pagination has a maximum allowed offset of #{offset_limit} " \
......@@ -65,8 +65,8 @@ def cursor_based_keyset_pagination_supported?(relation)
Gitlab::Pagination::CursorBasedKeyset.available_for_type?(relation)
end
def cursor_based_keyset_pagination_enforced?(relation)
Gitlab::Pagination::CursorBasedKeyset.enforced_for_type?(relation)
def cursor_based_keyset_pagination_enforced?(request_scope, relation)
Gitlab::Pagination::CursorBasedKeyset.enforced_for_type?(request_scope, relation)
end
def keyset_pagination_enabled?
......
......@@ -34,8 +34,14 @@ def self.available?(cursor_based_request_context, relation)
order_satisfied?(relation, cursor_based_request_context)
end
def self.enforced_for_type?(relation)
ENFORCED_TYPES.include?(relation.klass)
def self.enforced_for_type?(request_scope, relation)
enforced = ENFORCED_TYPES
if ::Feature.enabled?(:enforce_ci_builds_pagination_limit, request_scope, type: :ops)
enforced += [::Ci::Build]
end
enforced.include?(relation.klass)
end
def self.order_satisfied?(relation, cursor_based_request_context)
......
......@@ -28,7 +28,9 @@
end
describe '.enforced_for_type?' do
subject { described_class.enforced_for_type?(relation) }
let_it_be(:project) { create(:project) }
subject { described_class.enforced_for_type?(project, relation) }
context 'when relation is Group' do
let(:relation) { Group.all }
......@@ -45,9 +47,23 @@
context 'when relation is Ci::Build' do
let(:relation) { Ci::Build.all }
before do
stub_feature_flags(enforce_ci_builds_pagination_limit: false)
end
context 'when feature flag enforce_ci_builds_pagination_limit is enabled' do
before do
stub_feature_flags(enforce_ci_builds_pagination_limit: project)
end
it { is_expected.to be true }
end
context 'when feature fllag enforce_ci_builds_pagination_limit is disabled' do
it { is_expected.to be false }
end
end
end
describe '.available?' do
let(:request_context) { double('request_context', params: { order_by: order_by, sort: sort }) }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment