diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-11 12:12:30 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-11 12:12:30 +0000 |
commit | 0b54f87a31c23544ca5917bf772ce9c64a61562c (patch) | |
tree | 79d56df6750e84fd4a10205d9dcce293f7c5d491 /app/services | |
parent | e348fb4c1b9eaf21655001dc4346ceb0c0c3d5b4 (diff) | |
download | gitlab-ce-0b54f87a31c23544ca5917bf772ce9c64a61562c.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/keys/last_used_service.rb | 24 | ||||
-rw-r--r-- | app/services/members/approve_access_request_service.rb | 2 | ||||
-rw-r--r-- | app/services/members/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/members/destroy_service.rb | 2 | ||||
-rw-r--r-- | app/services/projects/open_issues_count_service.rb | 2 | ||||
-rw-r--r-- | app/services/todo_service.rb | 32 |
6 files changed, 38 insertions, 28 deletions
diff --git a/app/services/keys/last_used_service.rb b/app/services/keys/last_used_service.rb index daef544bac0..3683c03b7a4 100644 --- a/app/services/keys/last_used_service.rb +++ b/app/services/keys/last_used_service.rb @@ -2,7 +2,7 @@ module Keys class LastUsedService - TIMEOUT = 1.day.to_i + TIMEOUT = 1.day attr_reader :key @@ -12,26 +12,24 @@ module Keys end def execute + return unless update? + # We _only_ want to update last_used_at and not also updated_at (which # would be updated when using #touch). - key.update_column(:last_used_at, Time.zone.now) if update? + key.update_column(:last_used_at, Time.zone.now) end - def update? - return false if ::Gitlab::Database.read_only? - - last_used = key.last_used_at + def execute_async + return unless update? - return false if last_used && (Time.zone.now - last_used) <= TIMEOUT - - !!redis_lease.try_obtain + ::SshKeys::UpdateLastUsedAtWorker.perform_async(key.id) end - private + def update? + return false if ::Gitlab::Database.read_only? - def redis_lease - Gitlab::ExclusiveLease - .new("key_update_last_used_at:#{key.id}", timeout: TIMEOUT) + last_used = key.last_used_at + last_used.blank? || last_used <= TIMEOUT.ago end end end diff --git a/app/services/members/approve_access_request_service.rb b/app/services/members/approve_access_request_service.rb index 20f96ac2949..f8c91fbae7d 100644 --- a/app/services/members/approve_access_request_service.rb +++ b/app/services/members/approve_access_request_service.rb @@ -18,7 +18,7 @@ module Members def after_execute(member:, skip_log_audit_event:) super - resolve_access_request_todos(current_user, member) + resolve_access_request_todos(member) end def validate_access!(access_requester) diff --git a/app/services/members/base_service.rb b/app/services/members/base_service.rb index 801f77ae082..80fba33b20e 100644 --- a/app/services/members/base_service.rb +++ b/app/services/members/base_service.rb @@ -53,8 +53,8 @@ module Members end end - def resolve_access_request_todos(current_user, requester) - todo_service.resolve_access_request_todos(current_user, requester) + def resolve_access_request_todos(member) + todo_service.resolve_access_request_todos(member) end def enqueue_delete_todos(member) diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb index 0f195663a61..b77485ce744 100644 --- a/app/services/members/destroy_service.rb +++ b/app/services/members/destroy_service.rb @@ -84,7 +84,7 @@ module Members delete_subresources(member) unless skip_subresources delete_project_invitations_by(member) unless skip_subresources - resolve_access_request_todos(current_user, member) + resolve_access_request_todos(member) after_execute(member: member) end diff --git a/app/services/projects/open_issues_count_service.rb b/app/services/projects/open_issues_count_service.rb index b373a099020..d31f4596fa5 100644 --- a/app/services/projects/open_issues_count_service.rb +++ b/app/services/projects/open_issues_count_service.rb @@ -26,7 +26,7 @@ module Projects def user_is_at_least_reporter? strong_memoize(:user_is_at_least_reporter) do - @project.team.member?(@user, Gitlab::Access::REPORTER) + @project.member?(@user, Gitlab::Access::REPORTER) end end diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb index 2025d438ae7..c55e1680bfe 100644 --- a/app/services/todo_service.rb +++ b/app/services/todo_service.rb @@ -175,13 +175,26 @@ class TodoService TodosFinder.new(current_user).any_for_target?(issuable, :pending) end - # Resolves all todos related to target + # Resolves all todos related to target for the current_user def resolve_todos_for_target(target, current_user) attributes = attributes_for_target(target) resolve_todos(pending_todos([current_user], attributes), current_user) end + # Resolves all todos related to target for all users + def resolve_todos_with_attributes_for_target(target, attributes, resolution: :done, resolved_by_action: :system_done) + target_attributes = { target_id: target.id, target_type: target.class.polymorphic_name } + attributes.merge!(target_attributes) + attributes[:preload_user_association] = true + + todos = PendingTodosFinder.new(attributes).execute + users = todos.map(&:user) + todos_ids = todos.batch_update(state: resolution, resolved_by_action: resolved_by_action) + users.each(&:update_todos_count_cache) + todos_ids + end + def resolve_todos(todos, current_user, resolution: :done, resolved_by_action: :system_done) todos_ids = todos.batch_update(state: resolution, resolved_by_action: resolved_by_action) @@ -198,21 +211,20 @@ class TodoService current_user.update_todos_count_cache end - def resolve_access_request_todos(current_user, member) - return if current_user.nil? || member.nil? + def resolve_access_request_todos(member) + return if member.nil? + # Group or Project target = member.source - finder_params = { + todos_params = { state: :pending, author_id: member.user_id, - action_id: ::Todo::MEMBER_ACCESS_REQUESTED, - type: target.class.polymorphic_name, - target: target.id + action: ::Todo::MEMBER_ACCESS_REQUESTED, + type: target.class.polymorphic_name } - todos = TodosFinder.new(current_user, finder_params).execute - resolve_todos(todos, current_user) + resolve_todos_with_attributes_for_target(target, todos_params) end def restore_todos(todos, current_user) @@ -419,7 +431,7 @@ class TodoService end def pending_todos(users, criteria = {}) - PendingTodosFinder.new(users, criteria).execute + PendingTodosFinder.new(criteria.merge(users: users)).execute end def track_todo_creation(user, issue_type, namespace, project) |