Class: Environments::AutoStopService

Inherits:
Object
  • Object
show all
Includes:
Gitlab::ExclusiveLeaseHelpers, Gitlab::LoopHelpers
Defined in:
app/services/environments/auto_stop_service.rb

Constant Summary collapse

BATCH_SIZE =
100
LOOP_TIMEOUT =
45.minutes
LOOP_LIMIT =
1000
EXCLUSIVE_LOCK_KEY =
'environments:auto_stop:lock'
LOCK_TIMEOUT =
50.minutes

Constants included from Gitlab::ExclusiveLeaseHelpers

Gitlab::ExclusiveLeaseHelpers::FailedToObtainLockError

Instance Method Summary collapse

Methods included from Gitlab::LoopHelpers

#loop_until

Methods included from Gitlab::ExclusiveLeaseHelpers

#in_lock

Instance Method Details

#executeObject

Stop expired environments on GitLab instance

This auto stop process cannot run for more than 45 minutes. This is for preventing multiple AutoStopCronWorker CRON jobs run concurrently, which is scheduled at every hour.



20
21
22
23
24
25
26
# File 'app/services/environments/auto_stop_service.rb', line 20

def execute
  in_lock(EXCLUSIVE_LOCK_KEY, ttl: LOCK_TIMEOUT, retries: 1) do
    loop_until(timeout: LOOP_TIMEOUT, limit: LOOP_LIMIT) do
      stop_in_batch
    end
  end
end