| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <?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
- */
- 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
- */
- public static function getKey($job)
- {
- $uniqueId = method_exists($job, 'uniqueId')
- ? $job->uniqueId()
- : ($job->uniqueId ?? '');
- return 'laravel_unique_job:'.get_class($job).':'.$uniqueId;
- }
- }
|