14406: Pass output through collectionFS if it has remote block refs.
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 1 Nov 2018 17:56:13 +0000 (13:56 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 1 Nov 2018 17:56:13 +0000 (13:56 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

services/crunch-run/crunchrun.go

index 27136b45227e01598cf51b0d80ab8d03ab12e4d4..66534b43098eccc4dd6353281b31de268b0ee400 100644 (file)
@@ -1293,6 +1293,17 @@ func (runner *ContainerRunner) CaptureOutput() error {
        if err != nil {
                return err
        }
+       if n := len(regexp.MustCompile(` [0-9a-f]+\+\S*\+R`).FindAllStringIndex(txt, -1)); n > 0 {
+               runner.CrunchLog.Printf("Copying %d data blocks from remote input collections...", n)
+               fs, err := (&arvados.Collection{ManifestText: txt}).FileSystem(runner.client, runner.Kc)
+               if err != nil {
+                       return err
+               }
+               txt, err = fs.MarshalManifest(".")
+               if err != nil {
+                       return err
+               }
+       }
        var resp arvados.Collection
        err = runner.ArvClient.Create("collections", arvadosclient.Dict{
                "ensure_unique_name": true,