Skip to content

Commit 5a0c867

Browse files
nunomaduroStyleCIBottaylorotwell
authored
[2.x] Flushes Once::class on Operation Terminated (#821)
* Flushes once after `OperationTerminated` * Apply fixes from StyleCI * Fix code styling --------- Co-authored-by: StyleCI Bot <[email protected]> Co-authored-by: taylorotwell <[email protected]>
1 parent 72da68d commit 5a0c867

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

config/octane.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Laravel\Octane\Listeners\DisconnectFromDatabases;
1616
use Laravel\Octane\Listeners\EnsureUploadedFilesAreValid;
1717
use Laravel\Octane\Listeners\EnsureUploadedFilesCanBeMoved;
18+
use Laravel\Octane\Listeners\FlushOnce;
1819
use Laravel\Octane\Listeners\FlushTemporaryContainerInstances;
1920
use Laravel\Octane\Listeners\FlushUploadedFiles;
2021
use Laravel\Octane\Listeners\ReportException;
@@ -101,6 +102,7 @@
101102
],
102103

103104
OperationTerminated::class => [
105+
FlushOnce::class,
104106
FlushTemporaryContainerInstances::class,
105107
// DisconnectFromDatabases::class,
106108
// CollectGarbage::class,

src/Listeners/FlushOnce.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Laravel\Octane\Listeners;
4+
5+
use Illuminate\Support\Once;
6+
7+
class FlushOnce
8+
{
9+
/**
10+
* Handle the event.
11+
*
12+
* @param mixed $event
13+
*/
14+
public function handle($event): void
15+
{
16+
if (class_exists(Once::class)) {
17+
Once::flush();
18+
}
19+
}
20+
}

tests/Listeners/FlushOnceTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Laravel\Octane\Listeners;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Support\Once;
7+
use Laravel\Octane\Tests\TestCase;
8+
9+
class FlushOnceTest extends TestCase
10+
{
11+
public function test_once_is_flushed()
12+
{
13+
if (! class_exists(Once::class)) {
14+
$this->markTestSkipped('Once is only supported in Laravel 11+');
15+
}
16+
17+
[$app, $worker] = $this->createOctaneContext([
18+
Request::create('/', 'GET'),
19+
Request::create('/', 'GET'),
20+
Request::create('/', 'GET'),
21+
]);
22+
23+
$results = [];
24+
25+
$app['router']->middleware('web')->get('/', function () use (&$results) {
26+
$results[] = my_rand();
27+
});
28+
29+
$worker->run();
30+
31+
$this->assertTrue($results[0] !== $results[1]);
32+
$this->assertTrue($results[0] !== $results[2]);
33+
$this->assertTrue($results[1] !== $results[2]);
34+
}
35+
}
36+
37+
function my_rand()
38+
{
39+
return once(fn () => rand(1, PHP_INT_MAX));
40+
}

0 commit comments

Comments
 (0)