From 2b432e69933a70da14a3a1e75a7b8878a6020377 Mon Sep 17 00:00:00 2001 From: junkerderprovinz Date: Sun, 27 Sep 2026 11:32:56 +0200 Subject: [PATCH] fix(postprocessing): skip UploadReady events without an upload id --- .../postprocessing/pkg/service/service.go | 4 +++ .../pkg/service/service_test.go | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/services/postprocessing/pkg/service/service.go b/services/postprocessing/pkg/service/service.go index f63d08c4a7..d6963daa49 100644 --- a/services/postprocessing/pkg/service/service.go +++ b/services/postprocessing/pkg/service/service.go @@ -267,6 +267,10 @@ func (pps *PostprocessingService) processEvent(e raw.Event) error { }) case events.UploadReady: pps.log.Debug().Str("UploadID", e.ID).Str("filename", ev.Filename).Msg("processing UploadReady") + if ev.UploadID == "" { + // no upload session, the posix driver assimilated a file that was written to disk directly + return nil + } // the upload failed - let's keep it around for a while - but mark it as finished pp, err = pps.getPP(pps.store, ev.UploadID) if err != nil { diff --git a/services/postprocessing/pkg/service/service_test.go b/services/postprocessing/pkg/service/service_test.go index ad3b342787..b1c26809ea 100644 --- a/services/postprocessing/pkg/service/service_test.go +++ b/services/postprocessing/pkg/service/service_test.go @@ -92,6 +92,21 @@ var _ = Describe("PostprocessingService", func() { } } + uploadReady := func(uploadID string, failed bool) raw.Event { + ev := events.UploadReady{ + UploadID: uploadID, + Failed: failed, + Filename: "test.txt", + } + return raw.Event{ + Event: events.Event{ + ID: uuid.New().String(), + Type: reflect.TypeOf(ev).String(), + Event: ev, + }, + } + } + BeforeEach(func() { cfg = config.Postprocessing{ Steps: []string{"virusscan"}, @@ -197,4 +212,25 @@ var _ = Describe("PostprocessingService", func() { Expect(errors.Is(err, ErrFatal)).To(BeFalse()) }) }) + + Describe("handling UploadReady", func() { + It("marks a failed upload as finished", func() { + pps = newService() + started := bytesReceived() + uploadID := started.Event.Event.(events.BytesReceived).UploadID + Expect(pps.processEvent(started)).To(Succeed()) + + Expect(pps.processEvent(uploadReady(uploadID, true))).To(Succeed()) + + pp, err := pps.getPP(pps.store, uploadID) + Expect(err).ToNot(HaveOccurred()) + Expect(pp.Finished).To(BeTrue()) + }) + + It("ignores a file that the storage assimilated without an upload", func() { + pps = newService() + + Expect(pps.processEvent(uploadReady("", false))).To(Succeed()) + }) + }) })