From 7c5a18cb6497bc2f2c07e60fa26eb914722a304c Mon Sep 17 00:00:00 2001 From: Paras Malhotra Date: Tue, 3 Nov 2020 21:18:19 +0530 Subject: [PATCH] Revert "Remove interface and check method/property instead" This reverts commit bc45489f4a666221d11875e5fab77cc03d448b8c. --- src/Illuminate/Contracts/Queue/UniqueJob.php | 8 ++++++++ src/Illuminate/Foundation/Bus/PendingDispatch.php | 4 ++-- src/Illuminate/Foundation/Console/stubs/job.queued.stub | 1 + src/Illuminate/Queue/CallQueuedHandler.php | 4 ++-- tests/Integration/Queue/UniqueJobTest.php | 9 +++------ 5 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 src/Illuminate/Contracts/Queue/UniqueJob.php diff --git a/src/Illuminate/Contracts/Queue/UniqueJob.php b/src/Illuminate/Contracts/Queue/UniqueJob.php new file mode 100644 index 000000000000..603be95f5d42 --- /dev/null +++ b/src/Illuminate/Contracts/Queue/UniqueJob.php @@ -0,0 +1,8 @@ +job, 'uniqueId') - && ! property_exists($this->job, 'uniqueId')) { + if (! ($this->job instanceof UniqueJob)) { return true; } diff --git a/src/Illuminate/Foundation/Console/stubs/job.queued.stub b/src/Illuminate/Foundation/Console/stubs/job.queued.stub index 5f0651cb1789..0be12826fb73 100644 --- a/src/Illuminate/Foundation/Console/stubs/job.queued.stub +++ b/src/Illuminate/Foundation/Console/stubs/job.queued.stub @@ -4,6 +4,7 @@ namespace {{ namespace }}; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Contracts\Queue\UniqueJob; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; diff --git a/src/Illuminate/Queue/CallQueuedHandler.php b/src/Illuminate/Queue/CallQueuedHandler.php index a3a653af25f8..ec3bfa48ea27 100644 --- a/src/Illuminate/Queue/CallQueuedHandler.php +++ b/src/Illuminate/Queue/CallQueuedHandler.php @@ -8,6 +8,7 @@ use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Queue\Job; +use Illuminate\Contracts\Queue\UniqueJob; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Pipeline\Pipeline; use ReflectionClass; @@ -166,8 +167,7 @@ protected function ensureSuccessfulBatchJobIsRecorded($command) */ protected function ensureUniqueJobLockIsReleased($command) { - if (method_exists($command, 'uniqueId') - || property_exists($command, 'uniqueId')) { + if ($command instanceof UniqueJob) { $uniqueId = method_exists($command, 'uniqueId') ? $command->uniqueId() : ($command->uniqueId ?? ''); diff --git a/tests/Integration/Queue/UniqueJobTest.php b/tests/Integration/Queue/UniqueJobTest.php index 8335e59199f7..45c09338ae40 100644 --- a/tests/Integration/Queue/UniqueJobTest.php +++ b/tests/Integration/Queue/UniqueJobTest.php @@ -5,6 +5,7 @@ use Illuminate\Bus\Queueable; use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Contracts\Queue\UniqueJob; use Illuminate\Database\Schema\Blueprint; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; @@ -145,28 +146,24 @@ protected function getLockKey($job) } } -class UniqueTestJob implements ShouldQueue +class UniqueTestJob implements ShouldQueue, UniqueJob { use InteractsWithQueue, Queueable, Dispatchable; public static $handled = false; - public $uniqueId = ''; - public function handle() { static::$handled = true; } } -class UniqueTestFailJob implements ShouldQueue +class UniqueTestFailJob implements ShouldQueue, UniqueJob { use InteractsWithQueue, Queueable, Dispatchable; public $tries = 1; - public $uniqueId = ''; - public static $handled = false; public function handle()