@@ -68,29 +68,35 @@ func (worker *WorkerPool) do(workerId int, file *files.File, workerLogger logger
6868
6969 workerLogger .Info (ctx , "starting file processing" , "file-name" , file .Filename , "user-id" , file .UserId )
7070
71- // download the given file from cloud storage
72- cloudstorage .Download (ctx , s3Client , file , worker .cfg , workerLogger )
73- // process the file
74- err := file .Process (ctx , worker .cfg , worker .dbConnPool , workerLogger )
71+ // Check if already processed
72+ isProcessed , err := worker .dbConnPool .IsAlreadyProcessed (ctx , file .Filename )
7573 if err != nil {
76- if err .Error () == "cannot update process_status: already SUCCESS" {
77- // Acknowledge and skip upload
78- if file .KafkaSession != nil && file .KafkaMessage != nil {
79- file .KafkaSession .MarkMessage (file .KafkaMessage , "" )
80- }
81- workerLogger .Info (ctx , "file already processed, skipping upload" , "file-name" , file .Filename )
82- } else {
83- workerLogger .Error (ctx , "could not process file" , "error" , err .Error ())
84- // do not acknowledge, so it can be retried
85- }
86- } else {
87- // Success: upload and acknowledge
88- cloudstorage .UploadDir (ctx , s3Client , file , worker .cfg , workerLogger )
74+ workerLogger .Error (ctx , "error checking process status" , "error" , err .Error ())
75+ // Optionally: do not acknowledge, so it can be retried
76+ return
77+ }
78+ if isProcessed {
79+ workerLogger .Info (ctx , "file already processed, acknowledging and skipping" , "file-name" , file .Filename )
8980 if file .KafkaSession != nil && file .KafkaMessage != nil {
9081 file .KafkaSession .MarkMessage (file .KafkaMessage , "" )
9182 }
92- workerLogger .Info (ctx , "finished file processing" , "file-name" , file .Filename )
83+ return
84+ }
85+
86+ // Not processed: download, process, upload, then acknowledge
87+ cloudstorage .Download (ctx , s3Client , file , worker .cfg , workerLogger )
88+ err = file .Process (ctx , worker .cfg , worker .dbConnPool , workerLogger )
89+ if err != nil {
90+ workerLogger .Error (ctx , "could not process file" , "error" , err .Error ())
91+ // Optionally: do not acknowledge, so it can be retried
92+ return
93+ }
94+
95+ cloudstorage .UploadDir (ctx , s3Client , file , worker .cfg , workerLogger )
96+ if file .KafkaSession != nil && file .KafkaMessage != nil {
97+ file .KafkaSession .MarkMessage (file .KafkaMessage , "" )
9398 }
99+ workerLogger .Info (ctx , "finished file processing" , "file-name" , file .Filename )
94100}
95101
96102// Wait ensures all workers complete processing before the program exits
0 commit comments