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