Browse Source

Refactored ticket creation and made it thread safe.

Thorsten Eckel 9 years ago
parent
commit
72d830c408
1 changed files with 11 additions and 5 deletions
  1. 11 5
      lib/import/otrs.rb

+ 11 - 5
lib/import/otrs.rb

@@ -542,7 +542,6 @@ module Import::OTRS
         next if !record.key?(key.to_s)
         ticket_new[value] = record[key.to_s]
       }
-      ticket_old = Ticket.where( id: ticket_new[:id] ).first
 
       # find owner
       if ticket_new[:owner]
@@ -568,15 +567,22 @@ module Import::OTRS
         ticket_new[:customer_id] = 1
       end
 
-      # set state types
+      # update or create ticket
+      ticket_old = Ticket.find(ticket_new[:id])
       if ticket_old
         log "update Ticket.find(#{ticket_new[:id]})"
         ticket_old.update_attributes(ticket_new)
       else
         log "add Ticket.find(#{ticket_new[:id]})"
-        ticket = Ticket.new(ticket_new)
-        ticket.id = ticket_new[:id]
-        ticket.save
+
+        begin
+          ticket    = Ticket.new(ticket_new)
+          ticket.id = ticket_new[:id]
+          ticket.save
+        rescue ActiveRecord::RecordNotUnique
+          log "Ticket #{ticket_new[:id]} is handled by another thead, skipping."
+          next
+        end
       end
 
       # utf8 encode