Fix app status not updated when deployment fails or service restarts
- Update app status to error when health check fails with an error - Update app status to error in cleanupStuckDeployments for apps stuck in building state - This fixes the inconsistency where app shows "building" but deployment is "failed"
This commit is contained in:
parent
a71bf07dbf
commit
aaa55fd153
@ -386,7 +386,8 @@ func (svc *Service) deployContainerWithTimeout(
|
||||
|
||||
// cleanupStuckDeployments marks any deployments stuck in building/deploying as failed.
|
||||
func (svc *Service) cleanupStuckDeployments(ctx context.Context) error {
|
||||
query := `
|
||||
// First, update the deployments
|
||||
deployQuery := `
|
||||
UPDATE deployments
|
||||
SET status = ?, finished_at = ?, logs = COALESCE(logs, '') || ?
|
||||
WHERE status IN (?, ?)
|
||||
@ -395,7 +396,7 @@ func (svc *Service) cleanupStuckDeployments(ctx context.Context) error {
|
||||
|
||||
_, err := svc.db.DB().ExecContext(
|
||||
ctx,
|
||||
query,
|
||||
deployQuery,
|
||||
models.DeploymentStatusFailed,
|
||||
time.Now(),
|
||||
msg,
|
||||
@ -408,7 +409,27 @@ func (svc *Service) cleanupStuckDeployments(ctx context.Context) error {
|
||||
return fmt.Errorf("failed to cleanup stuck deployments: %w", err)
|
||||
}
|
||||
|
||||
svc.log.Info("cleaned up stuck deployments")
|
||||
// Also update app status for apps that were stuck in building
|
||||
appQuery := `
|
||||
UPDATE apps
|
||||
SET status = ?, updated_at = ?
|
||||
WHERE status = ?
|
||||
`
|
||||
|
||||
_, err = svc.db.DB().ExecContext(
|
||||
ctx,
|
||||
appQuery,
|
||||
models.AppStatusError,
|
||||
time.Now(),
|
||||
models.AppStatusBuilding,
|
||||
)
|
||||
if err != nil {
|
||||
svc.log.Error("failed to cleanup stuck app statuses", "error", err)
|
||||
|
||||
return fmt.Errorf("failed to cleanup stuck app statuses: %w", err)
|
||||
}
|
||||
|
||||
svc.log.Info("cleaned up stuck deployments and app statuses")
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -893,6 +914,9 @@ func (svc *Service) checkHealthAfterDelay(
|
||||
svc.log.Error("failed to check container health", "error", err)
|
||||
svc.notify.NotifyDeployFailed(ctx, reloadedApp, deployment, err)
|
||||
_ = deployment.MarkFinished(ctx, models.DeploymentStatusFailed)
|
||||
svc.writeLogsToFile(reloadedApp, deployment)
|
||||
reloadedApp.Status = models.AppStatusError
|
||||
_ = reloadedApp.Save(ctx)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user