Merge branch '3021-api-performance' refs #3021
[arvados.git] / services / api / app / models / collection.rb
index 5701a1cafe138bdd4af03c6e534347bc8fe8e052..457fb5f778cb3429d0d19f3104b6142a2a171dfe 100644 (file)
@@ -128,13 +128,31 @@ class Collection < ArvadosModel
   end
 
   def set_file_names
-    if self.manifest_text_changed? and self.manifest_text
-      # set file_names to the first 2^16 bytes of manifest_text
-      self['file_names'] = self[:manifest_text][0,2**16]
+    if self.manifest_text_changed?
+      self.file_names = manifest_files
     end
     true
   end
 
+  def manifest_files
+    names = ''
+    if self.manifest_text
+      self.manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
+        names << name.first.gsub('\040',' ') + "\n"
+        break if names.length > 2**12
+      end
+    end
+
+    if self.manifest_text and names.length < 2**12
+      self.manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
+        names << stream_name.first.gsub('\040',' ') + "\n"
+        break if names.length > 2**12
+      end
+    end
+
+    names[0,2**12]
+  end
+
   def check_encoding
     if manifest_text.encoding.name == 'UTF-8' and manifest_text.valid_encoding?
       true
@@ -278,6 +296,10 @@ class Collection < ArvadosModel
     find_all_for_docker_image(search_term, search_tag, readers).first
   end
 
+  def self.searchable_columns operator
+    super - ["manifest_text"]
+  end
+
   protected
   def portable_manifest_text
     portable_manifest = self[:manifest_text].dup