- 
                Notifications
    You must be signed in to change notification settings 
- Fork 11.6k
Closed
Labels
Description
- Laravel Version: 8.47.0
- PHP Version: 7.4.10
- Horizon Version 5.7.9
Description:
ShouldBeUnique and ShouldBeUniqueUntilProcessing do not release lock unless a timeout is set, and then it only releases after the timeout has expired, not after the job has been processed.
Steps To Reproduce:
class ... implements ShouldQueue, ShouldBeUnique
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    private $userId;
    /**
     * The unique ID of the job.
     *
     * @return string
     */
    public function uniqueId()
    {
        return $this->userId;
    }    
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($userId)
    {
        $this->userId = $userId;
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        try {
            //call the stored proc to assign a lead:
            $assigned = \DB::select('CALL ...(' . $this->userId . ')');
            $data = [
                'Status' => 'success',
                'result_id' => $result[0]->id
            ];
            event(new BroadcastToUser($this->userId, 'event', $data));
        } catch (\Exception $e) {
            event(new BroadcastToUser($this->userId, 'event', ['Status' => 'error']));
        }
    }
The above job runs once for $this->userId, but then will never be added to the queue again, unless I remove ShouldBeUnique.