<?php namespace Illuminate\Bus; use Illuminate\Contracts\Cache\Repository as Cache; class UniqueLock { /** * The cache repository implementation. * * @var \Illuminate\Contracts\Cache\Repository */ protected $cache; /** * Create a new unique lock manager instance. * * @param \Illuminate\Contracts\Cache\Repository $cache * @return void */ public function __construct(Cache $cache) { $this->cache = $cache; } /** * Attempt to acquire a lock for the given job. * * @param mixed $job * @return bool */ public function acquire($job) { $uniqueFor = method_exists($job, 'uniqueFor') ? $job->uniqueFor() : ($job->uniqueFor ?? 0); $cache = method_exists($job, 'uniqueVia') ? $job->uniqueVia() : $this->cache; return (bool) $cache->lock($this->getKey($job), $uniqueFor)->get(); } /** * Release the lock for the given job. * * @param mixed $job * @return void */ public function release($job) { $cache = method_exists($job, 'uniqueVia') ? $job->uniqueVia() : $this->cache; $cache->lock($this->getKey($job))->forceRelease(); } /** * Generate the lock key for the given job. * * @param mixed $job * @return string */ protected function getKey($job) { $uniqueId = method_exists($job, 'uniqueId') ? $job->uniqueId() : ($job->uniqueId ?? ''); return 'laravel_unique_job:'.get_class($job).$uniqueId; } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Events | Folder | 0755 |
|
|
Batch.php | File | 11.88 KB | 0644 |
|
BatchFactory.php | File | 1.71 KB | 0644 |
|
BatchRepository.php | File | 2.13 KB | 0644 |
|
Batchable.php | File | 2.75 KB | 0644 |
|
BusServiceProvider.php | File | 1.96 KB | 0644 |
|
DatabaseBatchRepository.php | File | 10.59 KB | 0644 |
|
Dispatcher.php | File | 7.64 KB | 0644 |
|
LICENSE.md | File | 1.05 KB | 0644 |
|
PendingBatch.php | File | 6.89 KB | 0644 |
|
PrunableBatchRepository.php | File | 318 B | 0644 |
|
Queueable.php | File | 5.91 KB | 0644 |
|
UniqueLock.php | File | 1.68 KB | 0644 |
|
UpdatedBatchJobCounts.php | File | 856 B | 0644 |
|
composer.json | File | 998 B | 0644 |
|