Class: Environments::AutoRecoverService

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

Constant Summary collapse

BATCH_SIZE =
100
LOOP_TIMEOUT =
45.minutes
LOOP_LIMIT =
1000
EXCLUSIVE_LOCK_KEY =
'environments:auto_recover: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

Recover environments that are stuck stopping on a 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_recover_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
      recover_in_batch
    end
  end
end