Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-12-28 00:09:38 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-12-28 00:09:38 +0300
commit49c0e687c1cebabb117519a6a34ffc02a39261b0 (patch)
treefc4446dae3a53e67fc99a969fa00086bd93ba0a8 /app
parent84f003a4cbf0d57afdaae8cc4f28af549b34ff33 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/controllers/concerns/membership_actions.rb2
-rw-r--r--app/graphql/types/ci/runner_countable_connection_type.rb10
-rw-r--r--app/graphql/types/ci/runner_type.rb2
-rw-r--r--app/policies/resource_event_policy.rb5
-rw-r--r--app/policies/resource_label_event_policy.rb4
-rw-r--r--app/policies/resource_milestone_event_policy.rb14
-rw-r--r--app/policies/resource_state_event_policy.rb10
-rw-r--r--app/services/members/update_service.rb59
-rw-r--r--app/services/repositories/housekeeping_service.rb20
-rw-r--r--app/views/admin/application_settings/_repository_check.html.haml30
-rw-r--r--app/workers/concerns/git_garbage_collect_methods.rb42
-rw-r--r--app/workers/projects/git_garbage_collect_worker.rb6
-rw-r--r--app/workers/wikis/git_garbage_collect_worker.rb6
13 files changed, 77 insertions, 133 deletions
diff --git a/app/controllers/concerns/membership_actions.rb b/app/controllers/concerns/membership_actions.rb
index 28d0af7a118..a8af5cf7c6b 100644
--- a/app/controllers/concerns/membership_actions.rb
+++ b/app/controllers/concerns/membership_actions.rb
@@ -11,7 +11,7 @@ module MembershipActions
.new(current_user, update_params)
.execute(member)
- member = result[:member]
+ member = result[:members].first
member_data = if member.expires?
{
diff --git a/app/graphql/types/ci/runner_countable_connection_type.rb b/app/graphql/types/ci/runner_countable_connection_type.rb
new file mode 100644
index 00000000000..0fb18f1a54e
--- /dev/null
+++ b/app/graphql/types/ci/runner_countable_connection_type.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+module Types
+ module Ci
+ # rubocop: disable Graphql/AuthorizeTypes
+ class RunnerCountableConnectionType < ::Types::CountableConnectionType
+ end
+ # rubocop: enable Graphql/AuthorizeTypes
+ end
+end
diff --git a/app/graphql/types/ci/runner_type.rb b/app/graphql/types/ci/runner_type.rb
index 53595668649..35339624e37 100644
--- a/app/graphql/types/ci/runner_type.rb
+++ b/app/graphql/types/ci/runner_type.rb
@@ -6,7 +6,7 @@ module Types
graphql_name 'CiRunner'
edge_type_class(RunnerWebUrlEdge)
- connection_type_class(Types::CountableConnectionType)
+ connection_type_class(RunnerCountableConnectionType)
authorize :read_runner
present_using ::Ci::RunnerPresenter
diff --git a/app/policies/resource_event_policy.rb b/app/policies/resource_event_policy.rb
new file mode 100644
index 00000000000..d8142212927
--- /dev/null
+++ b/app/policies/resource_event_policy.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class ResourceEventPolicy < BasePolicy
+ condition(:can_read_issuable) { can?(:"read_#{@subject.issuable.to_ability_name}", @subject.issuable) }
+end
diff --git a/app/policies/resource_label_event_policy.rb b/app/policies/resource_label_event_policy.rb
index de4748d9890..d9c2eed72e7 100644
--- a/app/policies/resource_label_event_policy.rb
+++ b/app/policies/resource_label_event_policy.rb
@@ -1,8 +1,7 @@
# frozen_string_literal: true
-class ResourceLabelEventPolicy < BasePolicy
+class ResourceLabelEventPolicy < ResourceEventPolicy
condition(:can_read_label) { @subject.label_id.nil? || can?(:read_label, @subject.label) }
- condition(:can_read_issuable) { can?(:"read_#{@subject.issuable.to_ability_name}", @subject.issuable) }
rule { can_read_label }.policy do
enable :read_label
@@ -10,5 +9,6 @@ class ResourceLabelEventPolicy < BasePolicy
rule { can_read_label & can_read_issuable }.policy do
enable :read_resource_label_event
+ enable :read_note
end
end
diff --git a/app/policies/resource_milestone_event_policy.rb b/app/policies/resource_milestone_event_policy.rb
new file mode 100644
index 00000000000..10a1f86fb85
--- /dev/null
+++ b/app/policies/resource_milestone_event_policy.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class ResourceMilestoneEventPolicy < ResourceEventPolicy
+ condition(:can_read_milestone) { @subject.milestone_id.nil? || can?(:read_milestone, @subject.milestone) }
+
+ rule { can_read_milestone }.policy do
+ enable :read_milestone
+ end
+
+ rule { can_read_milestone & can_read_issuable }.policy do
+ enable :read_resource_milestone_event
+ enable :read_note
+ end
+end
diff --git a/app/policies/resource_state_event_policy.rb b/app/policies/resource_state_event_policy.rb
new file mode 100644
index 00000000000..34df2e96eb8
--- /dev/null
+++ b/app/policies/resource_state_event_policy.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class ResourceStateEventPolicy < ResourceEventPolicy
+ condition(:can_read_issuable) { can?(:"read_#{@subject.issuable.to_ability_name}", @subject.issuable) }
+
+ rule { can_read_issuable }.policy do
+ enable :read_resource_state_event
+ enable :read_note
+ end
+end
diff --git a/app/services/members/update_service.rb b/app/services/members/update_service.rb
index 0e6b02f7a80..b2c0fffc12d 100644
--- a/app/services/members/update_service.rb
+++ b/app/services/members/update_service.rb
@@ -11,10 +11,9 @@ module Members
[member.id, { human_access: member.human_access, expires_at: member.expires_at }]
end
- if Feature.enabled?(:bulk_update_membership_roles, current_user)
- multiple_members_update(members, permission, old_access_level_expiry_map)
- else
- single_member_update(members.first, permission, old_access_level_expiry_map)
+ updated_members = update_members(members, permission)
+ Member.transaction do
+ updated_members.each { |member| post_update(member, permission, old_access_level_expiry_map) }
end
prepare_response(members)
@@ -22,35 +21,22 @@ module Members
private
- def single_member_update(member, permission, old_access_level_expiry_map)
+ def update_members(members, permission)
+ # `filter_map` avoids the `post_update` call for the member that resulted in no change
+ Member.transaction do
+ members.filter_map { |member| update_member(member, permission) }
+ end
+ rescue ActiveRecord::RecordInvalid
+ []
+ end
+
+ def update_member(member, permission)
raise Gitlab::Access::AccessDeniedError unless has_update_permissions?(member, permission)
member.attributes = params
- return success(member: member) unless member.changed?
-
- post_update(member, permission, old_access_level_expiry_map) if member.save
- end
-
- def multiple_members_update(members, permission, old_access_level_expiry_map)
- begin
- updated_members =
- Member.transaction do
- # Using `next` with `filter_map` avoids the `post_update` call for the member that resulted in no change
- members.filter_map do |member|
- raise Gitlab::Access::AccessDeniedError unless has_update_permissions?(member, permission)
-
- member.attributes = params
- next unless member.changed?
-
- member.save!
- member
- end
- end
- rescue ActiveRecord::RecordInvalid
- return
- end
+ return unless member.changed?
- updated_members.each { |member| post_update(member, permission, old_access_level_expiry_map) }
+ member.tap(&:save!)
end
def post_update(member, permission, old_access_level_expiry_map)
@@ -62,18 +48,13 @@ module Members
end
def prepare_response(members)
- errored_member = members.detect { |member| member.errors.any? }
- if errored_member.present?
- return error(errored_member.errors.full_messages.to_sentence, pass_back: { member: errored_member })
+ errored_members = members.select { |member| member.errors.any? }
+ if errored_members.present?
+ error_message = errored_members.flat_map { |member| member.errors.full_messages }.uniq.to_sentence
+ return error(error_message, pass_back: { members: errored_members })
end
- # TODO: Remove the :member key when removing the bulk_update_membership_roles FF and update where it's used.
- # https://gitlab.com/gitlab-org/gitlab/-/issues/373257
- if members.one?
- success(member: members.first)
- else
- success(members: members)
- end
+ success(members: members)
end
def has_update_permissions?(member, permission)
diff --git a/app/services/repositories/housekeeping_service.rb b/app/services/repositories/housekeeping_service.rb
index e12d69807f2..f314e210442 100644
--- a/app/services/repositories/housekeeping_service.rb
+++ b/app/services/repositories/housekeeping_service.rb
@@ -10,7 +10,7 @@ module Repositories
class HousekeepingService < BaseService
# Timeout set to 24h
LEASE_TIMEOUT = 86400
- PACK_REFS_PERIOD = 6
+ GC_PERIOD = 200
class LeaseTaken < StandardError
def to_s
@@ -74,21 +74,13 @@ module Repositories
if pushes_since_gc % gc_period == 0
:gc
- elsif pushes_since_gc % full_repack_period == 0
- :full_repack
- elsif pushes_since_gc % repack_period == 0
- :incremental_repack
else
- :pack_refs
+ :incremental_repack
end
end
def period_match?
- if Feature.enabled?(:optimized_housekeeping)
- pushes_since_gc % repack_period == 0
- else
- [gc_period, full_repack_period, repack_period, PACK_REFS_PERIOD].any? { |period| pushes_since_gc % period == 0 }
- end
+ [gc_period, repack_period].any? { |period| pushes_since_gc % period == 0 }
end
def housekeeping_enabled?
@@ -96,11 +88,7 @@ module Repositories
end
def gc_period
- Gitlab::CurrentSettings.housekeeping_gc_period
- end
-
- def full_repack_period
- Gitlab::CurrentSettings.housekeeping_full_repack_period
+ GC_PERIOD
end
def repack_period
diff --git a/app/views/admin/application_settings/_repository_check.html.haml b/app/views/admin/application_settings/_repository_check.html.haml
index 332d3a94b92..477ac5ca0d6 100644
--- a/app/views/admin/application_settings/_repository_check.html.haml
+++ b/app/views/admin/application_settings/_repository_check.html.haml
@@ -19,33 +19,15 @@
%h4= _("Housekeeping")
.form-group
- help_text = _("Run housekeeping tasks to automatically optimize Git repositories. Disabling this option will cause performance to degenerate over time.")
- - help_link = link_to _('Learn more.'), help_page_path('administration/housekeeping.md', anchor: 'configure-push-based-maintenance'), target: '_blank', rel: 'noopener noreferrer'
+ - help_link = link_to _('Learn more.'), help_page_path('administration/housekeeping.md', anchor: 'heuristical-housekeeping'), target: '_blank', rel: 'noopener noreferrer'
= f.gitlab_ui_checkbox_component :housekeeping_enabled,
_("Enable automatic repository housekeeping"),
help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link }
- - if Feature.enabled?(:optimized_housekeeping)
- .form-group
- = f.label :housekeeping_incremental_repack_period, _('Optimize repository period'), class: 'label-bold'
- = f.number_field :housekeeping_incremental_repack_period, class: 'form-control gl-form-input'
- .form-text.text-muted
- = _('Number of Git pushes after which Gitaly is asked to optimize a repository.')
- - else
- .form-group
- = f.label :housekeeping_incremental_repack_period, 'Incremental repack period', class: 'label-bold'
- = f.number_field :housekeeping_incremental_repack_period, class: 'form-control gl-form-input'
- .form-text.text-muted
- = html_escape(s_('Number of Git pushes after which an incremental %{code_start}git repack%{code_end} is run.')) % { code_start: '<code>'.html_safe, code_end: '</code>'.html_safe }
- .form-group
- = f.label :housekeeping_full_repack_period, 'Full repack period', class: 'label-bold'
- = f.number_field :housekeeping_full_repack_period, class: 'form-control gl-form-input'
- .form-text.text-muted
- = html_escape(s_('Number of Git pushes after which a full %{code_start}git repack%{code_end} is run.')) % { code_start: '<code>'.html_safe, code_end: '</code>'.html_safe }
- .form-group
- = f.label :housekeeping_gc_period, _('Git GC period'), class: 'label-bold'
- = f.number_field :housekeeping_gc_period, class: 'form-control gl-form-input'
- .form-text.text-muted
- = html_escape(s_('Number of Git pushes after which %{code_start}git gc%{code_end} is run.')) % { code_start: '<code>'.html_safe, code_end: '</code>'.html_safe }
-
+ .form-group
+ = f.label :housekeeping_incremental_repack_period, _('Optimize repository period'), class: 'label-bold'
+ = f.number_field :housekeeping_incremental_repack_period, class: 'form-control gl-form-input'
+ .form-text.text-muted
+ = _('Number of Git pushes after which Gitaly is asked to optimize a repository.')
.sub-section
%h4= s_("AdminSettings|Inactive project deletion")
.js-inactive-project-deletion-form{ data: inactive_projects_deletion_data(@application_setting) }
diff --git a/app/workers/concerns/git_garbage_collect_methods.rb b/app/workers/concerns/git_garbage_collect_methods.rb
index 5c0493c9be5..c5f8c9c8464 100644
--- a/app/workers/concerns/git_garbage_collect_methods.rb
+++ b/app/workers/concerns/git_garbage_collect_methods.rb
@@ -82,28 +82,12 @@ module GitGarbageCollectMethods
def gitaly_call(task, resource)
repository = resource.repository.raw_repository
+ client = repository.gitaly_repository_client
- if Feature.enabled?(:optimized_housekeeping, container(resource))
- client = repository.gitaly_repository_client
-
- if task == :prune
- client.prune_unreachable_objects
- else
- client.optimize_repository
- end
+ if task == :prune
+ client.prune_unreachable_objects
else
- client = get_gitaly_client(task, repository)
-
- case task
- when :prune, :gc
- client.garbage_collect(bitmaps_enabled?, prune: task == :prune)
- when :full_repack
- client.repack_full(bitmaps_enabled?)
- when :incremental_repack
- client.repack_incremental
- when :pack_refs
- client.pack_refs
- end
+ client.optimize_repository
end
rescue GRPC::NotFound => e
Gitlab::GitLogger.error("#{__method__} failed:\nRepository not found")
@@ -113,22 +97,6 @@ module GitGarbageCollectMethods
raise Gitlab::Git::CommandError, e
end
- def get_gitaly_client(task, repository)
- if task == :pack_refs
- Gitlab::GitalyClient::RefService
- else
- Gitlab::GitalyClient::RepositoryService
- end.new(repository)
- end
-
- # The option to enable/disable bitmaps has been removed in https://gitlab.com/gitlab-org/gitlab/-/issues/353777
- # Now the options is always enabled
- # This method and all the deprecated RPCs are going to be removed in
- # https://gitlab.com/gitlab-org/gitlab/-/issues/353779
- def bitmaps_enabled?
- true
- end
-
def flush_ref_caches(resource)
resource.repository.expire_branches_cache
resource.repository.branch_names
@@ -136,8 +104,6 @@ module GitGarbageCollectMethods
end
def update_repository_statistics(resource, task)
- return if task == :pack_refs
-
resource.repository.expire_statistics_caches
return if Gitlab::Database.read_only? # GitGarbageCollectWorker may be run on a Geo secondary
diff --git a/app/workers/projects/git_garbage_collect_worker.rb b/app/workers/projects/git_garbage_collect_worker.rb
index 9ac3953e83c..8c0100dd05b 100644
--- a/app/workers/projects/git_garbage_collect_worker.rb
+++ b/app/workers/projects/git_garbage_collect_worker.rb
@@ -7,12 +7,6 @@ module Projects
private
- # Used for getting a project/group out of the resource in order to scope a feature flag
- # Can be removed within https://gitlab.com/gitlab-org/gitlab/-/issues/353607
- def container(resource)
- resource
- end
-
override :find_resource
def find_resource(id)
Project.find(id)
diff --git a/app/workers/wikis/git_garbage_collect_worker.rb b/app/workers/wikis/git_garbage_collect_worker.rb
index 977493834c9..ab702653989 100644
--- a/app/workers/wikis/git_garbage_collect_worker.rb
+++ b/app/workers/wikis/git_garbage_collect_worker.rb
@@ -7,12 +7,6 @@ module Wikis
private
- # Used for getting a project/group out of the resource in order to scope a feature flag
- # Can be removed within https://gitlab.com/gitlab-org/gitlab/-/issues/353607
- def container(resource)
- resource.container
- end
-
override :find_resource
def find_resource(id)
Project.find(id).wiki