3036: Assign collection uuid without complaint if not provided by client.
authorTom Clegg <tom@curoverse.com>
Sun, 27 Jul 2014 06:44:55 +0000 (02:44 -0400)
committerTom Clegg <tom@curoverse.com>
Sun, 27 Jul 2014 06:45:31 +0000 (02:45 -0400)
services/api/app/controllers/arvados/v1/collections_controller.rb
services/api/app/models/collection.rb

index 97f004ec4faf876cc1f1298ee49803fb3b601173..a0c64aa6e6adc4ad30dc4094681a45d3ce597ecb 100644 (file)
@@ -63,11 +63,11 @@ class Arvados::V1::CollectionsController < ApplicationController
         @object.save!
       rescue ActiveRecord::RecordNotUnique
         logger.debug resource_attrs.inspect
-        if resource_attrs[:manifest_text] and resource_attrs[:uuid]
+        if @object.manifest_text and @object.uuid
           @existing_object = model_class.
             where('uuid=? and manifest_text=?',
-                  resource_attrs[:uuid],
-                  resource_attrs[:manifest_text]).
+                  @object.uuid,
+                  @object.manifest_text).
             first
           @object = @existing_object || @object
         end
index e9be28b46244a9249c806177cc8d88d606e0a112..623952f3d5d53c158b47a7f6abf0271f50cd9c22 100644 (file)
@@ -30,23 +30,23 @@ class Collection < ArvadosModel
 
   def assign_uuid
     if self.manifest_text.nil? and self.uuid.nil?
-      super
-    elsif self.manifest_text and self.uuid
+      return super
+    elsif not self.manifest_text
+      errors.add :manifest_text, 'not supplied'
+      return false
+    end
+    expect_uuid = Digest::MD5.hexdigest(self.manifest_text)
+    if self.uuid
       self.uuid.gsub! /\+.*/, ''
-      if self.uuid == Digest::MD5.hexdigest(self.manifest_text)
-        self.uuid.gsub! /$/, '+' + self.manifest_text.length.to_s
-        true
-      else
-        errors.add :uuid, 'does not match checksum of manifest_text'
-        false
+      if self.uuid != expect_uuid
+        errors.add :uuid, 'must match checksum of manifest_text'
+        return false
       end
-    elsif self.manifest_text
-      errors.add :uuid, 'not supplied (must match checksum of manifest_text)'
-      false
     else
-      errors.add :manifest_text, 'not supplied'
-      false
+      self.uuid = expect_uuid
     end
+    self.uuid.gsub! /$/, '+' + self.manifest_text.length.to_s
+    true
   end
 
   def data_size
@@ -66,15 +66,6 @@ class Collection < ArvadosModel
       return
     end
 
-    #normalized_manifest = ""
-    #IO.popen(['arv-normalize'], 'w+b') do |io|
-    #  io.write manifest_text
-    #  io.close_write
-    #  while buf = io.read(2**20)
-    #    normalized_manifest += buf
-    #  end
-    #end
-
     @data_size = 0
     tmp = {}