From 675eb2698105e1a5a8505dbdbc6145a83e5724c8 Mon Sep 17 00:00:00 2001 From: lukinovec Date: Thu, 22 Jun 2023 11:27:11 +0200 Subject: [PATCH] Bring back the previous tenant logic --- .../QueueTenancyBootstrapper.php | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Bootstrappers/QueueTenancyBootstrapper.php b/src/Bootstrappers/QueueTenancyBootstrapper.php index beb03579..3f46a112 100644 --- a/src/Bootstrappers/QueueTenancyBootstrapper.php +++ b/src/Bootstrappers/QueueTenancyBootstrapper.php @@ -54,21 +54,27 @@ class QueueTenancyBootstrapper implements TenancyBootstrapper protected static function setUpJobListener(Dispatcher $dispatcher): void { - $dispatcher->listen(JobProcessing::class, function ($event) { + $previousTenant = null; + + $dispatcher->listen(JobProcessing::class, function ($event) use (&$previousTenant) { + $previousTenant = tenant(); + static::initializeTenancyForQueue($event->job->payload()['tenant_id'] ?? null); }); - $dispatcher->listen(JobRetryRequested::class, function ($event) { + $dispatcher->listen(JobRetryRequested::class, function ($event) use (&$previousTenant) { + $previousTenant = tenant(); + static::initializeTenancyForQueue($event->payload()['tenant_id'] ?? null); }); // If we're running tests, we make sure to clean up after any artisan('queue:work') calls - $revertToCentralContext = function ($event) { - static::revertToCentralContext($event); + $revertToPreviousState = function ($event) use (&$previousTenant) { + static::revertToPreviousState($event, $previousTenant); }; - $dispatcher->listen(JobProcessed::class, $revertToCentralContext); // artisan('queue:work') which succeeds - $dispatcher->listen(JobFailed::class, $revertToCentralContext); // artisan('queue:work') which fails + $dispatcher->listen(JobProcessed::class, $revertToPreviousState); // artisan('queue:work') which succeeds + $dispatcher->listen(JobFailed::class, $revertToPreviousState); // artisan('queue:work') which fails } protected static function initializeTenancyForQueue(string|int|null $tenantId): void @@ -112,7 +118,7 @@ class QueueTenancyBootstrapper implements TenancyBootstrapper tenancy()->initialize($tenant); } - protected static function revertToCentralContext(JobProcessed|JobFailed $event): void + protected static function revertToPreviousState(JobProcessed|JobFailed $event, ?Tenant &$previousTenant): void { $tenantId = $event->job->payload()['tenant_id'] ?? null; @@ -121,8 +127,13 @@ class QueueTenancyBootstrapper implements TenancyBootstrapper return; } + // Revert back to the previous tenant + if (tenant() && $previousTenant && $previousTenant->isNot(tenant())) { + tenancy()->initialize($previousTenant); + } + // End tenancy - if (tenant()) { + if (tenant() && (! $previousTenant)) { tenancy()->end(); } }