15499: Create additional unmodified log collection on finalize!
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Mon, 9 Sep 2019 19:37:32 +0000 (15:37 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Wed, 11 Sep 2019 19:09:34 +0000 (15:09 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

services/api/app/models/container_request.rb
services/api/test/unit/container_request_test.rb

index c412e4b8500c141617b18de64007078f7b715c4d..7aa82335f79de64b424a8b231c0420019abe0a2e 100644 (file)
@@ -153,7 +153,25 @@ class ContainerRequest < ArvadosModel
   # Finalize the container request after the container has
   # finished/cancelled.
   def finalize!
-    update_collections(container: Container.find_by_uuid(container_uuid))
+    container = Container.find_by_uuid(container_uuid)
+    update_collections(container: container)
+
+    log_col = Collection.where(portable_data_hash: container.log).first
+    if log_col
+      # Need to save collection
+      completed_coll = Collection.new(
+        owner_uuid: self.owner_uuid,
+        name: "Container log for container #{container_uuid}",
+        properties: {
+          'type' => 'log',
+          'container_request' => self.uuid,
+          'container_uuid' => container_uuid,
+        },
+        portable_data_hash: log_col.portable_data_hash,
+        manifest_text: log_col.manifest_text)
+      completed_coll.save_with_unique_name!
+    end
+
     update_attributes!(state: Final)
   end
 
@@ -187,6 +205,7 @@ class ContainerRequest < ArvadosModel
       end
 
       if out_type == "log"
+        # Copy the log into a merged collection
         src = Arv::Collection.new(manifest)
         dst = Arv::Collection.new(coll.manifest_text)
         dst.cp_r("./", ".", src)
index 7b75ee5134527c9ab2bf19590b9731bc54d77080..3e681d97c1fbd2a25f75cf898667535a2c60c844 100644 (file)
@@ -852,12 +852,18 @@ class ContainerRequestTest < ActiveSupport::TestCase
 
   def run_container(cr)
     act_as_system_user do
+      logc = Collection.new(owner_uuid: system_user_uuid,
+                            manifest_text: ". ef772b2f28e2c8ca84de45466ed19ee9+7815 0:0:arv-mount.txt\n")
+      logc.save!
+
       c = Container.find_by_uuid(cr.container_uuid)
       c.update_attributes!(state: Container::Locked)
       c.update_attributes!(state: Container::Running)
       c.update_attributes!(state: Container::Complete,
                            exit_code: 0,
-                           output: '1f4b0bc7583c2a7f9102c395f4ffc5e3+45')
+                           output: '1f4b0bc7583c2a7f9102c395f4ffc5e3+45',
+                           log: logc.portable_data_hash)
+      logc.destroy
       c
     end
   end