@@ -68,17 +68,33 @@ 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
71+ // Check if already processed
72+ isProcessed , err := worker .dbConnPool .IsAlreadyProcessed (ctx , file .Filename )
73+ if err != nil {
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 )
80+ if file .KafkaSession != nil && file .KafkaMessage != nil {
81+ file .KafkaSession .MarkMessage (file .KafkaMessage , "" )
82+ }
83+ return
84+ }
85+
86+ // Not processed: download, process, upload, then acknowledge
7287 cloudstorage .Download (ctx , s3Client , file , worker .cfg , workerLogger )
73- // process the file
74- err := file .Process (ctx , worker .cfg , worker .dbConnPool , workerLogger )
88+ err = file .Process (ctx , worker .cfg , worker .dbConnPool , workerLogger )
7589 if err != nil {
7690 workerLogger .Error (ctx , "could not process file" , "error" , err .Error ())
91+ // Optionally: do not acknowledge, so it can be retried
92+ return
7793 }
78- // upload the given file to cloud storage
94+
7995 cloudstorage .UploadDir (ctx , s3Client , file , worker .cfg , workerLogger )
8096 if file .KafkaSession != nil && file .KafkaMessage != nil {
81- file .KafkaSession .MarkMessage (file .KafkaMessage , "" ) // Acknowledge the Kafka event and mark as completed
97+ file .KafkaSession .MarkMessage (file .KafkaMessage , "" )
8298 }
8399 workerLogger .Info (ctx , "finished file processing" , "file-name" , file .Filename )
84100}
0 commit comments