Harden self-update recovery (T-617)

This commit is contained in:
ila
2026-07-20 00:05:41 +08:00
parent ea1d6c8ee4
commit 24e9862192
12 changed files with 369 additions and 42 deletions
+7 -3
View File
@@ -130,7 +130,7 @@ func (service *Service) Update(ctx context.Context, request Request) error {
return err
}
if err := renameDirectory(layout.target, layout.backup, layout, service.syncer, "back up current app"); err != nil {
return service.failBeforeActivation(err)
return service.failBeforeActivation(layout, err)
}
if err := writeTransaction(layout, phaseTargetBackedUp, service.syncer); err != nil {
return service.rollback(layout, err)
@@ -172,8 +172,12 @@ func (service *Service) Update(ctx context.Context, request Request) error {
return nil
}
func (service *Service) failBeforeActivation(cause error) error {
return fmt.Errorf("prepare self-update: %w", cause)
func (service *Service) failBeforeActivation(layout updateLayout, cause error) error {
prepareErr := fmt.Errorf("prepare self-update: %w", cause)
if recoveryErr := recoverLayout(layout, service.syncer); recoveryErr != nil {
return errors.Join(prepareErr, recoveryErr)
}
return prepareErr
}
func (service *Service) rollback(layout updateLayout, cause error) error {