From df2e7fab764b0c499a7a1cfe383b0f0de11d898b Mon Sep 17 00:00:00 2001 From: mm503 <182180598+mm503@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:32:55 -0500 Subject: [PATCH 1/3] Improve episode cleanup routine I did some manual cleanup and that broke consistency with what's in the DB. The improved logic updates the DB based on current state. --- pkg/fs/local.go | 5 ++++- pkg/fs/local_test.go | 4 ++++ pkg/fs/s3.go | 7 +++++++ pkg/fs/s3_test.go | 7 ++++++- services/update/updater.go | 12 +++++++++--- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/pkg/fs/local.go b/pkg/fs/local.go index 4046f5c1..23c22e0a 100644 --- a/pkg/fs/local.go +++ b/pkg/fs/local.go @@ -36,7 +36,10 @@ func (l *Local) Open(name string) (http.File, error) { func (l *Local) Delete(_ctx context.Context, name string) error { path := filepath.Join(l.rootDir, name) - return os.Remove(path) + if err := os.Remove(path); err != nil { + return err + } + return nil } func (l *Local) Create(_ctx context.Context, name string, reader io.Reader) (int64, error) { diff --git a/pkg/fs/local_test.go b/pkg/fs/local_test.go index 9157450f..ce532841 100644 --- a/pkg/fs/local_test.go +++ b/pkg/fs/local_test.go @@ -7,6 +7,7 @@ import ( "path/filepath" "testing" + "github.com/pkg/errors" "github.com/stretchr/testify/assert" ) @@ -79,6 +80,9 @@ func TestLocal_Delete(t *testing.T) { _, err = os.Stat(filepath.Join(tmpDir, "1", "test")) assert.True(t, os.IsNotExist(err)) + + err = stor.Delete(testCtx, "1/test") + assert.True(t, errors.Is(err, os.ErrNotExist)) } func TestLocal_copyFile(t *testing.T) { diff --git a/pkg/fs/s3.go b/pkg/fs/s3.go index 16cdb8eb..6f2b3828 100644 --- a/pkg/fs/s3.go +++ b/pkg/fs/s3.go @@ -65,6 +65,13 @@ func (s *S3) Delete(ctx context.Context, name string) error { Bucket: &s.bucket, Key: &key, }) + if err != nil { + if awsErr, ok := err.(awserr.Error); ok { + if awsErr.Code() == "NotFound" { + return os.ErrNotExist + } + } + } return err } diff --git a/pkg/fs/s3_test.go b/pkg/fs/s3_test.go index d5e56dcf..41305522 100644 --- a/pkg/fs/s3_test.go +++ b/pkg/fs/s3_test.go @@ -13,6 +13,7 @@ import ( "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3iface" "github.com/aws/aws-sdk-go/service/s3/s3manager" + "github.com/pkg/errors" "github.com/stretchr/testify/assert" ) @@ -64,10 +65,14 @@ func TestS3_Delete(t *testing.T) { assert.NoError(t, err) _, err = stor.Size(testCtx, "1/test") - assert.True(t, os.IsNotExist(err)) + assert.True(t, errors.Is(err, os.ErrNotExist)) _, ok := files["1/test"] assert.False(t, ok) + + err = stor.Delete(testCtx, "1/test") + assert.True(t, errors.Is(err, os.ErrNotExist)) + } func TestS3_BuildKey(t *testing.T) { diff --git a/services/update/updater.go b/services/update/updater.go index 8cc9f721..8d637ac6 100644 --- a/services/update/updater.go +++ b/services/update/updater.go @@ -398,9 +398,15 @@ func (u *Manager) cleanup(ctx context.Context, feedConfig *feed.Config) error { path = fmt.Sprintf("%s/%s", feedConfig.ID, episodeName) ) - if err := u.fs.Delete(ctx, path); err != nil { - result = multierror.Append(result, errors.Wrapf(err, "failed to delete episode: %s", episode.ID)) - continue + err := u.fs.Delete(ctx, path) + if err != nil { + if !errors.Is(err, os.ErrNotExist) { + logger.WithError(err).Errorf("failed to delete episode file: %s", episode.ID) + result = multierror.Append(result, errors.Wrapf(err, "failed to delete episode: %s", episode.ID)) + continue + } + + logger.WithField("episode_id", episode.ID).Info("episode was not found - file does not exist") } if err := u.db.UpdateEpisode(feedID, episode.ID, func(episode *model.Episode) error { From 5157e16f324db7ec754e41f3dd07f48e4b407f68 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Wed, 20 Aug 2025 17:21:20 -0700 Subject: [PATCH 2/3] Fix linting: remove trailing newline in s3_test.go --- pkg/fs/s3_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/fs/s3_test.go b/pkg/fs/s3_test.go index 41305522..8d25b48b 100644 --- a/pkg/fs/s3_test.go +++ b/pkg/fs/s3_test.go @@ -72,7 +72,6 @@ func TestS3_Delete(t *testing.T) { err = stor.Delete(testCtx, "1/test") assert.True(t, errors.Is(err, os.ErrNotExist)) - } func TestS3_BuildKey(t *testing.T) { From 0e794495940009efd125ee8ecaf96be1762e6905 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Wed, 20 Aug 2025 17:25:19 -0700 Subject: [PATCH 3/3] Add error message when removing local file Signed-off-by: Maksym Pavlenko --- pkg/fs/local.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/fs/local.go b/pkg/fs/local.go index 23c22e0a..e5c78cc6 100644 --- a/pkg/fs/local.go +++ b/pkg/fs/local.go @@ -2,6 +2,7 @@ package fs import ( "context" + "fmt" "io" "net/http" "os" @@ -37,7 +38,7 @@ func (l *Local) Open(name string) (http.File, error) { func (l *Local) Delete(_ctx context.Context, name string) error { path := filepath.Join(l.rootDir, name) if err := os.Remove(path); err != nil { - return err + return fmt.Errorf("failed to delete file %s: %w", path, err) } return nil }