Skip to content

Commit 17a9d59

Browse files
committed
Improve task deduplication and name in Cloud Tasks
1 parent 841471c commit 17a9d59

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/CloudTasksQueue.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Google\Protobuf\Timestamp;
1717
use Illuminate\Contracts\Queue\Queue as QueueContract;
1818
use Illuminate\Queue\Queue as LaravelQueue;
19+
use Illuminate\Support\Str;
1920
use Stackkit\LaravelGoogleCloudTasksQueue\Events\TaskCreated;
2021

2122
use function Safe\json_decode;
@@ -112,7 +113,7 @@ protected function pushToCloudTasks($queue, $payload, $delay = 0)
112113

113114
$payload = (array) json_decode($payload, true);
114115

115-
$task = tap(new Task())->setName($this->taskName($queue));
116+
$task = tap(new Task())->setName($this->taskName($queue, $payload['displayName']));
116117

117118
$payload = $this->enrichPayloadWithInternalData(
118119
payload: $payload,
@@ -143,13 +144,16 @@ protected function pushToCloudTasks($queue, $payload, $delay = 0)
143144
return $payload['uuid'];
144145
}
145146

146-
private function taskName(string $queueName): string
147+
private function taskName(string $queueName, string $displayName): string
147148
{
148149
return CloudTasksClient::taskName(
149150
$this->config['project'],
150151
$this->config['location'],
151152
$queueName,
152-
bin2hex(random_bytes(16)),
153+
str($displayName)
154+
->afterLast('\\')
155+
->prepend((string) Str::ulid(), '-')
156+
->toString(),
153157
);
154158
}
155159

tests/QueueTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Illuminate\Support\Facades\DB;
1515
use Illuminate\Support\Facades\Event;
1616
use Illuminate\Support\Facades\Queue;
17+
use Illuminate\Support\Str;
1718
use PHPUnit\Framework\Attributes\Test;
1819
use Stackkit\LaravelGoogleCloudTasksQueue\CloudTasksApi;
1920
use Stackkit\LaravelGoogleCloudTasksQueue\Events\JobReleased;
@@ -440,13 +441,14 @@ public function it_adds_a_pre_defined_task_name()
440441
{
441442
// Arrange
442443
CloudTasksApi::fake();
444+
Str::createUlidsUsingSequence(['01HSR4V9QE2F4T0K8RBAYQ88KE']);
443445

444446
// Act
445447
$this->dispatch((new SimpleJob()));
446448

447449
// Assert
448450
CloudTasksApi::assertTaskCreated(function (Task $task): bool {
449-
return str($task->getName())->test('/projects\/.+\/locations\/.+\/queues\/.+\/tasks\/[a-z0-9]{16}/');
451+
return $task->getName() === 'projects/my-test-project/locations/europe-west6/queues/barbequeue/tasks/01HSR4V9QE2F4T0K8RBAYQ88KE-SimpleJob';
450452
});
451453
}
452454

0 commit comments

Comments
 (0)