21290: Use update_all to efficiently sync past version records 21290-sync-past-versions
authorPeter Amstutz <peter.amstutz@curii.com>
Wed, 3 Jan 2024 21:43:16 +0000 (16:43 -0500)
committerPeter Amstutz <peter.amstutz@curii.com>
Wed, 3 Jan 2024 21:43:16 +0000 (16:43 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

services/api/app/models/collection.rb

index b4660dbd355de72261d4584977b88533f77f829e..16e85c0dd9af575d93fc1aeda8279e798b60e56c 100644 (file)
@@ -329,17 +329,7 @@ class Collection < ArvadosModel
   end
 
   def sync_past_versions
-    updates = self.syncable_updates
-    Collection.where('current_version_uuid = ? AND uuid != ?', self.uuid_before_last_save, self.uuid_before_last_save).each do |c|
-      c.attributes = updates
-      # Use a different validation context to skip the 'past_versions_cannot_be_updated'
-      # validator, as on this case it is legal to update some fields.
-      leave_modified_by_user_alone do
-        leave_modified_at_alone do
-          c.save(context: :update_old_versions)
-        end
-      end
-    end
+    Collection.where('current_version_uuid = ? AND uuid != ?', self.uuid_before_last_save, self.uuid_before_last_save).update_all self.syncable_updates
   end
 
   def versionable_updates?(attrs)