From 097efd14ce2dea1b7174b68600766e3b302a80d8 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 26 May 2026 14:45:49 +0200 Subject: [PATCH] fix(storage): clear stale disk usage cache Forget cached storage threshold state when reported disk usage drops below the alert threshold, allowing future threshold crossings to dispatch a fresh storage check. --- app/Jobs/PushServerUpdateJob.php | 2 ++ .../PushServerUpdateJobOptimizationTest.php | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/Jobs/PushServerUpdateJob.php b/app/Jobs/PushServerUpdateJob.php index cdfa174ed..e75509f62 100644 --- a/app/Jobs/PushServerUpdateJob.php +++ b/app/Jobs/PushServerUpdateJob.php @@ -143,6 +143,8 @@ public function handle() && (string) $lastPercentage !== (string) $filesystemUsageRoot) { Cache::put($storageCacheKey, $filesystemUsageRoot, 600); ServerStorageCheckJob::dispatch($this->server, $filesystemUsageRoot); + } elseif ($filesystemUsageRoot !== null && $filesystemUsageRoot < $diskThreshold) { + Cache::forget($storageCacheKey); } if ($this->containers->isEmpty()) { diff --git a/tests/Feature/PushServerUpdateJobOptimizationTest.php b/tests/Feature/PushServerUpdateJobOptimizationTest.php index 92c98a2e1..c7537bb49 100644 --- a/tests/Feature/PushServerUpdateJobOptimizationTest.php +++ b/tests/Feature/PushServerUpdateJobOptimizationTest.php @@ -50,6 +50,39 @@ Queue::assertNotPushed(ServerStorageCheckJob::class); }); +it('clears stale storage cache when disk usage drops below threshold', function () { + $team = Team::factory()->create(); + $server = Server::factory()->create(['team_id' => $team->id]); + $storageCacheKey = 'storage-check:'.$server->id; + + Cache::put($storageCacheKey, 85, 600); + + $belowThresholdData = [ + 'containers' => [], + 'filesystem_usage_root' => ['used_percentage' => 45], + ]; + + $job = new PushServerUpdateJob($server, $belowThresholdData); + $job->handle(); + + Queue::assertNotPushed(ServerStorageCheckJob::class); + expect(Cache::missing($storageCacheKey))->toBeTrue(); + + Queue::fake(); + + $aboveThresholdData = [ + 'containers' => [], + 'filesystem_usage_root' => ['used_percentage' => 85], + ]; + + $job = new PushServerUpdateJob($server, $aboveThresholdData); + $job->handle(); + + Queue::assertPushed(ServerStorageCheckJob::class, function ($job) use ($server) { + return $job->server->id === $server->id && $job->percentage === 85; + }); +}); + it('does not dispatch storage check when disk percentage is unchanged', function () { $team = Team::factory()->create(); $server = Server::factory()->create(['team_id' => $team->id]);