4523: update migrate script to use batch size and instance method on collection.
authorRadhika Chippada <radhika@curoverse.com>
Tue, 13 Jan 2015 18:39:29 +0000 (13:39 -0500)
committerRadhika Chippada <radhika@curoverse.com>
Tue, 13 Jan 2015 18:39:29 +0000 (13:39 -0500)
services/api/app/models/collection.rb
services/api/db/migrate/20141208174653_collection_file_names.rb

index d112e09e97d466b1c1052a4826841a865343c8c8..8258d1f53cd5a39495b2a30493492f3a416807c7 100644 (file)
@@ -129,23 +129,23 @@ class Collection < ArvadosModel
 
   def set_file_names
     if self.manifest_text_changed?
-      self.file_names = Collection.manifest_files self.manifest_text
+      self.file_names = manifest_files
     end
     true
   end
 
-  def self.manifest_files manifest_text
+  def manifest_files
     names = ''
-    if manifest_text
-      manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
-        names << name.first.gsub('\040',' ') + "\n" 
+    if self.manifest_text
+      self.manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
+        names << name.first.gsub('\040',' ') + "\n"
         break if names.length > 2**13
       end
     end
 
-    if manifest_text and names.length < 2**13
-      manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
-        names << stream_name.first.gsub('\040',' ') + "\n" 
+    if self.manifest_text and names.length < 2**13
+      self.manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
+        names << stream_name.first.gsub('\040',' ') + "\n"
         break if names.length > 2**13
       end
     end
index 51b474612d64abb960353e7868ee9ba1cd2019b6..fdcd95f2bbd5f1c6ff9bbd09a3931beb786f5dfa 100644 (file)
@@ -5,11 +5,11 @@ class CollectionFileNames < ActiveRecord::Migration
     add_column :collections, :file_names, :string, :limit => 2**13
 
     act_as_system_user do
-      Collection.all.each do |c|
-        if c.manifest_text
-          file_names = Collection.manifest_files c.manifest_text
-          update_sql "UPDATE collections SET file_names = '#{file_names}' WHERE uuid = '#{c.uuid}'"
-        end
+      Collection.find_each(batch_size: 20) do |c|
+        file_names = c.manifest_files
+        update_sql "UPDATE collections
+                    SET file_names = #{ActiveRecord::Base.connection.quote(file_names)}
+                    WHERE uuid = '#{c.uuid}'"
       end
     end
   end