Files
coolify/app/Models/ScheduledVolumeBackupExecution.php
T
Andras Bacsai c3b32322eb fix(volume-backups): back off failed container and S3 recovery
Recovery attempts now back off exponentially, stop after 8 attempts, and
mark the execution as needing attention with a failure category. The
scheduler dispatches at most 100 recovery jobs per run, and a pending S3
cleanup no longer blocks new backups. S3 delete errors now raise with
their cause.
2026-10-03 21:25:11 +02:00

64 lines
1.7 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class ScheduledVolumeBackupExecution extends BaseModel
{
protected $fillable = [
'uuid',
'scheduled_volume_backup_id',
's3_storage_id',
'status',
'message',
'size',
'filename',
'stop_container_ids',
'stop_recovery_pending',
's3_cleanup_pending',
'finished_at',
'local_storage_deleted',
's3_storage_deleted',
's3_uploaded',
'recovery_attempts',
'recovery_last_attempt_at',
'recovery_next_retry_at',
'recovery_error',
'recovery_needs_attention',
];
protected function casts(): array
{
return [
'size' => 'integer',
'finished_at' => 'datetime',
'stop_container_ids' => 'array',
'stop_recovery_pending' => 'boolean',
's3_cleanup_pending' => 'boolean',
'local_storage_deleted' => 'boolean',
's3_storage_deleted' => 'boolean',
's3_uploaded' => 'boolean',
'recovery_attempts' => 'integer',
'recovery_last_attempt_at' => 'datetime',
'recovery_next_retry_at' => 'datetime',
'recovery_needs_attention' => 'boolean',
];
}
public function hasPendingRecovery(): bool
{
return $this->stop_recovery_pending || $this->s3_cleanup_pending;
}
public function scheduledVolumeBackup(): BelongsTo
{
return $this->belongsTo(ScheduledVolumeBackup::class);
}
public function s3(): BelongsTo
{
return $this->belongsTo(S3Storage::class, 's3_storage_id');
}
}