Class: RemoveExpiredMembersWorker

Inherits:
Object
  • Object
show all
Includes:
ApplicationWorker, CronjobQueue
Defined in:
app/workers/remove_expired_members_worker.rb

Overview

rubocop:disable Scalability/IdempotentWorker

Constant Summary

Constants included from ApplicationWorker

ApplicationWorker::LOGGING_EXTRA_KEY, ApplicationWorker::SAFE_PUSH_BULK_LIMIT

Constants included from Gitlab::Loggable

Gitlab::Loggable::ANONYMOUS

Constants included from WorkerAttributes

WorkerAttributes::DEFAULT_DATA_CONSISTENCY, WorkerAttributes::DEFAULT_DEFER_DELAY, WorkerAttributes::NAMESPACE_WEIGHTS, WorkerAttributes::VALID_DATA_CONSISTENCIES, WorkerAttributes::VALID_RESOURCE_BOUNDARIES, WorkerAttributes::VALID_URGENCIES

Instance Method Summary collapse

Methods included from Gitlab::Loggable

#build_structured_payload

Methods included from Gitlab::SidekiqVersioning::Worker

#job_version

Methods included from WorkerContext

#with_context

Instance Method Details

#performObject

rubocop: disable CodeReuse/ActiveRecord



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/workers/remove_expired_members_worker.rb', line 14

def perform
  Member.expired.preload(:user, :source).find_each do |member|
    context = {
      user: member.user,
      # The ApplicationContext will reject type-mismatches. So a GroupMemeber will only populate `namespace`.
      # while a `ProjectMember` will populate `project
      project: member.source,
      namespace: member.source
    }
    with_context(context) do
      Members::DestroyService.new.execute(member, skip_authorization: true)

      expired_user = member.user

      if expired_user.project_bot?
        Users::DestroyService.new(nil).execute(expired_user, skip_authorization: true)
      end
    end
  rescue StandardError => ex
    logger.error("Expired Member ID=#{member.id} cannot be removed - #{ex}")
  end
end