Merge pull request #3961 from pixelfed/staging

Update CloudMediaMigrate command
This commit is contained in:
daniel 2022-12-18 00:41:51 -07:00 committed by GitHub
commit 0ad2623ab1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 32 deletions

View file

@ -69,7 +69,7 @@ class CloudMediaMigrate extends Command
return; return;
} catch (NotFoundHttpException $e) { } catch (NotFoundHttpException $e) {
return; return;
} catch (Exception $e) { } catch (\Exception $e) {
return; return;
} }
} }

View file

@ -9,6 +9,8 @@ use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\Services\MediaService; use App\Services\MediaService;
use App\Services\StatusService; use App\Services\StatusService;
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class MediaS3GarbageCollector extends Command class MediaS3GarbageCollector extends Command
{ {
@ -88,26 +90,37 @@ class MediaS3GarbageCollector extends Command
$localDisk = Storage::disk('local'); $localDisk = Storage::disk('local');
foreach($gc as $media) { foreach($gc as $media) {
if( try {
$cloudDisk->exists($media->media_path) if(
) { $cloudDisk->exists($media->media_path)
if( $localDisk->exists($media->media_path)) { ) {
$localDisk->delete($media->media_path); if( $localDisk->exists($media->media_path)) {
$media->version = 4; $localDisk->delete($media->media_path);
$media->save(); $media->version = 4;
$totalSize = $totalSize + $media->size; $media->save();
MediaService::del($media->status_id); $totalSize = $totalSize + $media->size;
StatusService::del($media->status_id, false); MediaService::del($media->status_id);
StatusService::del($media->status_id, false);
} else {
$media->version = 4;
$media->save();
}
} else { } else {
$media->version = 4; if($log) {
$media->save(); Log::channel('media')->info('[GC] Local media not properly persisted to cloud storage', ['media_id' => $media->id]);
} }
} else {
if($log) {
Log::channel('media')->info('[GC] Local media not properly persisted to cloud storage', ['media_id' => $media->id]);
} }
$bar->advance();
} catch (FileNotFoundException $e) {
$bar->advance();
continue;
} catch (NotFoundHttpException $e) {
$bar->advance();
continue;
} catch (\Exception $e) {
$bar->advance();
continue;
} }
$bar->advance();
} }
$bar->finish(); $bar->finish();
$this->line(' '); $this->line(' ');
@ -132,23 +145,34 @@ class MediaS3GarbageCollector extends Command
->where('id', '<', $minId) ->where('id', '<', $minId)
->chunk(50, function($medias) use($cloudDisk, $localDisk, $bar, $log) { ->chunk(50, function($medias) use($cloudDisk, $localDisk, $bar, $log) {
foreach($medias as $media) { foreach($medias as $media) {
if($cloudDisk->exists($media->media_path)) { try {
if( $localDisk->exists($media->media_path)) { if($cloudDisk->exists($media->media_path)) {
$localDisk->delete($media->media_path); if( $localDisk->exists($media->media_path)) {
$media->version = 4; $localDisk->delete($media->media_path);
$media->save(); $media->version = 4;
MediaService::del($media->status_id); $media->save();
StatusService::del($media->status_id, false); MediaService::del($media->status_id);
StatusService::del($media->status_id, false);
} else {
$media->version = 4;
$media->save();
}
} else { } else {
$media->version = 4; if($log) {
$media->save(); Log::channel('media')->info('[GC] Local media not properly persisted to cloud storage', ['media_id' => $media->id]);
} }
} else {
if($log) {
Log::channel('media')->info('[GC] Local media not properly persisted to cloud storage', ['media_id' => $media->id]);
} }
$bar->advance();
} catch (FileNotFoundException $e) {
$bar->advance();
continue;
} catch (NotFoundHttpException $e) {
$bar->advance();
continue;
} catch (\Exception $e) {
$bar->advance();
continue;
} }
$bar->advance();
} }
}); });