diff --git a/publishable/config/request-insurance.php b/publishable/config/request-insurance.php index 8c3685f..8473091 100644 --- a/publishable/config/request-insurance.php +++ b/publishable/config/request-insurance.php @@ -98,5 +98,11 @@ 'table_edits' => null, 'table_edit_approvals' => null, - 'useDbReconnect' => env('REQUEST_INSURANCE_WORKER_USE_DB_RECONNECT', true) + 'useDbReconnect' => env('REQUEST_INSURANCE_WORKER_USE_DB_RECONNECT', true), + + /* + | Using skip locked optimizes request insurance to run with multiple worker threads, + | but is unavailable in mysql versions older than 8.0.0 + */ + 'useSkipLocked' => env('REQUEST_INSURANCE_WORKER_USE_SKIP_LOCKED', true), ]; diff --git a/src/RequestInsurance/RequestInsuranceWorker.php b/src/RequestInsurance/RequestInsuranceWorker.php index e467f28..4d1cba2 100644 --- a/src/RequestInsurance/RequestInsuranceWorker.php +++ b/src/RequestInsurance/RequestInsuranceWorker.php @@ -310,11 +310,17 @@ public function acquireLockOnRowsToProcess(): Collection */ public function getIdsOfReadyRequests() { - return resolve(RequestInsurance::class)::query() + $builder = resolve(RequestInsurance::class)::query() ->select('id') ->readyToBeProcessed() - ->take(Config::get('request-insurance.batchSize')) - ->lock('FOR UPDATE SKIP LOCKED') - ->pluck('id'); + ->take(Config::get('request-insurance.batchSize')); + + if (config('request-insurance.useSkipLockede')) { + $builder->lock('FOR UPDATE SKIP LOCKED'); + } else { + $builder->lockForUpdate(); + } + + return $builder->pluck('id'); } }