Merge branch '13198-keep-web-metrics'
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 19 Jul 2018 20:15:47 +0000 (16:15 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 19 Jul 2018 20:15:47 +0000 (16:15 -0400)
refs #13198

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

58 files changed:
README.md
apps/workbench/Gemfile.lock
build/run-library.sh
doc/_includes/_skip_sso_server_install.liquid [deleted file]
doc/install/copy_pipeline_from_curoverse.html.textile.liquid
doc/install/index.html.textile.liquid
doc/install/install-nodemanager.html.textile.liquid
doc/start/getting_started/firstpipeline.html.textile.liquid
doc/user/cwl/cwl-runner.html.textile.liquid
doc/user/topics/arv-copy.html.textile.liquid
doc/user/tutorials/running-external-program.html.textile.liquid
sdk/R/R/Arvados.R
sdk/R/R/ArvadosFile.R
sdk/R/R/Collection.R
sdk/R/R/CollectionTree.R
sdk/R/R/HttpParser.R
sdk/R/R/HttpRequest.R
sdk/R/R/RESTService.R
sdk/R/R/Subcollection.R
sdk/R/R/autoGenAPI.R
sdk/R/tests/testthat/fakes/FakeHttpParser.R
sdk/R/tests/testthat/fakes/FakeHttpRequest.R
sdk/R/tests/testthat/fakes/FakeRESTService.R
sdk/R/tests/testthat/test-ArvadosFile.R
sdk/R/tests/testthat/test-Collection.R
sdk/R/tests/testthat/test-CollectionTree.R
sdk/R/tests/testthat/test-HttpParser.R
sdk/R/tests/testthat/test-HttpRequest.R
sdk/R/tests/testthat/test-RESTService.R
sdk/R/tests/testthat/test-Subcollection.R
sdk/R/tests/testthat/test-util.R
sdk/cli/arvados-cli.gemspec
services/api/Gemfile
services/api/Gemfile.lock
services/api/config/initializers/oj_mimic_json.rb [new file with mode: 0644]
services/api/config/initializers/time_format.rb
services/api/lib/safe_json.rb
services/api/test/test_helper.rb
services/crunch-dispatch-slurm/crunch-dispatch-slurm_test.go
services/crunch-dispatch-slurm/squeue.go
services/crunch-dispatch-slurm/squeue_test.go
services/keepproxy/keepproxy_test.go
services/nodemanager/arvnodeman/computenode/dispatch/__init__.py
services/nodemanager/arvnodeman/computenode/driver/__init__.py
services/nodemanager/arvnodeman/computenode/driver/azure.py
services/nodemanager/arvnodeman/computenode/driver/dummy.py
services/nodemanager/arvnodeman/computenode/driver/ec2.py
services/nodemanager/arvnodeman/computenode/driver/gce.py
services/nodemanager/arvnodeman/config.py
services/nodemanager/arvnodeman/daemon.py
services/nodemanager/arvnodeman/jobqueue.py
services/nodemanager/arvnodeman/launcher.py
services/nodemanager/doc/azure.example.cfg
services/nodemanager/doc/ec2.example.cfg
services/nodemanager/doc/gce.example.cfg
services/nodemanager/tests/integration_test.py
services/nodemanager/tests/test_computenode_dispatch.py
services/nodemanager/tests/test_daemon.py

index c480ffda4cca9c5141e954c75bbc41c35fd67b67..12fdd219fc698226033e0283baec5a7ad087e920 100644 (file)
--- a/README.md
+++ b/README.md
@@ -19,9 +19,7 @@ Arvados consists of:
 
 ## Quick start
 
-Curoverse maintains an Arvados public cloud demo at
-[https://cloud.curoverse.com](https://cloud.curoverse.com).  A Google account
-is required to log in.
+Veritas Genetics maintains a public installation of Arvados for evaluation and trial use, the [Arvados Playground](https://playground.arvados.org). A Google account is required to log in.
 
 To try out Arvados on your local workstation, you can use Arvbox, which
 provides Arvados components pre-installed in a Docker container (requires
index 9c4cd678b0cf9aa38a110a32e1223586dceb0afb..06460ad06c1487d1d0c2e08978f36c644de95624 100644 (file)
@@ -186,7 +186,7 @@ GEM
       mini_portile2 (~> 2.3.0)
     npm-rails (0.2.1)
       rails (>= 3.2)
-    oj (3.5.0)
+    oj (3.6.4)
     os (0.9.6)
     passenger (5.2.1)
       rack
@@ -358,4 +358,4 @@ DEPENDENCIES
   wiselinks
 
 BUNDLED WITH
-   1.16.1
+   1.16.2
index 4b18d037b6b30655714ed174fad84b665ebe7f9f..c5a73cbe35a6116fdbed0b8f364f2af4f0e83df5 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -xe
 # Copyright (C) The Arvados Authors. All rights reserved.
 #
 # SPDX-License-Identifier: AGPL-3.0
@@ -310,6 +310,7 @@ handle_rails_package() {
     cd "$srcdir"
     local license_path="$1"; shift
     local version="$(version_from_git)"
+    echo "$version" >package-build.version
     local scripts_dir="$(mktemp --tmpdir -d "$pkgname-XXXXXXXX.scripts")" && \
     (
         set -e
diff --git a/doc/_includes/_skip_sso_server_install.liquid b/doc/_includes/_skip_sso_server_install.liquid
deleted file mode 100644 (file)
index eafa4cc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{% comment %}
-Copyright (C) The Arvados Authors. All rights reserved.
-
-SPDX-License-Identifier: CC-BY-SA-3.0
-{% endcomment %}
-
-<div class="alert alert-block alert-info">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <h4>Note!</h4>
-  <p>The SSO server codebase currently uses OpenID 2.0 to talk to Google's authentication service. Google <a href="https://developers.google.com/accounts/docs/OpenID2">has deprecated that protocol</a>. This means that new clients will not be allowed to talk to Google's authentication services anymore over OpenID 2.0, and they will phase out the use of OpenID 2.0 completely in the coming monts. We are working on upgrading the SSO server codebase to a newer protocol. That work should be complete by the end of November 2014. In the mean time, anyone is free to use the existing Curoverse SSO server for any local Arvados installation. Instructions to do so are provided on the "API server":install-api-server.html page.</p>
-  <p><strong>Recommendation: skip this step</strong></p>
-</div>
index 4961a05b56f025fc18d58f3b8ce95ee977285d58..fa497c93de484e1a5ab094d2914cf802ffb6c6bd 100644 (file)
@@ -1,7 +1,7 @@
 ---
 layout: default
 navsection: installguide
-title: Copy pipeline from Curoverse cloud
+title: Copy pipeline from the Arvados Playground
 ...
 {% comment %}
 Copyright (C) The Arvados Authors. All rights reserved.
@@ -9,27 +9,27 @@ Copyright (C) The Arvados Authors. All rights reserved.
 SPDX-License-Identifier: CC-BY-SA-3.0
 {% endcomment %}
 
-This tutorial describes how to find and copy a publicly shared pipeline from Curoverse cloud. Please note that you can use similar steps to copy any template you can access from Curoverse cloud to your cluster.
+This tutorial describes how to find and copy a publicly shared pipeline from the Arvados Playground. Please note that you can use similar steps to copy any template you can access from the Arvados Playground to your cluster.
 
-h3. Access a public pipeline in Curoverse cloud using Workbench
+h3. Access a public pipeline in the Arvados Playground using Workbench
 
-Curoverse cloud provides access to some public data, which can be used to experience Arvados in action. Let's access a public pipeline and copy it to your cluster, so that you can run it in your environment.
+the Arvados Playground provides access to some public data, which can be used to experience Arvados in action. Let's access a public pipeline and copy it to your cluster, so that you can run it in your environment.
 
-Start by visiting the "*Curoverse public projects page*":https://cloud.curoverse.com/projects/public. This page lists all the publicly accessible projects in this arvados installation. Click on one of these projects to open it. We will use "*lobSTR v.3 (Public)*":https://cloud.curoverse.com/projects/qr1hi-j7d0g-up6qgpqz5ie2vfq as the example in this tutorial.
+Start by visiting the "*Arvados Playground public projects page*":https://playground.arvados.org/projects/public. This page lists all the publicly accessible projects in this arvados installation. Click on one of these projects to open it. We will use "*lobSTR v.3 (Public)*":https://playground.arvados.org/projects/qr1hi-j7d0g-up6qgpqz5ie2vfq as the example in this tutorial.
 
-Once in the "*lobSTR v.3 (Public)*":https://cloud.curoverse.com/projects/qr1hi-j7d0g-up6qgpqz5ie2vfq project, click on the *Pipeline templates* tab. In the pipeline templates tab, you will see a template named *lobSTR v.3*. Click on the <span class="fa fa-lg fa-gears"></span> *Show* button to the left of this name. This will take to you to the "*lobSTR v.3*":https://cloud.curoverse.com/pipeline_templates/qr1hi-p5p6p-9pkaxt6qjnkxhhu template page.
+Once in the "*lobSTR v.3 (Public)*":https://playground.arvados.org/projects/qr1hi-j7d0g-up6qgpqz5ie2vfq project, click on the *Pipeline templates* tab. In the pipeline templates tab, you will see a template named *lobSTR v.3*. Click on the <span class="fa fa-lg fa-gears"></span> *Show* button to the left of this name. This will take to you to the "*lobSTR v.3*":https://playground.arvados.org/pipeline_templates/qr1hi-p5p6p-9pkaxt6qjnkxhhu template page.
 
 Once in this page, you can take the *uuid* of this template from the address bar, which is *qr1hi-p5p6p-9pkaxt6qjnkxhhu*. Next, we will copy this template to your Arvados instance.
 
-h3. Copying a pipeline template from Curoverse cloud to your cluster
+h3. Copying a pipeline template from the Arvados Playground to your cluster
 
-As described above, navigate to the publicly shared pipeline template "*lobSTR v.3*":https://cloud.curoverse.com/pipeline_templates/qr1hi-p5p6p-9pkaxt6qjnkxhhu using Curoverse Workbench.  We will now copy this template with uuid *qr1hi-p5p6p-9pkaxt6qjnkxhhu* to your cluster.
+As described above, navigate to the publicly shared pipeline template "*lobSTR v.3*":https://playground.arvados.org/pipeline_templates/qr1hi-p5p6p-9pkaxt6qjnkxhhu on the Arvados Playground.  We will now copy this template with uuid *qr1hi-p5p6p-9pkaxt6qjnkxhhu* to your cluster.
 
 {% include 'tutorial_expectations' %}
 
 We will use the Arvados *arv-copy* command to copy this template to your cluster. In order to use arv-copy, first you need to setup the source and destination cluster configuration files. Here, *qr1hi* would be the source cluster and your Arvados instance would be the *dst_cluster*.
 
-During this setup, if you have an account in Curoverse cloud, you can use "your access token":#using-your-token to create the source configuration file. If you do not have an account in Curoverse cloud, you can use the "anonymous access token":#using-anonymous-token for the source cluster configuration.
+During this setup, if you have an account in the Arvados Playground, you can use "your access token":#using-your-token to create the source configuration file. If you do not have an account in the Arvados Playground, you can use the "anonymous access token":#using-anonymous-token for the source cluster configuration.
 
 h4(#using-anonymous-token). *Configuring source and destination setup files using anonymous access token*
 
@@ -53,7 +53,7 @@ You can now copy the pipeline template from *qr1hi* to *your cluster*. Replace *
 
 h4(#using-your-token). *Configuring source and destination setup files using personal access token*
 
-If you already have an account in Curoverse cloud, you can follow the instructions in the "*Using arv-copy*":http://doc.arvados.org/user/topics/arv-copy.html user guide to get your *Current token* for source and destination clusters, and use them to create the source *qr1hi.conf* and dst_cluster.conf configuration files.
+If you already have an account in the Arvados Playground, you can follow the instructions in the "*Using arv-copy*":http://doc.arvados.org/user/topics/arv-copy.html user guide to get your *Current token* for source and destination clusters, and use them to create the source *qr1hi.conf* and dst_cluster.conf configuration files.
 
 You can now copy the pipeline template from *qr1hi* to *your cluster* with or without recursion. Replace *dst_cluster* with the *uuid_prefix* of your cluster.
 
index 216810de47174a32d5e913c5faebda29ee90a8b8..c31b2ed43c89b92b5ef8c5c15c8abdd4dd185cbe 100644 (file)
@@ -20,8 +20,8 @@ table(table table-bordered table-condensed).
 |"Arvados-in-a-box":arvbox.html (arvbox)|Easy|no|yes|no|yes|yes|
 |"Arvados on Kubernetes":arvados-on-kubernetes.html|Easy ^1^|yes|yes ^2^|no ^2^|no|yes|
 |"Manual installation":install-manual-prerequisites.html|Complicated|yes|yes|yes|no|no|
-|"Cloud demo":https://cloud.curoverse.com by Veritas Genetics|N/A ^3^|yes|yes|no|no|no|
-|"Cluster Operation Subscription":https://curoverse.com/products by Veritas Genetics|N/A ^3^|yes|yes|yes|yes|yes|
+|"Arvados Playground":https://playground.arvados.org hosted by Veritas Genetics|N/A ^3^|yes|yes|no|no|no|
+|"Cluster Operation Subscription":https://curoverse.com/products supported by Veritas Genetics|N/A ^3^|yes|yes|yes|yes|yes|
 </div>
 
 * ^1^ Assumes a Kubernetes cluster is available
index 5e1b1aec5a3b796b8785eef1cab221382788e063..defec2589e82a3f32266f39e500c54401ee57683 100644 (file)
@@ -113,6 +113,15 @@ boot_fail_after = 1800
 # an Arvados node that hasn't been updated for this long.
 node_stale_after = 14400
 
+# Number of consecutive times a node must report as "idle" before it
+# will be considered eligible for shutdown.  Node status is checked
+# each poll period, and node can go idle at any point during a poll
+# period (meaning a node could be reported as idle that has only been
+# idle for 1 second).  With a 60 second poll period, three consecutive
+# status updates of "idle" suggests the node has been idle at least
+# 121 seconds.
+consecutive_idle_count = 3
+
 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
 # variable discrepancy between the advertised RAM value on cloud nodes and the
 # actual amount available.
@@ -282,6 +291,15 @@ poll_stale_after = 600
 # an Arvados node that hasn't been updated for this long.
 node_stale_after = 14400
 
+# Number of consecutive times a node must report as "idle" before it
+# will be considered eligible for shutdown.  Node status is checked
+# each poll period, and node can go idle at any point during a poll
+# period (meaning a node could be reported as idle that has only been
+# idle for 1 second).  With a 60 second poll period, three consecutive
+# status updates of "idle" suggests the node has been idle at least
+# 121 seconds.
+consecutive_idle_count = 3
+
 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
 # variable discrepancy between the advertised RAM value on cloud nodes and the
 # actual amount available.
@@ -470,6 +488,15 @@ boot_fail_after = 1800
 # an Arvados node that hasn't been updated for this long.
 node_stale_after = 14400
 
+# Number of consecutive times a node must report as "idle" before it
+# will be considered eligible for shutdown.  Node status is checked
+# each poll period, and node can go idle at any point during a poll
+# period (meaning a node could be reported as idle that has only been
+# idle for 1 second).  With a 60 second poll period, three consecutive
+# status updates of "idle" suggests the node has been idle at least
+# 121 seconds.
+consecutive_idle_count = 3
+
 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
 # variable discrepancy between the advertised RAM value on cloud nodes and the
 # actual amount available.
index 53adcd5c1c727ac56ccf771755ef5feea9d6bcef..43369a3bbfc230f3bf95a55923211dc24566c606 100644 (file)
@@ -11,7 +11,7 @@ SPDX-License-Identifier: CC-BY-SA-3.0
 
 h2. LobSTR v3 
 
-In this quickstart guide, we'll run an existing pipeline with pre-existing data. Step-by-step instructions are shown below. You can follow along using your own local install or by using Curoverse's <a href="http://lp.curoverse.com/beta-signup/">hosted version of Arvados</a> (in public beta, any Google account can be used to login).
+In this quickstart guide, we'll run an existing pipeline with pre-existing data. Step-by-step instructions are shown below. You can follow along using your own local install or by using the <a href="https://playground.arvados.org/">Arvados Playground</a> (any Google account can be used to log in).
 
 (For more information about this pipeline, see our <a href="https://dev.arvados.org/projects/arvados/wiki/LobSTR_tutorial">detailed lobSTR guide</a>).
 
index 2319b3cb81f8a85046be6d103fc92efe8ac0b1d8..ad5d3bd83643e6d9134dbfddddfdf2209be66140 100644 (file)
@@ -33,7 +33,7 @@ The tutorial files are located in the "documentation section of the Arvados sour
 </code></pre>
 </notextile>
 
-The tutorial data is hosted on "https://cloud.curoverse.com":https://cloud.curoverse.com (also referred to by the identifier *qr1hi*).  If you are using a different Arvados instance, you may need to copy the data to your own instance.  The easiest way to do this is with "arv-copy":{{site.baseurl}}/user/topics/arv-copy.html (this requires signing up for a free cloud.curoverse.com account).
+The tutorial data is hosted on "https://playground.arvados.org":https://playground.arvados.org (also referred to by the identifier *qr1hi*).  If you are using a different Arvados instance, you may need to copy the data to your own instance.  The easiest way to do this is with "arv-copy":{{site.baseurl}}/user/topics/arv-copy.html (this requires signing up for a free playground.arvados.org account).
 
 <notextile>
 <pre><code>~$ <span class="userinput">arv-copy --src qr1hi --dst settings 2463fa9efeb75e099685528b3b9071e0+438</span>
@@ -42,13 +42,13 @@ The tutorial data is hosted on "https://cloud.curoverse.com":https://cloud.curov
 </code></pre>
 </notextile>
 
-If you do not wish to create an account on "https://cloud.curoverse.com":https://cloud.curoverse.com, you may download the files anonymously and upload them to your local Arvados instance:
+If you do not wish to create an account on "https://playground.arvados.org":https://playground.arvados.org, you may download the files anonymously and upload them to your local Arvados instance:
 
-"https://cloud.curoverse.com/collections/2463fa9efeb75e099685528b3b9071e0+438":https://cloud.curoverse.com/collections/2463fa9efeb75e099685528b3b9071e0+438
+"https://playground.arvados.org/collections/2463fa9efeb75e099685528b3b9071e0+438":https://playground.arvados.org/collections/2463fa9efeb75e099685528b3b9071e0+438
 
-"https://cloud.curoverse.com/collections/ae480c5099b81e17267b7445e35b4bc7+180":https://cloud.curoverse.com/collections/ae480c5099b81e17267b7445e35b4bc7+180
+"https://playground.arvados.org/collections/ae480c5099b81e17267b7445e35b4bc7+180":https://playground.arvados.org/collections/ae480c5099b81e17267b7445e35b4bc7+180
 
-"https://cloud.curoverse.com/collections/655c6cd07550151b210961ed1d3852cf+57":https://cloud.curoverse.com/collections/655c6cd07550151b210961ed1d3852cf+57
+"https://playground.arvados.org/collections/655c6cd07550151b210961ed1d3852cf+57":https://playground.arvados.org/collections/655c6cd07550151b210961ed1d3852cf+57
 
 h2. Submitting a workflow to an Arvados cluster
 
index 74868bcab4a0b76d44cbd43eee0c2c89d73b0311..f1adfe28545fe235ddd64e0eed882c7a84966e88 100644 (file)
@@ -21,7 +21,7 @@ h2. arv-copy
 
 @arv-copy@ allows users to copy collections and pipeline templates from one cluster to another. By default, @arv-copy@ will recursively go through a template and copy all dependencies associated with the object.
 
-For example, let's copy from the <a href="https://cloud.curoverse.com/">cloud instance *qr1hi*</a> to *dst_cluster*. The names *qr1hi* and *dst_cluster* are interchangable with any cluster name. You can find the cluster name from the prefix of the uuid of the object you want to copy. For example, in *qr1hi*-4zz18-tci4vn4fa95w0zx, the cluster name is qr1hi.
+For example, let's copy from the <a href="https://playground.arvados.org/">Arvados playground</a>, also known as *qr1hi*, to *dst_cluster*. The names *qr1hi* and *dst_cluster* are interchangable with any cluster name. You can find the cluster name from the prefix of the uuid of the object you want to copy. For example, in *qr1hi*-4zz18-tci4vn4fa95w0zx, the cluster name is qr1hi.
 
 In order to communicate with both clusters, you must create custom configuration files for each cluster. In the Arvados Workbench, click on the dropdown menu icon <span class="fa fa-lg fa-user"></span> <span class="caret"></span> in the upper right corner of the top navigation menu to access the user settings menu, and click on the menu item *Current token*. Copy the @ARVADOS_API_HOST@ and @ARVADOS_API_TOKEN@ in both of your clusters. Then, create two configuration files, one for each cluster. The names of the files must have the format of *uuid_prefix.conf*. In our example, let's make two files, one for *qr1hi* and one for *dst_cluster*. From your *Current token* page in *qr1hi* and *dst_cluster*, copy the @ARVADOS_API_HOST@ and @ARVADOS_API_TOKEN@.
 
@@ -44,7 +44,7 @@ h3. How to copy a collection
 
 First, select the uuid of the collection you want to copy from the source cluster. The uuid can be found in the collection display page in the collection summary area (top left box), or from the URL bar (the part after @collections/...@)
 
-Now copy the collection from *qr1hi* to *dst_cluster*. We will use the uuid @qr1hi-4zz18-tci4vn4fa95w0zx@ as an example. You can find this collection in the <a href="https://cloud.curoverse.com/collections/qr1hi-4zz18-tci4vn4fa95w0zx">lobSTR v.3 project on cloud.curoverse.com</a>.
+Now copy the collection from *qr1hi* to *dst_cluster*. We will use the uuid @qr1hi-4zz18-tci4vn4fa95w0zx@ as an example. You can find this collection in the <a href="https://playground.arvados.org/collections/qr1hi-4zz18-tci4vn4fa95w0zx">lobSTR v.3 project on playground.arvados.org</a>.
 <notextile>
 <pre><code>~$ <span class="userinput">arv-copy --src qr1hi --dst dst_cluster qr1hi-4zz18-tci4vn4fa95w0zx</span>
 qr1hi-4zz18-tci4vn4fa95w0zx: 6.1M / 6.1M 100.0%
index bcbf148e5d66014ff0e519b810d9433981f97d92..a4e58b84be12b29f8f2950a1098d7490910696f6 100644 (file)
@@ -56,7 +56,7 @@ See the "run-command reference":{{site.baseurl}}/user/topics/run-command.html fo
 <pre><code>~$ <span class="userinput">git rev-parse HEAD</span></code></pre>
 </notextile>
 
-* @"docker_image"@ : The docker image hash used is found on the "Collection page":https://cloud.curoverse.com/collections/qr1hi-4zz18-dov6im679g3jr1n as the *Content address*.
+* @"docker_image"@ : The docker image hash used is found on the "Collection page":https://playground.arvados.org/collections/qr1hi-4zz18-dov6im679g3jr1n as the *Content address*.
 
 h2. Running your pipeline
 
@@ -82,4 +82,4 @@ Note: Job reuse can only happen if all input collections do not change.
 <pre><code>~$ <span class="userinput">git rev-parse HEAD</span></code></pre>
 </notextile>
 
-* @"docker_image"@ : This specifies the "Docker":https://www.docker.com/ runtime environment where jobs run their scripts. Docker version control is similar to git, and you can commit and push changes to your images. You must re-use the docker image hash from the previous run to use the same image. It can be found on the "Collection page":https://cloud.curoverse.com/collections/qr1hi-4zz18-dov6im679g3jr1n as the *Content address* or the *docker_image_locator* in a job's metadata.
+* @"docker_image"@ : This specifies the "Docker":https://www.docker.com/ runtime environment where jobs run their scripts. Docker version control is similar to git, and you can commit and push changes to your images. You must re-use the docker image hash from the previous run to use the same image. It can be found on the "Collection page":https://playground.arvados.org/collections/qr1hi-4zz18-dov6im679g3jr1n as the *Content address* or the *docker_image_locator* in a job's metadata.
index 0ec2d115295749067ceb4ee105245aad73df149f..4b65546912393b52b4e05a4d1ecd21b83f44bd28 100644 (file)
@@ -3,9 +3,9 @@
 # SPDX-License-Identifier: Apache-2.0
 
 #' users.get
-#' 
+#'
 #' users.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.get(uuid)
 #' @param uuid The UUID of the User in question.
 #' @return User object.
@@ -13,9 +13,9 @@
 NULL
 
 #' users.create
-#' 
+#'
 #' users.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.create(user, ensure_unique_name = "false")
 #' @param user User object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -24,9 +24,9 @@ NULL
 NULL
 
 #' users.update
-#' 
+#'
 #' users.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.update(user, uuid)
 #' @param user User object.
 #' @param uuid The UUID of the User in question.
@@ -35,9 +35,9 @@ NULL
 NULL
 
 #' users.delete
-#' 
+#'
 #' users.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.delete(uuid)
 #' @param uuid The UUID of the User in question.
 #' @return User object.
@@ -45,93 +45,93 @@ NULL
 NULL
 
 #' users.current
-#' 
+#'
 #' users.current is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.current(NULL)
 #' @return User object.
 #' @name users.current
 NULL
 
 #' users.system
-#' 
+#'
 #' users.system is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.system(NULL)
 #' @return User object.
 #' @name users.system
 NULL
 
 #' users.activate
-#' 
+#'
 #' users.activate is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.activate(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return User object.
 #' @name users.activate
 NULL
 
 #' users.setup
-#' 
+#'
 #' users.setup is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.setup(user = NULL, openid_prefix = NULL,
 #'     repo_name = NULL, vm_uuid = NULL, send_notification_email = "false")
-#' @param user 
-#' @param openid_prefix 
-#' @param repo_name 
-#' @param vm_uuid 
-#' @param send_notification_email 
+#' @param user
+#' @param openid_prefix
+#' @param repo_name
+#' @param vm_uuid
+#' @param send_notification_email
 #' @return User object.
 #' @name users.setup
 NULL
 
 #' users.unsetup
-#' 
+#'
 #' users.unsetup is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.unsetup(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return User object.
 #' @name users.unsetup
 NULL
 
 #' users.update_uuid
-#' 
+#'
 #' users.update_uuid is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.update_uuid(uuid, new_uuid)
-#' @param uuid 
-#' @param new_uuid 
+#' @param uuid
+#' @param new_uuid
 #' @return User object.
 #' @name users.update_uuid
 NULL
 
 #' users.list
-#' 
+#'
 #' users.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return UserList object.
 #' @name users.list
 NULL
 
 #' api_client_authorizations.get
-#' 
+#'
 #' api_client_authorizations.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.get(uuid)
 #' @param uuid The UUID of the ApiClientAuthorization in question.
 #' @return ApiClientAuthorization object.
@@ -139,9 +139,9 @@ NULL
 NULL
 
 #' api_client_authorizations.create
-#' 
+#'
 #' api_client_authorizations.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.create(apiclientauthorization,
 #'     ensure_unique_name = "false")
 #' @param apiClientAuthorization ApiClientAuthorization object.
@@ -151,9 +151,9 @@ NULL
 NULL
 
 #' api_client_authorizations.update
-#' 
+#'
 #' api_client_authorizations.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.update(apiclientauthorization,
 #'     uuid)
 #' @param apiClientAuthorization ApiClientAuthorization object.
@@ -163,9 +163,9 @@ NULL
 NULL
 
 #' api_client_authorizations.delete
-#' 
+#'
 #' api_client_authorizations.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.delete(uuid)
 #' @param uuid The UUID of the ApiClientAuthorization in question.
 #' @return ApiClientAuthorization object.
@@ -173,50 +173,50 @@ NULL
 NULL
 
 #' api_client_authorizations.create_system_auth
-#' 
+#'
 #' api_client_authorizations.create_system_auth is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.create_system_auth(api_client_id = NULL,
 #'     scopes = NULL)
-#' @param api_client_id 
-#' @param scopes 
+#' @param api_client_id
+#' @param scopes
 #' @return ApiClientAuthorization object.
 #' @name api_client_authorizations.create_system_auth
 NULL
 
 #' api_client_authorizations.current
-#' 
+#'
 #' api_client_authorizations.current is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.current(NULL)
 #' @return ApiClientAuthorization object.
 #' @name api_client_authorizations.current
 NULL
 
 #' api_client_authorizations.list
-#' 
+#'
 #' api_client_authorizations.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_client_authorizations.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return ApiClientAuthorizationList object.
 #' @name api_client_authorizations.list
 NULL
 
 #' containers.get
-#' 
+#'
 #' containers.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.get(uuid)
 #' @param uuid The UUID of the Container in question.
 #' @return Container object.
@@ -224,9 +224,9 @@ NULL
 NULL
 
 #' containers.create
-#' 
+#'
 #' containers.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.create(container,
 #'     ensure_unique_name = "false")
 #' @param container Container object.
@@ -236,9 +236,9 @@ NULL
 NULL
 
 #' containers.update
-#' 
+#'
 #' containers.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.update(container,
 #'     uuid)
 #' @param container Container object.
@@ -248,9 +248,9 @@ NULL
 NULL
 
 #' containers.delete
-#' 
+#'
 #' containers.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.delete(uuid)
 #' @param uuid The UUID of the Container in question.
 #' @return Container object.
@@ -258,78 +258,78 @@ NULL
 NULL
 
 #' containers.auth
-#' 
+#'
 #' containers.auth is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.auth(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Container object.
 #' @name containers.auth
 NULL
 
 #' containers.lock
-#' 
+#'
 #' containers.lock is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.lock(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Container object.
 #' @name containers.lock
 NULL
 
 #' containers.unlock
-#' 
+#'
 #' containers.unlock is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.unlock(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Container object.
 #' @name containers.unlock
 NULL
 
 #' containers.secret_mounts
-#' 
+#'
 #' containers.secret_mounts is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.secret_mounts(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Container object.
 #' @name containers.secret_mounts
 NULL
 
 #' containers.current
-#' 
+#'
 #' containers.current is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.current(NULL)
 #' @return Container object.
 #' @name containers.current
 NULL
 
 #' containers.list
-#' 
+#'
 #' containers.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return ContainerList object.
 #' @name containers.list
 NULL
 
 #' api_clients.get
-#' 
+#'
 #' api_clients.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_clients.get(uuid)
 #' @param uuid The UUID of the ApiClient in question.
 #' @return ApiClient object.
@@ -337,9 +337,9 @@ NULL
 NULL
 
 #' api_clients.create
-#' 
+#'
 #' api_clients.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_clients.create(apiclient,
 #'     ensure_unique_name = "false")
 #' @param apiClient ApiClient object.
@@ -349,9 +349,9 @@ NULL
 NULL
 
 #' api_clients.update
-#' 
+#'
 #' api_clients.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_clients.update(apiclient,
 #'     uuid)
 #' @param apiClient ApiClient object.
@@ -361,9 +361,9 @@ NULL
 NULL
 
 #' api_clients.delete
-#' 
+#'
 #' api_clients.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_clients.delete(uuid)
 #' @param uuid The UUID of the ApiClient in question.
 #' @return ApiClient object.
@@ -371,29 +371,29 @@ NULL
 NULL
 
 #' api_clients.list
-#' 
+#'
 #' api_clients.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_clients.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return ApiClientList object.
 #' @name api_clients.list
 NULL
 
 #' authorized_keys.get
-#' 
+#'
 #' authorized_keys.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.get(uuid)
 #' @param uuid The UUID of the AuthorizedKey in question.
 #' @return AuthorizedKey object.
@@ -401,9 +401,9 @@ NULL
 NULL
 
 #' authorized_keys.create
-#' 
+#'
 #' authorized_keys.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.create(authorizedkey,
 #'     ensure_unique_name = "false")
 #' @param authorizedKey AuthorizedKey object.
@@ -413,9 +413,9 @@ NULL
 NULL
 
 #' authorized_keys.update
-#' 
+#'
 #' authorized_keys.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.update(authorizedkey,
 #'     uuid)
 #' @param authorizedKey AuthorizedKey object.
@@ -425,9 +425,9 @@ NULL
 NULL
 
 #' authorized_keys.delete
-#' 
+#'
 #' authorized_keys.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.delete(uuid)
 #' @param uuid The UUID of the AuthorizedKey in question.
 #' @return AuthorizedKey object.
@@ -435,29 +435,29 @@ NULL
 NULL
 
 #' authorized_keys.list
-#' 
+#'
 #' authorized_keys.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return AuthorizedKeyList object.
 #' @name authorized_keys.list
 NULL
 
 #' container_requests.get
-#' 
+#'
 #' container_requests.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$container_requests.get(uuid)
 #' @param uuid The UUID of the ContainerRequest in question.
 #' @return ContainerRequest object.
@@ -465,9 +465,9 @@ NULL
 NULL
 
 #' container_requests.create
-#' 
+#'
 #' container_requests.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$container_requests.create(containerrequest,
 #'     ensure_unique_name = "false")
 #' @param containerRequest ContainerRequest object.
@@ -477,9 +477,9 @@ NULL
 NULL
 
 #' container_requests.update
-#' 
+#'
 #' container_requests.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$container_requests.update(containerrequest,
 #'     uuid)
 #' @param containerRequest ContainerRequest object.
@@ -489,9 +489,9 @@ NULL
 NULL
 
 #' container_requests.delete
-#' 
+#'
 #' container_requests.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$container_requests.delete(uuid)
 #' @param uuid The UUID of the ContainerRequest in question.
 #' @return ContainerRequest object.
@@ -499,29 +499,29 @@ NULL
 NULL
 
 #' container_requests.list
-#' 
+#'
 #' container_requests.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$container_requests.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return ContainerRequestList object.
 #' @name container_requests.list
 NULL
 
 #' collections.get
-#' 
+#'
 #' collections.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.get(uuid)
 #' @param uuid The UUID of the Collection in question.
 #' @return Collection object.
@@ -529,9 +529,9 @@ NULL
 NULL
 
 #' collections.create
-#' 
+#'
 #' collections.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.create(collection,
 #'     ensure_unique_name = "false")
 #' @param collection Collection object.
@@ -541,9 +541,9 @@ NULL
 NULL
 
 #' collections.update
-#' 
+#'
 #' collections.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.update(collection,
 #'     uuid)
 #' @param collection Collection object.
@@ -553,9 +553,9 @@ NULL
 NULL
 
 #' collections.delete
-#' 
+#'
 #' collections.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.delete(uuid)
 #' @param uuid The UUID of the Collection in question.
 #' @return Collection object.
@@ -563,70 +563,70 @@ NULL
 NULL
 
 #' collections.provenance
-#' 
+#'
 #' collections.provenance is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.provenance(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Collection object.
 #' @name collections.provenance
 NULL
 
 #' collections.used_by
-#' 
+#'
 #' collections.used_by is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.used_by(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Collection object.
 #' @name collections.used_by
 NULL
 
 #' collections.trash
-#' 
+#'
 #' collections.trash is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.trash(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Collection object.
 #' @name collections.trash
 NULL
 
 #' collections.untrash
-#' 
+#'
 #' collections.untrash is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.untrash(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Collection object.
 #' @name collections.untrash
 NULL
 
 #' collections.list
-#' 
+#'
 #' collections.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact", include_trash = NULL)
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @param include_trash Include collections whose is_trashed attribute is true.
 #' @return CollectionList object.
 #' @name collections.list
 NULL
 
 #' humans.get
-#' 
+#'
 #' humans.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$humans.get(uuid)
 #' @param uuid The UUID of the Human in question.
 #' @return Human object.
@@ -634,9 +634,9 @@ NULL
 NULL
 
 #' humans.create
-#' 
+#'
 #' humans.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$humans.create(human, ensure_unique_name = "false")
 #' @param human Human object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -645,9 +645,9 @@ NULL
 NULL
 
 #' humans.update
-#' 
+#'
 #' humans.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$humans.update(human, uuid)
 #' @param human Human object.
 #' @param uuid The UUID of the Human in question.
@@ -656,9 +656,9 @@ NULL
 NULL
 
 #' humans.delete
-#' 
+#'
 #' humans.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$humans.delete(uuid)
 #' @param uuid The UUID of the Human in question.
 #' @return Human object.
@@ -666,29 +666,29 @@ NULL
 NULL
 
 #' humans.list
-#' 
+#'
 #' humans.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$humans.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return HumanList object.
 #' @name humans.list
 NULL
 
 #' job_tasks.get
-#' 
+#'
 #' job_tasks.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$job_tasks.get(uuid)
 #' @param uuid The UUID of the JobTask in question.
 #' @return JobTask object.
@@ -696,9 +696,9 @@ NULL
 NULL
 
 #' job_tasks.create
-#' 
+#'
 #' job_tasks.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$job_tasks.create(jobtask, ensure_unique_name = "false")
 #' @param jobTask JobTask object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -707,9 +707,9 @@ NULL
 NULL
 
 #' job_tasks.update
-#' 
+#'
 #' job_tasks.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$job_tasks.update(jobtask, uuid)
 #' @param jobTask JobTask object.
 #' @param uuid The UUID of the JobTask in question.
@@ -718,9 +718,9 @@ NULL
 NULL
 
 #' job_tasks.delete
-#' 
+#'
 #' job_tasks.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$job_tasks.delete(uuid)
 #' @param uuid The UUID of the JobTask in question.
 #' @return JobTask object.
@@ -728,29 +728,29 @@ NULL
 NULL
 
 #' job_tasks.list
-#' 
+#'
 #' job_tasks.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$job_tasks.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return JobTaskList object.
 #' @name job_tasks.list
 NULL
 
 #' links.get
-#' 
+#'
 #' links.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.get(uuid)
 #' @param uuid The UUID of the Link in question.
 #' @return Link object.
@@ -758,9 +758,9 @@ NULL
 NULL
 
 #' links.create
-#' 
+#'
 #' links.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.create(link, ensure_unique_name = "false")
 #' @param link Link object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -769,9 +769,9 @@ NULL
 NULL
 
 #' links.update
-#' 
+#'
 #' links.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.update(link, uuid)
 #' @param link Link object.
 #' @param uuid The UUID of the Link in question.
@@ -780,9 +780,9 @@ NULL
 NULL
 
 #' links.delete
-#' 
+#'
 #' links.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.delete(uuid)
 #' @param uuid The UUID of the Link in question.
 #' @return Link object.
@@ -790,39 +790,39 @@ NULL
 NULL
 
 #' links.list
-#' 
+#'
 #' links.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return LinkList object.
 #' @name links.list
 NULL
 
 #' links.get_permissions
-#' 
+#'
 #' links.get_permissions is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.get_permissions(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Link object.
 #' @name links.get_permissions
 NULL
 
 #' jobs.get
-#' 
+#'
 #' jobs.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.get(uuid)
 #' @param uuid The UUID of the Job in question.
 #' @return Job object.
@@ -830,26 +830,26 @@ NULL
 NULL
 
 #' jobs.create
-#' 
+#'
 #' jobs.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.create(job, ensure_unique_name = "false",
 #'     find_or_create = "false", filters = NULL,
 #'     minimum_script_version = NULL, exclude_script_versions = NULL)
 #' @param job Job object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
-#' @param find_or_create 
-#' @param filters 
-#' @param minimum_script_version 
-#' @param exclude_script_versions 
+#' @param find_or_create
+#' @param filters
+#' @param minimum_script_version
+#' @param exclude_script_versions
 #' @return Job object.
 #' @name jobs.create
 NULL
 
 #' jobs.update
-#' 
+#'
 #' jobs.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.update(job, uuid)
 #' @param job Job object.
 #' @param uuid The UUID of the Job in question.
@@ -858,9 +858,9 @@ NULL
 NULL
 
 #' jobs.delete
-#' 
+#'
 #' jobs.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.delete(uuid)
 #' @param uuid The UUID of the Job in question.
 #' @return Job object.
@@ -868,77 +868,77 @@ NULL
 NULL
 
 #' jobs.queue
-#' 
+#'
 #' jobs.queue is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.queue(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return Job object.
 #' @name jobs.queue
 NULL
 
 #' jobs.queue_size
-#' 
+#'
 #' jobs.queue_size is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.queue_size(NULL)
 #' @return Job object.
 #' @name jobs.queue_size
 NULL
 
 #' jobs.cancel
-#' 
+#'
 #' jobs.cancel is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.cancel(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Job object.
 #' @name jobs.cancel
 NULL
 
 #' jobs.lock
-#' 
+#'
 #' jobs.lock is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.lock(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Job object.
 #' @name jobs.lock
 NULL
 
 #' jobs.list
-#' 
+#'
 #' jobs.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$jobs.list(filters = NULL, where = NULL,
 #'     order = NULL, select = NULL, distinct = NULL,
 #'     limit = "100", offset = "0", count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return JobList object.
 #' @name jobs.list
 NULL
 
 #' keep_disks.get
-#' 
+#'
 #' keep_disks.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_disks.get(uuid)
 #' @param uuid The UUID of the KeepDisk in question.
 #' @return KeepDisk object.
@@ -946,9 +946,9 @@ NULL
 NULL
 
 #' keep_disks.create
-#' 
+#'
 #' keep_disks.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_disks.create(keepdisk,
 #'     ensure_unique_name = "false")
 #' @param keepDisk KeepDisk object.
@@ -958,9 +958,9 @@ NULL
 NULL
 
 #' keep_disks.update
-#' 
+#'
 #' keep_disks.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_disks.update(keepdisk,
 #'     uuid)
 #' @param keepDisk KeepDisk object.
@@ -970,9 +970,9 @@ NULL
 NULL
 
 #' keep_disks.delete
-#' 
+#'
 #' keep_disks.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_disks.delete(uuid)
 #' @param uuid The UUID of the KeepDisk in question.
 #' @return KeepDisk object.
@@ -980,47 +980,47 @@ NULL
 NULL
 
 #' keep_disks.ping
-#' 
+#'
 #' keep_disks.ping is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_disks.ping(uuid = NULL,
 #'     ping_secret, node_uuid = NULL, filesystem_uuid = NULL,
 #'     service_host = NULL, service_port, service_ssl_flag)
-#' @param uuid 
-#' @param ping_secret 
-#' @param node_uuid 
-#' @param filesystem_uuid 
-#' @param service_host 
-#' @param service_port 
-#' @param service_ssl_flag 
+#' @param uuid
+#' @param ping_secret
+#' @param node_uuid
+#' @param filesystem_uuid
+#' @param service_host
+#' @param service_port
+#' @param service_ssl_flag
 #' @return KeepDisk object.
 #' @name keep_disks.ping
 NULL
 
 #' keep_disks.list
-#' 
+#'
 #' keep_disks.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_disks.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return KeepDiskList object.
 #' @name keep_disks.list
 NULL
 
 #' keep_services.get
-#' 
+#'
 #' keep_services.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_services.get(uuid)
 #' @param uuid The UUID of the KeepService in question.
 #' @return KeepService object.
@@ -1028,9 +1028,9 @@ NULL
 NULL
 
 #' keep_services.create
-#' 
+#'
 #' keep_services.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_services.create(keepservice,
 #'     ensure_unique_name = "false")
 #' @param keepService KeepService object.
@@ -1040,9 +1040,9 @@ NULL
 NULL
 
 #' keep_services.update
-#' 
+#'
 #' keep_services.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_services.update(keepservice,
 #'     uuid)
 #' @param keepService KeepService object.
@@ -1052,9 +1052,9 @@ NULL
 NULL
 
 #' keep_services.delete
-#' 
+#'
 #' keep_services.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_services.delete(uuid)
 #' @param uuid The UUID of the KeepService in question.
 #' @return KeepService object.
@@ -1062,38 +1062,38 @@ NULL
 NULL
 
 #' keep_services.accessible
-#' 
+#'
 #' keep_services.accessible is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_services.accessible(NULL)
 #' @return KeepService object.
 #' @name keep_services.accessible
 NULL
 
 #' keep_services.list
-#' 
+#'
 #' keep_services.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$keep_services.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return KeepServiceList object.
 #' @name keep_services.list
 NULL
 
 #' pipeline_templates.get
-#' 
+#'
 #' pipeline_templates.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_templates.get(uuid)
 #' @param uuid The UUID of the PipelineTemplate in question.
 #' @return PipelineTemplate object.
@@ -1101,9 +1101,9 @@ NULL
 NULL
 
 #' pipeline_templates.create
-#' 
+#'
 #' pipeline_templates.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_templates.create(pipelinetemplate,
 #'     ensure_unique_name = "false")
 #' @param pipelineTemplate PipelineTemplate object.
@@ -1113,9 +1113,9 @@ NULL
 NULL
 
 #' pipeline_templates.update
-#' 
+#'
 #' pipeline_templates.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_templates.update(pipelinetemplate,
 #'     uuid)
 #' @param pipelineTemplate PipelineTemplate object.
@@ -1125,9 +1125,9 @@ NULL
 NULL
 
 #' pipeline_templates.delete
-#' 
+#'
 #' pipeline_templates.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_templates.delete(uuid)
 #' @param uuid The UUID of the PipelineTemplate in question.
 #' @return PipelineTemplate object.
@@ -1135,29 +1135,29 @@ NULL
 NULL
 
 #' pipeline_templates.list
-#' 
+#'
 #' pipeline_templates.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_templates.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return PipelineTemplateList object.
 #' @name pipeline_templates.list
 NULL
 
 #' pipeline_instances.get
-#' 
+#'
 #' pipeline_instances.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_instances.get(uuid)
 #' @param uuid The UUID of the PipelineInstance in question.
 #' @return PipelineInstance object.
@@ -1165,9 +1165,9 @@ NULL
 NULL
 
 #' pipeline_instances.create
-#' 
+#'
 #' pipeline_instances.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_instances.create(pipelineinstance,
 #'     ensure_unique_name = "false")
 #' @param pipelineInstance PipelineInstance object.
@@ -1177,9 +1177,9 @@ NULL
 NULL
 
 #' pipeline_instances.update
-#' 
+#'
 #' pipeline_instances.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_instances.update(pipelineinstance,
 #'     uuid)
 #' @param pipelineInstance PipelineInstance object.
@@ -1189,9 +1189,9 @@ NULL
 NULL
 
 #' pipeline_instances.delete
-#' 
+#'
 #' pipeline_instances.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_instances.delete(uuid)
 #' @param uuid The UUID of the PipelineInstance in question.
 #' @return PipelineInstance object.
@@ -1199,39 +1199,39 @@ NULL
 NULL
 
 #' pipeline_instances.cancel
-#' 
+#'
 #' pipeline_instances.cancel is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_instances.cancel(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return PipelineInstance object.
 #' @name pipeline_instances.cancel
 NULL
 
 #' pipeline_instances.list
-#' 
+#'
 #' pipeline_instances.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$pipeline_instances.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return PipelineInstanceList object.
 #' @name pipeline_instances.list
 NULL
 
 #' nodes.get
-#' 
+#'
 #' nodes.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$nodes.get(uuid)
 #' @param uuid The UUID of the Node in question.
 #' @return Node object.
@@ -1239,9 +1239,9 @@ NULL
 NULL
 
 #' nodes.create
-#' 
+#'
 #' nodes.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$nodes.create(node, ensure_unique_name = "false",
 #'     assign_slot = NULL)
 #' @param node Node object.
@@ -1252,9 +1252,9 @@ NULL
 NULL
 
 #' nodes.update
-#' 
+#'
 #' nodes.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$nodes.update(node, uuid, assign_slot = NULL)
 #' @param node Node object.
 #' @param uuid The UUID of the Node in question.
@@ -1264,9 +1264,9 @@ NULL
 NULL
 
 #' nodes.delete
-#' 
+#'
 #' nodes.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$nodes.delete(uuid)
 #' @param uuid The UUID of the Node in question.
 #' @return Node object.
@@ -1274,40 +1274,40 @@ NULL
 NULL
 
 #' nodes.ping
-#' 
+#'
 #' nodes.ping is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$nodes.ping(uuid, ping_secret)
-#' @param uuid 
-#' @param ping_secret 
+#' @param uuid
+#' @param ping_secret
 #' @return Node object.
 #' @name nodes.ping
 NULL
 
 #' nodes.list
-#' 
+#'
 #' nodes.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$nodes.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return NodeList object.
 #' @name nodes.list
 NULL
 
 #' repositories.get
-#' 
+#'
 #' repositories.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.get(uuid)
 #' @param uuid The UUID of the Repository in question.
 #' @return Repository object.
@@ -1315,9 +1315,9 @@ NULL
 NULL
 
 #' repositories.create
-#' 
+#'
 #' repositories.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.create(repository,
 #'     ensure_unique_name = "false")
 #' @param repository Repository object.
@@ -1327,9 +1327,9 @@ NULL
 NULL
 
 #' repositories.update
-#' 
+#'
 #' repositories.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.update(repository,
 #'     uuid)
 #' @param repository Repository object.
@@ -1339,9 +1339,9 @@ NULL
 NULL
 
 #' repositories.delete
-#' 
+#'
 #' repositories.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.delete(uuid)
 #' @param uuid The UUID of the Repository in question.
 #' @return Repository object.
@@ -1349,38 +1349,38 @@ NULL
 NULL
 
 #' repositories.get_all_permissions
-#' 
+#'
 #' repositories.get_all_permissions is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.get_all_permissions(NULL)
 #' @return Repository object.
 #' @name repositories.get_all_permissions
 NULL
 
 #' repositories.list
-#' 
+#'
 #' repositories.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return RepositoryList object.
 #' @name repositories.list
 NULL
 
 #' specimens.get
-#' 
+#'
 #' specimens.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$specimens.get(uuid)
 #' @param uuid The UUID of the Specimen in question.
 #' @return Specimen object.
@@ -1388,9 +1388,9 @@ NULL
 NULL
 
 #' specimens.create
-#' 
+#'
 #' specimens.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$specimens.create(specimen,
 #'     ensure_unique_name = "false")
 #' @param specimen Specimen object.
@@ -1400,9 +1400,9 @@ NULL
 NULL
 
 #' specimens.update
-#' 
+#'
 #' specimens.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$specimens.update(specimen,
 #'     uuid)
 #' @param specimen Specimen object.
@@ -1412,9 +1412,9 @@ NULL
 NULL
 
 #' specimens.delete
-#' 
+#'
 #' specimens.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$specimens.delete(uuid)
 #' @param uuid The UUID of the Specimen in question.
 #' @return Specimen object.
@@ -1422,29 +1422,29 @@ NULL
 NULL
 
 #' specimens.list
-#' 
+#'
 #' specimens.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$specimens.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return SpecimenList object.
 #' @name specimens.list
 NULL
 
 #' logs.get
-#' 
+#'
 #' logs.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$logs.get(uuid)
 #' @param uuid The UUID of the Log in question.
 #' @return Log object.
@@ -1452,9 +1452,9 @@ NULL
 NULL
 
 #' logs.create
-#' 
+#'
 #' logs.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$logs.create(log, ensure_unique_name = "false")
 #' @param log Log object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -1463,9 +1463,9 @@ NULL
 NULL
 
 #' logs.update
-#' 
+#'
 #' logs.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$logs.update(log, uuid)
 #' @param log Log object.
 #' @param uuid The UUID of the Log in question.
@@ -1474,9 +1474,9 @@ NULL
 NULL
 
 #' logs.delete
-#' 
+#'
 #' logs.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$logs.delete(uuid)
 #' @param uuid The UUID of the Log in question.
 #' @return Log object.
@@ -1484,28 +1484,28 @@ NULL
 NULL
 
 #' logs.list
-#' 
+#'
 #' logs.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$logs.list(filters = NULL, where = NULL,
 #'     order = NULL, select = NULL, distinct = NULL,
 #'     limit = "100", offset = "0", count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return LogList object.
 #' @name logs.list
 NULL
 
 #' traits.get
-#' 
+#'
 #' traits.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$traits.get(uuid)
 #' @param uuid The UUID of the Trait in question.
 #' @return Trait object.
@@ -1513,9 +1513,9 @@ NULL
 NULL
 
 #' traits.create
-#' 
+#'
 #' traits.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$traits.create(trait, ensure_unique_name = "false")
 #' @param trait Trait object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -1524,9 +1524,9 @@ NULL
 NULL
 
 #' traits.update
-#' 
+#'
 #' traits.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$traits.update(trait, uuid)
 #' @param trait Trait object.
 #' @param uuid The UUID of the Trait in question.
@@ -1535,9 +1535,9 @@ NULL
 NULL
 
 #' traits.delete
-#' 
+#'
 #' traits.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$traits.delete(uuid)
 #' @param uuid The UUID of the Trait in question.
 #' @return Trait object.
@@ -1545,29 +1545,29 @@ NULL
 NULL
 
 #' traits.list
-#' 
+#'
 #' traits.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$traits.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return TraitList object.
 #' @name traits.list
 NULL
 
 #' virtual_machines.get
-#' 
+#'
 #' virtual_machines.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.get(uuid)
 #' @param uuid The UUID of the VirtualMachine in question.
 #' @return VirtualMachine object.
@@ -1575,9 +1575,9 @@ NULL
 NULL
 
 #' virtual_machines.create
-#' 
+#'
 #' virtual_machines.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.create(virtualmachine,
 #'     ensure_unique_name = "false")
 #' @param virtualMachine VirtualMachine object.
@@ -1587,9 +1587,9 @@ NULL
 NULL
 
 #' virtual_machines.update
-#' 
+#'
 #' virtual_machines.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.update(virtualmachine,
 #'     uuid)
 #' @param virtualMachine VirtualMachine object.
@@ -1599,9 +1599,9 @@ NULL
 NULL
 
 #' virtual_machines.delete
-#' 
+#'
 #' virtual_machines.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.delete(uuid)
 #' @param uuid The UUID of the VirtualMachine in question.
 #' @return VirtualMachine object.
@@ -1609,48 +1609,48 @@ NULL
 NULL
 
 #' virtual_machines.logins
-#' 
+#'
 #' virtual_machines.logins is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.logins(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return VirtualMachine object.
 #' @name virtual_machines.logins
 NULL
 
 #' virtual_machines.get_all_logins
-#' 
+#'
 #' virtual_machines.get_all_logins is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.get_all_logins(NULL)
 #' @return VirtualMachine object.
 #' @name virtual_machines.get_all_logins
 NULL
 
 #' virtual_machines.list
-#' 
+#'
 #' virtual_machines.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$virtual_machines.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return VirtualMachineList object.
 #' @name virtual_machines.list
 NULL
 
 #' workflows.get
-#' 
+#'
 #' workflows.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.get(uuid)
 #' @param uuid The UUID of the Workflow in question.
 #' @return Workflow object.
@@ -1658,9 +1658,9 @@ NULL
 NULL
 
 #' workflows.create
-#' 
+#'
 #' workflows.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.create(workflow,
 #'     ensure_unique_name = "false")
 #' @param workflow Workflow object.
@@ -1670,9 +1670,9 @@ NULL
 NULL
 
 #' workflows.update
-#' 
+#'
 #' workflows.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.update(workflow,
 #'     uuid)
 #' @param workflow Workflow object.
@@ -1682,9 +1682,9 @@ NULL
 NULL
 
 #' workflows.delete
-#' 
+#'
 #' workflows.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.delete(uuid)
 #' @param uuid The UUID of the Workflow in question.
 #' @return Workflow object.
@@ -1692,29 +1692,29 @@ NULL
 NULL
 
 #' workflows.list
-#' 
+#'
 #' workflows.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return WorkflowList object.
 #' @name workflows.list
 NULL
 
 #' groups.get
-#' 
+#'
 #' groups.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.get(uuid)
 #' @param uuid The UUID of the Group in question.
 #' @return Group object.
@@ -1722,9 +1722,9 @@ NULL
 NULL
 
 #' groups.create
-#' 
+#'
 #' groups.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.create(group, ensure_unique_name = "false")
 #' @param group Group object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -1733,9 +1733,9 @@ NULL
 NULL
 
 #' groups.update
-#' 
+#'
 #' groups.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.update(group, uuid)
 #' @param group Group object.
 #' @param uuid The UUID of the Group in question.
@@ -1744,9 +1744,9 @@ NULL
 NULL
 
 #' groups.delete
-#' 
+#'
 #' groups.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.delete(uuid)
 #' @param uuid The UUID of the Group in question.
 #' @return Group object.
@@ -1754,72 +1754,72 @@ NULL
 NULL
 
 #' groups.contents
-#' 
+#'
 #' groups.contents is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.contents(filters = NULL,
 #'     where = NULL, order = NULL, distinct = NULL,
 #'     limit = "100", offset = "0", count = "exact",
 #'     include_trash = NULL, uuid = NULL, recursive = NULL)
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @param include_trash Include items whose is_trashed attribute is true.
-#' @param uuid 
+#' @param uuid
 #' @param recursive Include contents from child groups recursively.
 #' @return Group object.
 #' @name groups.contents
 NULL
 
 #' groups.trash
-#' 
+#'
 #' groups.trash is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.trash(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Group object.
 #' @name groups.trash
 NULL
 
 #' groups.untrash
-#' 
+#'
 #' groups.untrash is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.untrash(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Group object.
 #' @name groups.untrash
 NULL
 
 #' groups.list
-#' 
+#'
 #' groups.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact", include_trash = NULL)
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @param include_trash Include items whose is_trashed attribute is true.
 #' @return GroupList object.
 #' @name groups.list
 NULL
 
 #' user_agreements.get
-#' 
+#'
 #' user_agreements.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.get(uuid)
 #' @param uuid The UUID of the UserAgreement in question.
 #' @return UserAgreement object.
@@ -1827,9 +1827,9 @@ NULL
 NULL
 
 #' user_agreements.create
-#' 
+#'
 #' user_agreements.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.create(useragreement,
 #'     ensure_unique_name = "false")
 #' @param userAgreement UserAgreement object.
@@ -1839,9 +1839,9 @@ NULL
 NULL
 
 #' user_agreements.update
-#' 
+#'
 #' user_agreements.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.update(useragreement,
 #'     uuid)
 #' @param userAgreement UserAgreement object.
@@ -1851,9 +1851,9 @@ NULL
 NULL
 
 #' user_agreements.delete
-#' 
+#'
 #' user_agreements.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.delete(uuid)
 #' @param uuid The UUID of the UserAgreement in question.
 #' @return UserAgreement object.
@@ -1861,56 +1861,56 @@ NULL
 NULL
 
 #' user_agreements.signatures
-#' 
+#'
 #' user_agreements.signatures is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.signatures(NULL)
 #' @return UserAgreement object.
 #' @name user_agreements.signatures
 NULL
 
 #' user_agreements.sign
-#' 
+#'
 #' user_agreements.sign is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.sign(NULL)
 #' @return UserAgreement object.
 #' @name user_agreements.sign
 NULL
 
 #' user_agreements.list
-#' 
+#'
 #' user_agreements.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact")
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param select 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param select
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @return UserAgreementList object.
 #' @name user_agreements.list
 NULL
 
 #' user_agreements.new
-#' 
+#'
 #' user_agreements.new is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$user_agreements.new(NULL)
 #' @return UserAgreement object.
 #' @name user_agreements.new
 NULL
 
 #' project.get
-#' 
+#'
 #' projects.get is equivalent to groups.get method.
-#' 
+#'
 #' @usage arv$projects.get(uuid)
 #' @param uuid The UUID of the Group in question.
 #' @return Group object.
@@ -1918,9 +1918,9 @@ NULL
 NULL
 
 #' project.create
-#' 
+#'
 #' projects.create wrapps groups.create method by setting group_class attribute to "project".
-#' 
+#'
 #' @usage arv$projects.create(group, ensure_unique_name = "false")
 #' @param group Group object.
 #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
@@ -1929,9 +1929,9 @@ NULL
 NULL
 
 #' project.update
-#' 
+#'
 #' projects.update wrapps groups.update method by setting group_class attribute to "project".
-#' 
+#'
 #' @usage arv$projects.update(group, uuid)
 #' @param group Group object.
 #' @param uuid The UUID of the Group in question.
@@ -1940,9 +1940,9 @@ NULL
 NULL
 
 #' project.delete
-#' 
+#'
 #' projects.delete is equivalent to groups.delete method.
-#' 
+#'
 #' @usage arv$project.delete(uuid)
 #' @param uuid The UUID of the Group in question.
 #' @return Group object.
@@ -1950,22 +1950,22 @@ NULL
 NULL
 
 #' project.list
-#' 
+#'
 #' projects.list wrapps groups.list method by setting group_class attribute to "project".
-#' 
+#'
 #' @usage arv$projects.list(filters = NULL,
 #'     where = NULL, order = NULL, distinct = NULL,
 #'     limit = "100", offset = "0", count = "exact",
 #'     include_trash = NULL, uuid = NULL, recursive = NULL)
-#' @param filters 
-#' @param where 
-#' @param order 
-#' @param distinct 
-#' @param limit 
-#' @param offset 
-#' @param count 
+#' @param filters
+#' @param where
+#' @param order
+#' @param distinct
+#' @param limit
+#' @param offset
+#' @param count
 #' @param include_trash Include items whose is_trashed attribute is true.
-#' @param uuid 
+#' @param uuid
 #' @param recursive Include contents from child groups recursively.
 #' @return Group object.
 #' @name projects.list
@@ -2237,19 +2237,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2257,23 +2257,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(user) > 0)
-                               body <- jsonlite::toJSON(list(user = user), 
+                               body <- jsonlite::toJSON(list(user = user),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2281,23 +2281,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(user) > 0)
-                               body <- jsonlite::toJSON(list(user = user), 
+                               body <- jsonlite::toJSON(list(user = user),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2305,19 +2305,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2325,19 +2325,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/current")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2345,19 +2345,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/system")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2365,19 +2365,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}/activate")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2386,21 +2386,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/setup")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(user = user, openid_prefix = openid_prefix,
                                                          repo_name = repo_name, vm_uuid = vm_uuid,
                                                          send_notification_email = send_notification_email)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2408,19 +2408,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}/unsetup")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2428,19 +2428,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}/update_uuid")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(new_uuid = new_uuid)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2450,21 +2450,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2472,19 +2472,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2493,23 +2493,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(apiclientauthorization) > 0)
-                               body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization), 
+                               body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2517,23 +2517,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(apiclientauthorization) > 0)
-                               body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization), 
+                               body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2541,19 +2541,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2561,20 +2561,20 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/create_system_auth")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(api_client_id = api_client_id,
                                                          scopes = scopes)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2582,19 +2582,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/current")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2605,21 +2605,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2627,19 +2627,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2647,23 +2647,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(container) > 0)
-                               body <- jsonlite::toJSON(list(container = container), 
+                               body <- jsonlite::toJSON(list(container = container),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2671,23 +2671,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(container) > 0)
-                               body <- jsonlite::toJSON(list(container = container), 
+                               body <- jsonlite::toJSON(list(container = container),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2695,19 +2695,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2715,19 +2715,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/auth")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2735,19 +2735,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/lock")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2755,19 +2755,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/unlock")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2775,19 +2775,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/secret_mounts")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2795,19 +2795,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/current")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2818,21 +2818,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2840,19 +2840,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2860,23 +2860,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(apiclient) > 0)
-                               body <- jsonlite::toJSON(list(apiclient = apiclient), 
+                               body <- jsonlite::toJSON(list(apiclient = apiclient),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2884,23 +2884,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(apiclient) > 0)
-                               body <- jsonlite::toJSON(list(apiclient = apiclient), 
+                               body <- jsonlite::toJSON(list(apiclient = apiclient),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2908,19 +2908,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2931,21 +2931,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2953,19 +2953,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2974,23 +2974,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(authorizedkey) > 0)
-                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), 
+                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2998,23 +2998,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(authorizedkey) > 0)
-                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), 
+                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3022,19 +3022,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3045,21 +3045,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3067,19 +3067,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3088,23 +3088,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(containerrequest) > 0)
-                               body <- jsonlite::toJSON(list(containerrequest = containerrequest), 
+                               body <- jsonlite::toJSON(list(containerrequest = containerrequest),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3112,23 +3112,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(containerrequest) > 0)
-                               body <- jsonlite::toJSON(list(containerrequest = containerrequest), 
+                               body <- jsonlite::toJSON(list(containerrequest = containerrequest),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3136,19 +3136,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3159,21 +3159,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3181,19 +3181,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3201,23 +3201,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(collection) > 0)
-                               body <- jsonlite::toJSON(list(collection = collection), 
+                               body <- jsonlite::toJSON(list(collection = collection),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3225,23 +3225,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(collection) > 0)
-                               body <- jsonlite::toJSON(list(collection = collection), 
+                               body <- jsonlite::toJSON(list(collection = collection),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3249,19 +3249,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3269,19 +3269,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/provenance")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3289,19 +3289,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/used_by")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3309,19 +3309,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/trash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3329,19 +3329,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/untrash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3352,22 +3352,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          include_trash = include_trash)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3375,19 +3375,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("humans/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3395,23 +3395,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("humans")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(human) > 0)
-                               body <- jsonlite::toJSON(list(human = human), 
+                               body <- jsonlite::toJSON(list(human = human),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3419,23 +3419,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("humans/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(human) > 0)
-                               body <- jsonlite::toJSON(list(human = human), 
+                               body <- jsonlite::toJSON(list(human = human),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3443,19 +3443,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("humans/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3465,21 +3465,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("humans")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3487,19 +3487,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("job_tasks/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3507,23 +3507,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("job_tasks")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(jobtask) > 0)
-                               body <- jsonlite::toJSON(list(jobtask = jobtask), 
+                               body <- jsonlite::toJSON(list(jobtask = jobtask),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3531,23 +3531,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("job_tasks/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(jobtask) > 0)
-                               body <- jsonlite::toJSON(list(jobtask = jobtask), 
+                               body <- jsonlite::toJSON(list(jobtask = jobtask),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3555,19 +3555,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("job_tasks/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3578,21 +3578,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("job_tasks")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3600,19 +3600,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3620,23 +3620,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(link) > 0)
-                               body <- jsonlite::toJSON(list(link = link), 
+                               body <- jsonlite::toJSON(list(link = link),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3644,23 +3644,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(link) > 0)
-                               body <- jsonlite::toJSON(list(link = link), 
+                               body <- jsonlite::toJSON(list(link = link),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3668,19 +3668,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3690,21 +3690,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3712,19 +3712,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("permissions/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3732,19 +3732,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3754,26 +3754,26 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          find_or_create = find_or_create, filters = filters,
                                                          minimum_script_version = minimum_script_version,
                                                          exclude_script_versions = exclude_script_versions)
-                       
+
                        if(length(job) > 0)
-                               body <- jsonlite::toJSON(list(job = job), 
+                               body <- jsonlite::toJSON(list(job = job),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3781,23 +3781,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(job) > 0)
-                               body <- jsonlite::toJSON(list(job = job), 
+                               body <- jsonlite::toJSON(list(job = job),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3805,19 +3805,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3827,21 +3827,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/queue")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3849,19 +3849,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/queue_size")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3869,19 +3869,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/${uuid}/cancel")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3889,19 +3889,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs/${uuid}/lock")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3911,21 +3911,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("jobs")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3933,19 +3933,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_disks/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3953,23 +3953,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_disks")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(keepdisk) > 0)
-                               body <- jsonlite::toJSON(list(keepdisk = keepdisk), 
+                               body <- jsonlite::toJSON(list(keepdisk = keepdisk),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -3977,23 +3977,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_disks/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(keepdisk) > 0)
-                               body <- jsonlite::toJSON(list(keepdisk = keepdisk), 
+                               body <- jsonlite::toJSON(list(keepdisk = keepdisk),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4001,19 +4001,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_disks/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4023,22 +4023,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_disks/ping")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(uuid = uuid, ping_secret = ping_secret,
                                                          node_uuid = node_uuid, filesystem_uuid = filesystem_uuid,
                                                          service_host = service_host, service_port = service_port,
                                                          service_ssl_flag = service_ssl_flag)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4049,21 +4049,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_disks")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4071,19 +4071,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4092,23 +4092,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(keepservice) > 0)
-                               body <- jsonlite::toJSON(list(keepservice = keepservice), 
+                               body <- jsonlite::toJSON(list(keepservice = keepservice),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4116,23 +4116,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(keepservice) > 0)
-                               body <- jsonlite::toJSON(list(keepservice = keepservice), 
+                               body <- jsonlite::toJSON(list(keepservice = keepservice),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4140,19 +4140,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4160,19 +4160,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/accessible")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4183,21 +4183,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4205,19 +4205,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_templates/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4226,23 +4226,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_templates")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(pipelinetemplate) > 0)
-                               body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate), 
+                               body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4250,23 +4250,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_templates/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(pipelinetemplate) > 0)
-                               body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate), 
+                               body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4274,19 +4274,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_templates/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4297,21 +4297,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_templates")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4319,19 +4319,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_instances/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4340,23 +4340,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_instances")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(pipelineinstance) > 0)
-                               body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance), 
+                               body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4364,23 +4364,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_instances/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(pipelineinstance) > 0)
-                               body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance), 
+                               body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4388,19 +4388,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_instances/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4408,19 +4408,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_instances/${uuid}/cancel")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4431,21 +4431,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("pipeline_instances")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4453,19 +4453,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("nodes/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4474,24 +4474,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("nodes")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          assign_slot = assign_slot)
-                       
+
                        if(length(node) > 0)
-                               body <- jsonlite::toJSON(list(node = node), 
+                               body <- jsonlite::toJSON(list(node = node),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4499,23 +4499,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("nodes/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(assign_slot = assign_slot)
-                       
+
                        if(length(node) > 0)
-                               body <- jsonlite::toJSON(list(node = node), 
+                               body <- jsonlite::toJSON(list(node = node),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4523,19 +4523,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("nodes/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4543,19 +4543,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("nodes/${uuid}/ping")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ping_secret = ping_secret)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4565,21 +4565,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("nodes")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4587,19 +4587,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4607,23 +4607,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(repository) > 0)
-                               body <- jsonlite::toJSON(list(repository = repository), 
+                               body <- jsonlite::toJSON(list(repository = repository),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4631,23 +4631,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(repository) > 0)
-                               body <- jsonlite::toJSON(list(repository = repository), 
+                               body <- jsonlite::toJSON(list(repository = repository),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4655,19 +4655,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4675,19 +4675,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/get_all_permissions")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4698,21 +4698,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4720,19 +4720,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("specimens/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4740,23 +4740,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("specimens")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(specimen) > 0)
-                               body <- jsonlite::toJSON(list(specimen = specimen), 
+                               body <- jsonlite::toJSON(list(specimen = specimen),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4764,23 +4764,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("specimens/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(specimen) > 0)
-                               body <- jsonlite::toJSON(list(specimen = specimen), 
+                               body <- jsonlite::toJSON(list(specimen = specimen),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4788,19 +4788,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("specimens/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4811,21 +4811,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("specimens")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4833,19 +4833,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4853,23 +4853,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(log) > 0)
-                               body <- jsonlite::toJSON(list(log = log), 
+                               body <- jsonlite::toJSON(list(log = log),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4877,23 +4877,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(log) > 0)
-                               body <- jsonlite::toJSON(list(log = log), 
+                               body <- jsonlite::toJSON(list(log = log),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4901,19 +4901,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4923,21 +4923,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4945,19 +4945,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("traits/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4965,23 +4965,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("traits")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(trait) > 0)
-                               body <- jsonlite::toJSON(list(trait = trait), 
+                               body <- jsonlite::toJSON(list(trait = trait),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -4989,23 +4989,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("traits/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(trait) > 0)
-                               body <- jsonlite::toJSON(list(trait = trait), 
+                               body <- jsonlite::toJSON(list(trait = trait),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5013,19 +5013,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("traits/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5035,21 +5035,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("traits")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5057,19 +5057,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5078,23 +5078,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(virtualmachine) > 0)
-                               body <- jsonlite::toJSON(list(virtualmachine = virtualmachine), 
+                               body <- jsonlite::toJSON(list(virtualmachine = virtualmachine),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5102,23 +5102,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(virtualmachine) > 0)
-                               body <- jsonlite::toJSON(list(virtualmachine = virtualmachine), 
+                               body <- jsonlite::toJSON(list(virtualmachine = virtualmachine),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5126,19 +5126,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5146,19 +5146,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}/logins")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5166,19 +5166,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/get_all_logins")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5189,21 +5189,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5211,19 +5211,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5231,23 +5231,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(workflow) > 0)
-                               body <- jsonlite::toJSON(list(workflow = workflow), 
+                               body <- jsonlite::toJSON(list(workflow = workflow),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5255,23 +5255,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(workflow) > 0)
-                               body <- jsonlite::toJSON(list(workflow = workflow), 
+                               body <- jsonlite::toJSON(list(workflow = workflow),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5279,19 +5279,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5302,21 +5302,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5324,19 +5324,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5344,23 +5344,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(group) > 0)
-                               body <- jsonlite::toJSON(list(group = group), 
+                               body <- jsonlite::toJSON(list(group = group),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5368,23 +5368,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(group) > 0)
-                               body <- jsonlite::toJSON(list(group = group), 
+                               body <- jsonlite::toJSON(list(group = group),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5392,19 +5392,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5415,22 +5415,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/contents")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, distinct = distinct, limit = limit,
                                                          offset = offset, count = count, include_trash = include_trash,
                                                          uuid = uuid, recursive = recursive)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5438,19 +5438,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}/trash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5458,19 +5458,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}/untrash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5481,22 +5481,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          include_trash = include_trash)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5504,19 +5504,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5525,23 +5525,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name)
-                       
+
                        if(length(useragreement) > 0)
-                               body <- jsonlite::toJSON(list(useragreement = useragreement), 
+                               body <- jsonlite::toJSON(list(useragreement = useragreement),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5549,23 +5549,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(useragreement) > 0)
-                               body <- jsonlite::toJSON(list(useragreement = useragreement), 
+                               body <- jsonlite::toJSON(list(useragreement = useragreement),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5573,19 +5573,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("DELETE", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5593,19 +5593,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/signatures")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5613,19 +5613,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/sign")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5636,21 +5636,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count)
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -5658,19 +5658,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/new")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                       headers <- list(Authorization = paste("OAuth2", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        body <- NULL
-                       
+
                        response <- private$REST$http$exec("GET", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
index 8f737831c4634cc09a3121a86e04dcbf0361946b..1071302892690a659370d41afaa4336316678362 100644 (file)
@@ -5,9 +5,9 @@
 source("./R/util.R")
 
 #' ArvadosFile
-#' 
+#'
 #' ArvadosFile class represents a file inside Arvados collection.
-#' 
+#'
 #' @section Usage:
 #' \preformatted{file = ArvadosFile$new(name)}
 #'
@@ -15,7 +15,7 @@ source("./R/util.R")
 #' \describe{
 #'   \item{name}{Name of the file.}
 #' }
-#' 
+#'
 #' @section Methods:
 #' \describe{
 #'   \item{getName()}{Returns name of the file.}
@@ -37,7 +37,7 @@ source("./R/util.R")
 #' myFile$write("This is new file content")
 #' fileContent <- myFile$read()
 #' fileContent <- myFile$read("text")
-#' fileContent <- myFile$read("raw", offset = 8, length = 4) 
+#' fileContent <- myFile$read("raw", offset = 8, length = 4)
 #'
 #' #Write a table:
 #' arvConnection <- myFile$connection("w")
@@ -141,14 +141,14 @@ ArvadosFile <- R6::R6Class(
 
         connection = function(rw)
         {
-            if (rw == "r" || rw == "rb") 
+            if (rw == "r" || rw == "rb")
             {
                 REST <- private$collection$getRESTService()
-                return(REST$getConnection(private$collection$uuid,
-                                          self$getRelativePath(),
+                return(REST$getConnection(self$getRelativePath(),
+                                          private$collection$uuid,
                                           rw))
             }
-            else if (rw == "w") 
+            else if (rw == "w")
             {
                 private$buffer <- textConnection(NULL, "w")
 
@@ -156,7 +156,7 @@ ArvadosFile <- R6::R6Class(
             }
         },
 
-        flush = function() 
+        flush = function()
         {
             v <- textConnectionValue(private$buffer)
             close(private$buffer)
@@ -255,7 +255,7 @@ ArvadosFile <- R6::R6Class(
 #'
 #' @param x Instance of ArvadosFile class
 #' @param ... Optional arguments.
-#' @export 
+#' @export
 print.ArvadosFile = function(x, ...)
 {
     collection   <- NULL
index e23da138329786cba49e3a8001479461dd30be77..833b833c80f367ef59d4ca82ef78784e278cf73d 100644 (file)
@@ -8,9 +8,9 @@ source("./R/RESTService.R")
 source("./R/util.R")
 
 #' Collection
-#' 
+#'
 #' Collection class provides interface for working with Arvados collections.
-#' 
+#'
 #' @section Usage:
 #' \preformatted{collection = Collection$new(arv, uuid)}
 #'
@@ -19,7 +19,7 @@ source("./R/util.R")
 #'   \item{arv}{Arvados object.}
 #'   \item{uuid}{UUID of a collection.}
 #' }
-#' 
+#'
 #' @section Methods:
 #' \describe{
 #'   \item{add(content)}{Adds ArvadosFile or Subcollection specified by content to the collection.}
@@ -60,7 +60,7 @@ Collection <- R6::R6Class(
                uuid = NULL,
         # api  = NULL,
 
-               initialize = function(api, uuid) 
+               initialize = function(api, uuid)
         {
             # self$api <- api
             private$REST <- api$getRESTService()
@@ -121,7 +121,7 @@ Collection <- R6::R6Class(
             }
             else
             {
-                relativePath  <- trimFromEnd(relativePath, "/") 
+                relativePath  <- trimFromEnd(relativePath, "/")
                 subcollection <- self$get(relativePath)
             }
 
@@ -148,7 +148,7 @@ Collection <- R6::R6Class(
                 else
                     return(arvadosFiles)
             }
-            else 
+            else
             {
                 stop(paste0("Expected character vector, got ",
                             paste0("(", paste0(class(fileNames), collapse = ", "), ")"),
@@ -181,7 +181,7 @@ Collection <- R6::R6Class(
 
                 "Content removed"
             }
-            else 
+            else
             {
                 stop(paste0("Expected character vector, got ",
                             paste0("(", paste0(class(paths), collapse = ", "), ")"),
@@ -221,14 +221,14 @@ Collection <- R6::R6Class(
             private$tree$getElement(relativePath)
         },
 
-               toJSON = function() 
+               toJSON = function()
         {
                        fields <- sapply(private$classFields, function(field)
                        {
                                self[[field]]
                        }, USE.NAMES = TRUE)
-                       
-                       jsonlite::toJSON(list("collection" = 
+
+                       jsonlite::toJSON(list("collection" =
                      Filter(Negate(is.null), fields)), auto_unbox = TRUE)
                },
 
@@ -275,7 +275,7 @@ Collection <- R6::R6Class(
 #'
 #' @param x Instance of Collection class
 #' @param ... Optional arguments.
-#' @export 
+#' @export
 print.Collection = function(x, ...)
 {
     cat(paste0("Type: ", "\"", "Arvados Collection", "\""), sep = "\n")
index 8686f88c1a8a3c55b695351b9993df55939d0f1a..8b2f8876b0f91a0d86e148f81f1d29d87ab2f479 100644 (file)
@@ -19,7 +19,7 @@ CollectionTree <- R6::R6Class(
             treeBranches <- sapply(fileContent, function(filePath)
             {
                 splitPath <- unlist(strsplit(filePath, "/", fixed = TRUE))
-                branch <- private$createBranch(splitPath)      
+                branch <- private$createBranch(splitPath)
             })
 
             root <- Subcollection$new("")
@@ -80,7 +80,7 @@ CollectionTree <- R6::R6Class(
                     branch <- newFolder
                 }
             }
-            
+
             branch
         },
 
@@ -94,10 +94,10 @@ CollectionTree <- R6::R6Class(
             }
             else
             {
-                # Note: REST always returns folder name alone before other folder 
+                # Note: REST always returns folder name alone before other folder
                 # content, so in first iteration we don't know if it's a file
-                # or folder since its just a name, so we assume it's a file. 
-                # If we encounter that same name again we know 
+                # or folder since its just a name, so we assume it's a file.
+                # If we encounter that same name again we know
                 # it's a folder so we need to replace ArvadosFile with Subcollection.
                 if("ArvadosFile" %in% class(child))
                 {
index 8ce68f3837f158486534c6adc55e4ff23e9386e1..cd492166a139bf56dccebf732f2533c443440cf7 100644 (file)
@@ -10,12 +10,12 @@ HttpParser <- R6::R6Class(
 
         validContentTypes = NULL,
 
-        initialize = function() 
+        initialize = function()
         {
             self$validContentTypes <- c("text", "raw")
         },
 
-        parseJSONResponse = function(serverResponse) 
+        parseJSONResponse = function(serverResponse)
         {
             parsed_response <- httr::content(serverResponse,
                                              as = "parsed",
@@ -41,7 +41,7 @@ HttpParser <- R6::R6Class(
             result[-1]
         },
 
-        getFileSizesFromResponse = function(response, uri)    
+        getFileSizesFromResponse = function(response, uri)
         {
             text <- rawToChar(response$content)
             doc <- XML::xmlParse(text, asText=TRUE)
index 95dd375debe5ce076638c55de49a57db1f2d8f0d..4595fef662c1c9422af13dc0222a10bd9a9df48a 100644 (file)
@@ -13,7 +13,7 @@ HttpRequest <- R6::R6Class(
         validContentTypes = NULL,
         validVerbs = NULL,
 
-        initialize = function() 
+        initialize = function()
         {
             self$validContentTypes <- c("text", "raw")
             self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE")
@@ -30,7 +30,7 @@ HttpRequest <- R6::R6Class(
 
             config <- httr::add_headers(unlist(headers))
             if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
-               config$options = list(ssl_verifypeer = FALSE)
+               config$options = list(ssl_verifypeer = 0L)
 
             # times = 1 regular call + numberOfRetries
             response <- httr::RETRY(verb, url = url, body = body,
@@ -58,6 +58,17 @@ HttpRequest <- R6::R6Class(
             }
 
             return("")
+        },
+
+        getConnection = function(url, headers, openMode)
+        {
+            h <- curl::new_handle()
+            curl::handle_setheaders(h, .list = headers)
+
+            if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
+               curl::handle_setopt(h, ssl_verifypeer = 0L)
+
+            conn <- curl::curl(url = url, open = openMode, handle = h)
         }
     ),
 
index ac65d0df3f37b6baa6031bc8cbab71b163e27a76..867665299f49899909167c4fd838bc9ae1371dd8 100644 (file)
@@ -66,7 +66,7 @@ RESTService <- R6::R6Class(
         {
             fileURL <- paste0(self$getWebDavHostName(), "c=",
                               uuid, "/", relativePath);
-            headers <- list(Authorization = paste("OAuth2", self$token)) 
+            headers <- list(Authorization = paste("OAuth2", self$token))
 
             serverResponse <- self$http$exec("DELETE", fileURL, headers,
                                              retryTimes = self$numRetries)
@@ -186,18 +186,13 @@ RESTService <- R6::R6Class(
             self$httpParser$parseResponse(serverResponse, "text")
         },
 
-        getConnection = function(uuid, relativePath, openMode)
+        getConnection = function(relativePath, uuid, openMode)
         {
-            fileURL <- paste0(self$getWebDavHostName(), 
+            fileURL <- paste0(self$getWebDavHostName(),
                               "c=", uuid, "/", relativePath);
             headers <- list(Authorization = paste("OAuth2", self$token))
 
-            h <- curl::new_handle()
-            curl::handle_setheaders(h, .list = headers)
-
-            conn <- curl::curl(url = fileURL, open = openMode, handle = h)
-
-            conn
+            conn <- self$http$getConnection(fileURL, headers, openMode)
         }
     ),
 
@@ -210,7 +205,7 @@ RESTService <- R6::R6Class(
         {
             fileURL <- paste0(self$getWebDavHostName(), "c=",
                               uuid, "/", relativePath)
-            headers <- list(Authorization = paste("OAuth2", self$token), 
+            headers <- list(Authorization = paste("OAuth2", self$token),
                             "Content-Type" = contentType)
             body <- NULL
 
index 60714a4ad835b9bc201fb780bb38b5fb8a81461c..45fe34347903192bed1d8618e14aceedf73a18f2 100644 (file)
@@ -5,10 +5,10 @@
 source("./R/util.R")
 
 #' Subcollection
-#' 
+#'
 #' Subcollection class represents a folder inside Arvados collection.
 #' It is essentially a composite of arvadosFiles and other subcollections.
-#' 
+#'
 #' @section Usage:
 #' \preformatted{subcollection = Subcollection$new(name)}
 #'
@@ -16,7 +16,7 @@ source("./R/util.R")
 #' \describe{
 #'   \item{name}{Name of the subcollection.}
 #' }
-#' 
+#'
 #' @section Methods:
 #' \describe{
 #'   \item{getName()}{Returns name of the subcollection.}
@@ -56,7 +56,7 @@ Subcollection <- R6::R6Class(
         },
 
         getName = function() private$name,
-        
+
         getRelativePath = function()
         {
             relativePath <- c(private$name)
@@ -87,7 +87,7 @@ Subcollection <- R6::R6Class(
                                "or Subcollection with same name."))
 
                 if(!is.null(private$collection))
-                {       
+                {
                     if(self$getRelativePath() != "")
                         contentPath <- paste0(self$getRelativePath(),
                                               "/", content$getFileListing())
@@ -302,7 +302,7 @@ Subcollection <- R6::R6Class(
             content
         }
     ),
-    
+
     cloneable = FALSE
 )
 
@@ -312,7 +312,7 @@ Subcollection <- R6::R6Class(
 #'
 #' @param x Instance of Subcollection class
 #' @param ... Optional arguments.
-#' @export 
+#' @export
 print.Subcollection = function(x, ...)
 {
     collection   <- NULL
index 3e8c2fa0cf2b1494c33a7246a9f97a8669a3b514..1aef20b6cb90fe11d7440219bbe24d464af988c2 100644 (file)
@@ -343,7 +343,7 @@ genMethodsDoc <- function(methodResources, resourceNames)
     }, methodResources, resourceNames)))
 
     projectDoc <- genProjectMethodsDoc()
-    
+
     c(methodsDoc, projectDoc)
 }
 
@@ -401,10 +401,10 @@ getAPIClassMethodList <- function(methodResources, resourceNames)
                methodNames[!(methodNames %in% c("index", "show", "destroy"))])
 
     }, methodResources, resourceNames)))
-    
+
     hardcodedMethods <- c("projects.create", "projects.get",
                           "projects.list", "projects.update", "projects.delete")
-    paste0("#' \t\\item{}{\\code{\\link{", sort(c(methodList, hardcodedMethods)), "}}}") 
+    paste0("#' \t\\item{}{\\code{\\link{", sort(c(methodList, hardcodedMethods)), "}}}")
 }
 
 getMethodDoc <- function(methodName, methodMetaData)
@@ -447,7 +447,7 @@ getMethodDescription <- function(methodMetaData)
                                  className <- sapply(prop, function(ref) ref)
                                  objectName <- paste0(tolower(substr(className, 1, 1)),
                                                       substr(className, 2, nchar(className)))
-                                 paste("#' @param", objectName, className, "object.") 
+                                 paste("#' @param", objectName, className, "object.")
                              })))
     }
 
@@ -457,7 +457,7 @@ getMethodDescription <- function(methodMetaData)
     {
         arg <- methodMetaData$parameters[[argName]]
         argDescription <- arg$description
-        paste("#' @param", argName, argDescription) 
+        paste("#' @param", argName, argDescription)
     })))
 
     c(requestDoc, argsDoc)
@@ -541,7 +541,7 @@ formatArgs <- function(prependAtStart, prependToEachSplit,
 {
     if(length(args) > 1)
     {
-        args[1:(length(args) - 1)] <- paste0(args[1:(length(args) - 1)], ",") 
+        args[1:(length(args) - 1)] <- paste0(args[1:(length(args) - 1)], ",")
     }
 
     args[1] <- paste0(prependAtStart, args[1])
@@ -564,12 +564,12 @@ formatArgs <- function(prependAtStart, prependToEachSplit,
 
         argLines <- c(argLines, line)
     }
-    
+
     argLines <- unlist(argLines)
     argLinesLen <- length(argLines)
 
     if(argLinesLen > 1)
-        argLines[2:argLinesLen] <- paste0(prependToEachSplit, argLines[2:argLinesLen]) 
+        argLines[2:argLinesLen] <- paste0(prependToEachSplit, argLines[2:argLinesLen])
 
     argLines
 }
index c97572c193f1eadbd315928fb09d56aff5e2d7a2..c23283989a9c982146168a4ec883a670bd2e7510 100644 (file)
@@ -11,13 +11,13 @@ FakeHttpParser <- R6::R6Class(
         validContentTypes = NULL,
         parserCallCount = NULL,
 
-        initialize = function() 
+        initialize = function()
         {
             self$parserCallCount <- 0
             self$validContentTypes <- c("text", "raw")
         },
 
-        parseJSONResponse = function(serverResponse) 
+        parseJSONResponse = function(serverResponse)
         {
             self$parserCallCount <- self$parserCallCount + 1
 
@@ -47,7 +47,7 @@ FakeHttpParser <- R6::R6Class(
             serverResponse
         },
 
-        getFileSizesFromResponse = function(serverResponse, uri)    
+        getFileSizesFromResponse = function(serverResponse, uri)
         {
             self$parserCallCount <- self$parserCallCount + 1
 
index 2633abdf2c745bf0e4c9afcee1b73b7c5751fbeb..2ebcda2e4d671dc91cef9ca6ca0cdcb6a2707e18 100644 (file)
@@ -22,11 +22,12 @@ FakeHttpRequest <- R6::R6Class(
         JSONEncodedBodyIsProvided               = NULL,
         requestBodyIsProvided                   = NULL,
 
-        numberOfGETRequests    = NULL,
-        numberOfDELETERequests = NULL,
-        numberOfPUTRequests    = NULL,
-        numberOfPOSTRequests   = NULL,
-        numberOfMOVERequests   = NULL,
+        numberOfGETRequests        = NULL,
+        numberOfDELETERequests     = NULL,
+        numberOfPUTRequests        = NULL,
+        numberOfPOSTRequests       = NULL,
+        numberOfMOVERequests       = NULL,
+        numberOfgetConnectionCalls = NULL,
 
         initialize = function(expectedURL      = NULL,
                               serverResponse   = NULL,
@@ -57,6 +58,8 @@ FakeHttpRequest <- R6::R6Class(
             self$numberOfPOSTRequests   <- 0
             self$numberOfMOVERequests   <- 0
 
+            self$numberOfgetConnectionCalls <- 0
+
             self$serverMaxElementsPerRequest <- 5
         },
 
@@ -87,18 +90,24 @@ FakeHttpRequest <- R6::R6Class(
                 return(private$getElements(offset, limit))
             else
                 return(self$content)
+        },
+
+        getConnection = function(url, headers, openMode)
+        {
+            self$numberOfgetConnectionCalls <- self$numberOfgetConnectionCalls + 1
+            c(url, headers, openMode)
         }
     ),
 
     private = list(
 
-        validateURL = function(url) 
+        validateURL = function(url)
         {
             if(!is.null(self$expectedURL) && url == self$expectedURL)
                 self$URLIsProperlyConfigured <- TRUE
         },
 
-        validateHeaders = function(headers) 
+        validateHeaders = function(headers)
         {
             if(!is.null(headers$Authorization))
                 self$requestHeaderContainsAuthorizationField <- TRUE
@@ -115,11 +124,11 @@ FakeHttpRequest <- R6::R6Class(
 
         validateBody = function(body)
         {
-            if(!is.null(body))           
+            if(!is.null(body))
             {
                 self$requestBodyIsProvided <- TRUE
 
-                if(class(body) == "json")           
+                if(class(body) == "json")
                     self$JSONEncodedBodyIsProvided <- TRUE
             }
         },
@@ -143,7 +152,7 @@ FakeHttpRequest <- R6::R6Class(
             {
                 if(offset > self$content$items_available)
                     stop("Invalid offset")
-                
+
                 start <- offset + 1
             }
 
index 08e8717de5e4b97b5776c2c6cc8893c523f4c133..048013f566a3c737188dc04f876bee6d9ae8dd90 100644 (file)
@@ -153,14 +153,14 @@ FakeRESTService <- R6::R6Class(
             self$returnContent
         },
 
-        write = function(uuid, relativePath, content, contentType)
+        write = function(relativePath, uuid, content, contentType)
         {
             self$writeBuffer <- content
             self$writeCallCount <- self$writeCallCount + 1
             self$returnContent
         },
 
-        getConnection = function(relativePath, uuid, openMode)
+        getConnection = function(uuid, relativePath, openMode)
         {
             self$getConnectionCallCount <- self$getConnectionCallCount + 1
             self$returnContent
index fb14888aab91b982d88dbdddca0be9589f757fb8..1f559e999c52be207317b1f9f6f17332ab287ac0 100644 (file)
@@ -9,30 +9,30 @@ context("ArvadosFile")
 test_that("constructor raises error if  file name is empty string", {
 
     expect_that(ArvadosFile$new(""), throws_error("Invalid name."))
-}) 
+})
 
 test_that("getFileListing always returns file name", {
 
     dog <- ArvadosFile$new("dog")
 
     expect_that(dog$getFileListing(), equals("dog"))
-}) 
+})
 
 test_that("get always returns NULL", {
 
     dog <- ArvadosFile$new("dog")
-    
+
     responseIsNull <- is.null(dog$get("something"))
     expect_that(responseIsNull, is_true())
-}) 
+})
 
 test_that("getFirst always returns NULL", {
 
     dog <- ArvadosFile$new("dog")
-    
+
     responseIsNull <- is.null(dog$getFirst())
     expect_that(responseIsNull, is_true())
-}) 
+})
 
 test_that(paste("getSizeInBytes returns zero if arvadosFile",
                 "is not part of a collection"), {
@@ -40,7 +40,7 @@ test_that(paste("getSizeInBytes returns zero if arvadosFile",
     dog <- ArvadosFile$new("dog")
 
     expect_that(dog$getSizeInBytes(), equals(0))
-}) 
+})
 
 test_that(paste("getSizeInBytes delegates size calculation",
                 "to REST service class"), {
@@ -57,7 +57,7 @@ test_that(paste("getSizeInBytes delegates size calculation",
     resourceSize <- fish$getSizeInBytes()
 
     expect_that(resourceSize, equals(100))
-}) 
+})
 
 test_that("getRelativePath returns path relative to the tree root", {
 
@@ -69,7 +69,7 @@ test_that("getRelativePath returns path relative to the tree root", {
     fish$add(shark)
 
     expect_that(shark$getRelativePath(), equals("animal/fish/shark"))
-}) 
+})
 
 test_that("read raises exception if file doesn't belong to a collection", {
 
@@ -77,7 +77,7 @@ test_that("read raises exception if file doesn't belong to a collection", {
 
     expect_that(dog$read(),
                 throws_error("ArvadosFile doesn't belong to any collection."))
-}) 
+})
 
 test_that("read raises exception offset or length is negative number", {
 
@@ -96,7 +96,7 @@ test_that("read raises exception offset or length is negative number", {
                 throws_error("Offset and length must be positive values."))
     expect_that(fish$read(contentType = "text", offset = -1, length = -1),
                 throws_error("Offset and length must be positive values."))
-}) 
+})
 
 test_that("read delegates reading operation to REST service class", {
 
@@ -108,15 +108,15 @@ test_that("read delegates reading operation to REST service class", {
     api$setRESTService(fakeREST)
     collection <- Collection$new(api, "myUUID")
     fish <- collection$get("animal/fish")
-    
+
     fileContent <- fish$read("text")
 
     expect_that(fileContent, equals("my file"))
     expect_that(fakeREST$readCallCount, equals(1))
-}) 
+})
 
 test_that(paste("connection delegates connection creation ro RESTService class",
-                "which returns curl connection opened in read mode when", 
+                "which returns curl connection opened in read mode when",
                 "'r' of 'rb' is passed as argument"), {
 
     collectionContent <- c("animal", "animal/fish")
@@ -130,7 +130,7 @@ test_that(paste("connection delegates connection creation ro RESTService class",
     connection <- fish$connection("r")
 
     expect_that(fakeREST$getConnectionCallCount, equals(1))
-}) 
+})
 
 test_that(paste("connection returns textConnection opened",
                 "in write mode when 'w' is passed as argument"), {
@@ -152,7 +152,7 @@ test_that(paste("connection returns textConnection opened",
 
     expect_that(writeResult[1], equals("file"))
     expect_that(writeResult[2], equals("content"))
-}) 
+})
 
 test_that("flush sends data stored in a connection to a REST server", {
 
@@ -172,7 +172,7 @@ test_that("flush sends data stored in a connection to a REST server", {
     fish$flush()
 
     expect_that(fakeREST$writeBuffer, equals("file content"))
-}) 
+})
 
 test_that("write raises exception if file doesn't belong to a collection", {
 
@@ -180,7 +180,7 @@ test_that("write raises exception if file doesn't belong to a collection", {
 
     expect_that(dog$write(),
                 throws_error("ArvadosFile doesn't belong to any collection."))
-}) 
+})
 
 test_that("write delegates writing operation to REST service class", {
 
@@ -192,11 +192,11 @@ test_that("write delegates writing operation to REST service class", {
     api$setRESTService(fakeREST)
     collection <- Collection$new(api, "myUUID")
     fish <- collection$get("animal/fish")
-    
+
     fileContent <- fish$write("new file content")
 
     expect_that(fakeREST$writeBuffer, equals("new file content"))
-}) 
+})
 
 test_that(paste("move raises exception if arvados file",
                 "doesn't belong to any collection"), {
@@ -205,7 +205,7 @@ test_that(paste("move raises exception if arvados file",
 
     expect_that(animal$move("new/location"),
                 throws_error("ArvadosFile doesn't belong to any collection"))
-}) 
+})
 
 test_that(paste("move raises exception if newLocationInCollection",
                 "parameter is invalid"), {
@@ -227,7 +227,7 @@ test_that(paste("move raises exception if newLocationInCollection",
 
     expect_that(dog$move("objects/dog"),
                 throws_error("Unable to get destination subcollection"))
-}) 
+})
 
 test_that("move raises exception if new location contains content with the same name", {
 
@@ -248,7 +248,7 @@ test_that("move raises exception if new location contains content with the same
     expect_that(dog$move("dog"),
                 throws_error("Destination already contains content with same name."))
 
-}) 
+})
 
 test_that("move moves arvados file inside collection tree", {
 
index c3c70910e4c63acea6d86f5df71cc9bab9f3e72f..af5fabeb73c82c99cfee67e935a1ebfa8e61fd2c 100644 (file)
@@ -100,7 +100,7 @@ test_that("create raises exception if passed argumet is not character vector", {
     collection <- Collection$new(api, "myUUID")
 
     expect_that(collection$create(10),
-                throws_error("Expected character vector, got (numeric).", 
+                throws_error("Expected character vector, got (numeric).",
                              fixed = TRUE))
 })
 
@@ -156,7 +156,7 @@ test_that("remove raises exception if passed argumet is not character vector", {
     collection <- Collection$new(api, "myUUID")
 
     expect_that(collection$remove(10),
-                throws_error("Expected character vector, got (numeric).", 
+                throws_error("Expected character vector, got (numeric).",
                              fixed = TRUE))
 })
 
@@ -238,7 +238,7 @@ test_that("getFileListing returns sorted collection content received from REST s
     api$setRESTService(fakeREST)
     collection <- Collection$new(api, "myUUID")
 
-    contentMatchExpected <- all(collection$getFileListing() == 
+    contentMatchExpected <- all(collection$getFileListing() ==
                                 c("animal", "animal/fish", "ball"))
 
     expect_that(contentMatchExpected, is_true())
index 5c8a40526988bb562c45b5702fd921a743f0a77c..1a3aefecd012325658ad408ee2a699682907dbaf 100644 (file)
@@ -7,7 +7,7 @@ context("CollectionTree")
 test_that("constructor creates file tree from character array properly", {
 
     collection <- "myCollection"
-    characterArray <- c("animal", 
+    characterArray <- c("animal",
                         "animal/dog",
                         "boat")
 
@@ -44,12 +44,12 @@ test_that("constructor creates file tree from character array properly", {
     expect_that(boatIsOfTypeArvadosFile, is_true())
     expect_that(boatsParentIsRoot, is_true())
     expect_that(allElementsBelongToSameCollection, is_true())
-}) 
+})
 
 test_that("getElement returns element from tree if element exists on specified path", {
 
     collection <- "myCollection"
-    characterArray <- c("animal", 
+    characterArray <- c("animal",
                         "animal/dog",
                         "boat")
 
@@ -58,12 +58,12 @@ test_that("getElement returns element from tree if element exists on specified p
     dog <- collectionTree$getElement("animal/dog")
 
     expect_that(dog$getName(), equals("dog"))
-}) 
+})
 
 test_that("getElement returns NULL from tree if element doesn't exists on specified path", {
 
     collection <- "myCollection"
-    characterArray <- c("animal", 
+    characterArray <- c("animal",
                         "animal/dog",
                         "boat")
 
@@ -73,12 +73,12 @@ test_that("getElement returns NULL from tree if element doesn't exists on specif
     fishIsNULL <- is.null(fish)
 
     expect_that(fishIsNULL, is_true())
-}) 
+})
 
 test_that("getElement trims ./ from start of relativePath", {
 
     collection <- "myCollection"
-    characterArray <- c("animal", 
+    characterArray <- c("animal",
                         "animal/dog",
                         "boat")
 
@@ -88,12 +88,12 @@ test_that("getElement trims ./ from start of relativePath", {
     dogWithDotSlash <- collectionTree$getElement("./animal/dog")
 
     expect_that(dogWithDotSlash$getName(), equals(dog$getName()))
-}) 
+})
 
 test_that("getElement trims / from end of relativePath", {
 
     collection <- "myCollection"
-    characterArray <- c("animal", 
+    characterArray <- c("animal",
                         "animal/dog",
                         "boat")
 
@@ -103,4 +103,4 @@ test_that("getElement trims / from end of relativePath", {
     animalWithSlash <- collectionTree$getElement("animal/")
 
     expect_that(animalWithSlash$getName(), equals(animal$getName()))
-}) 
+})
index a119d88bf82fa226e26d5127f3ae001d1b515a2e..82c0fb0dd2fed88598e8fd14a8dd88a11d065b71 100644 (file)
@@ -20,7 +20,7 @@ test_that("parseJSONResponse generates and returns JSON object from server respo
 
     expect_that(barExists, is_true())
     expect_that(unlist(result$bar$foo), equals(10))
-}) 
+})
 
 test_that(paste("parseResponse generates and returns character vector",
                 "from server response if outputType is text"), {
@@ -35,10 +35,10 @@ test_that(paste("parseResponse generates and returns character vector",
     parsedResponse <- parser$parseResponse(serverResponse, "text")
 
     expect_that(parsedResponse, equals("random text"))
-}) 
+})
 
 
-webDAVResponseSample = 
+webDAVResponseSample =
     paste0("<?xml version=\"1.0\" encoding=\"UTF-8\"?><D:multistatus xmlns:",
            "D=\"DAV:\"><D:response><D:href>/c=aaaaa-bbbbb-ccccccccccccccc</D",
            ":href><D:propstat><D:prop><D:resourcetype><D:collection xmlns:D=",
@@ -76,7 +76,7 @@ test_that(paste("getFileNamesFromResponse returns file names belonging to specif
     resultMatchExpected <- all.equal(result, expectedResult)
 
     expect_that(resultMatchExpected, is_true())
-}) 
+})
 
 test_that(paste("getFileSizesFromResponse returns file sizes",
                 "parsed from webDAV server response"), {
@@ -93,4 +93,4 @@ test_that(paste("getFileSizesFromResponse returns file sizes",
     resultMatchExpected <- result == expectedResult
 
     expect_that(resultMatchExpected, is_true())
-}) 
+})
index 5ad8aa03115207035ee7f369ded5fbcd597e0ba7..f12463c805dda10e67325adb2a892d5223600932 100644 (file)
@@ -5,12 +5,12 @@
 context("Http Request")
 
 
-test_that("execyte raises exception if http verb is not valid", {
+test_that("execute raises exception if http verb is not valid", {
 
     http <- HttpRequest$new()
     expect_that(http$exec("FAKE VERB", "url"),
                throws_error("Http verb is not valid."))
-}) 
+})
 
 test_that("createQuery generates and encodes query portion of http", {
 
@@ -22,10 +22,87 @@ test_that("createQuery generates and encodes query portion of http", {
     expect_that(http$createQuery(queryParams),
                 equals(paste0("/?filters=%5B%5B%22color%22%2C%22%3D%22%2C%22red",
                               "%22%5D%5D&limit=20&offset=50")))
-}) 
+})
 
 test_that("createQuery generates and empty string when queryParams is an empty list", {
 
     http <- HttpRequest$new()
     expect_that(http$createQuery(list()), equals(""))
-}) 
+})
+
+test_that("exec calls httr functions correctly", {
+    httrNamespace <- getNamespace("httr")
+
+    # Monkeypatch httr functions and assert that they are called later
+    add_headersCalled <- FALSE
+    unlockBinding("add_headers", httrNamespace)
+    newAddHeaders <- function(h)
+    {
+        add_headersCalled <<- TRUE
+        list()
+    }
+    httrNamespace$add_headers <- newAddHeaders
+    lockBinding("add_headers", httrNamespace)
+
+    expectedConfig <- list()
+    retryCalled <- FALSE
+    unlockBinding("RETRY", httrNamespace)
+    newRETRY <- function(verb, url, body, config, times)
+    {
+        retryCalled <<- TRUE
+        expectedConfig <<- config
+    }
+    httrNamespace$RETRY <- newRETRY
+    lockBinding("RETRY", httrNamespace)
+
+    Sys.setenv("ARVADOS_API_HOST_INSECURE" = TRUE)
+    http <- HttpRequest$new()
+    http$exec("GET", "url")
+
+    expect_that(add_headersCalled, is_true())
+    expect_that(retryCalled, is_true())
+    expect_that(expectedConfig$options, equals(list(ssl_verifypeer = 0L)))
+})
+
+test_that("getConnection calls curl functions correctly", {
+    curlNamespace <- getNamespace("curl")
+
+    # Monkeypatch curl functions and assert that they are called later
+    curlCalled <- FALSE
+    unlockBinding("curl", curlNamespace)
+    newCurl <- function(url, open, handle) curlCalled <<- TRUE
+    curlNamespace$curl <- newCurl
+    lockBinding("curl", curlNamespace)
+
+    new_handleCalled <- FALSE
+    unlockBinding("new_handle", curlNamespace)
+    newHandleFun <- function()
+    {
+        new_handleCalled <<- TRUE
+        list()
+    }
+    curlNamespace$new_handle <- newHandleFun
+    lockBinding("new_handle", curlNamespace)
+
+    handle_setheadersCalled <- FALSE
+    unlockBinding("handle_setheaders", curlNamespace)
+    newHandleSetHeaders <- function(h, .list) handle_setheadersCalled <<- TRUE
+    curlNamespace$handle_setheaders <- newHandleSetHeaders
+    lockBinding("handle_setheaders", curlNamespace)
+
+    handle_setoptCalled <- FALSE
+    unlockBinding("handle_setopt", curlNamespace)
+    newHandleSetOpt <- function(h, ssl_verifypeer) handle_setoptCalled <<- TRUE
+    curlNamespace$handle_setopt <- newHandleSetOpt
+    lockBinding("handle_setopt", curlNamespace)
+
+
+    Sys.setenv("ARVADOS_API_HOST_INSECURE" = TRUE)
+    http <- HttpRequest$new()
+    http$getConnection("location", list(), "r")
+
+    expect_that(new_handleCalled, is_true())
+    expect_that(handle_setheadersCalled, is_true())
+    expect_that(handle_setoptCalled, is_true())
+    expect_that(curlCalled, is_true())
+})
index 859b6180f3380c2d834b99e126aa0c7761155368..26f459b17355903640676b7d4a717bd2c9052890 100644 (file)
@@ -22,7 +22,7 @@ test_that("getWebDavHostName calls REST service properly", {
     expect_that(httpRequest$URLIsProperlyConfigured, is_true())
     expect_that(httpRequest$requestHeaderContainsAuthorizationField, is_true())
     expect_that(httpRequest$numberOfGETRequests, equals(1))
-}) 
+})
 
 test_that("getWebDavHostName returns webDAV host name properly", {
 
@@ -32,8 +32,8 @@ test_that("getWebDavHostName returns webDAV host name properly", {
     REST <- RESTService$new("token", "host",
                             httpRequest, FakeHttpParser$new())
 
-    expect_that("https://myWebDavServer.com", equals(REST$getWebDavHostName())) 
-}) 
+    expect_that("https://myWebDavServer.com", equals(REST$getWebDavHostName()))
+})
 
 test_that("create calls REST service properly", {
 
@@ -51,7 +51,7 @@ test_that("create calls REST service properly", {
     expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
     expect_that(fakeHttp$numberOfPUTRequests, equals(1))
-}) 
+})
 
 test_that("create raises exception if server response code is not between 200 and 300", {
 
@@ -60,13 +60,13 @@ test_that("create raises exception if server response code is not between 200 an
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, HttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$create("file", uuid),
                 throws_error("Server code: 404"))
-}) 
+})
 
 test_that("delete calls REST service properly", {
 
@@ -75,7 +75,7 @@ test_that("delete calls REST service properly", {
     fakeHttp <- FakeHttpRequest$new(expectedURL)
     fakeHttpParser <- FakeHttpParser$new()
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, fakeHttpParser,
                             0, "https://webDavHost/")
 
@@ -84,7 +84,7 @@ test_that("delete calls REST service properly", {
     expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
     expect_that(fakeHttp$numberOfDELETERequests, equals(1))
-}) 
+})
 
 test_that("delete raises exception if server response code is not between 200 and 300", {
 
@@ -99,7 +99,7 @@ test_that("delete raises exception if server response code is not between 200 an
 
     expect_that(REST$delete("file", uuid),
                 throws_error("Server code: 404"))
-}) 
+})
 
 test_that("move calls REST service properly", {
 
@@ -108,7 +108,7 @@ test_that("move calls REST service properly", {
     fakeHttp <- FakeHttpRequest$new(expectedURL)
     fakeHttpParser <- FakeHttpParser$new()
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, fakeHttpParser,
                             0, "https://webDavHost/")
 
@@ -118,7 +118,7 @@ test_that("move calls REST service properly", {
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
     expect_that(fakeHttp$requestHeaderContainsDestinationField, is_true())
     expect_that(fakeHttp$numberOfMOVERequests, equals(1))
-}) 
+})
 
 test_that("move raises exception if server response code is not between 200 and 300", {
 
@@ -127,13 +127,13 @@ test_that("move raises exception if server response code is not between 200 and
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, HttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$move("file", "newDestination/file", uuid),
                 throws_error("Server code: 404"))
-}) 
+})
 
 test_that("getCollectionContent retreives correct content from WebDAV server", {
 
@@ -145,7 +145,7 @@ test_that("getCollectionContent retreives correct content from WebDAV server", {
 
     fakeHttp <- FakeHttpRequest$new(expectedURL, returnContent)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, FakeHttpParser$new(),
                             0, "https://webDavHost/")
 
@@ -155,7 +155,7 @@ test_that("getCollectionContent retreives correct content from WebDAV server", {
 
     expect_that(returnedContentMatchExpected, is_true())
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
-}) 
+})
 
 test_that("getCollectionContent raises exception if server returns empty response", {
 
@@ -163,26 +163,26 @@ test_that("getCollectionContent raises exception if server returns empty respons
     response <- ""
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, FakeHttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$getCollectionContent(uuid),
                 throws_error("Response is empty, request may be misconfigured"))
-}) 
+})
 
 test_that("getCollectionContent parses server response", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             FakeHttpRequest$new(), fakeHttpParser,
                             0, "https://webDavHost/")
 
     REST$getCollectionContent(uuid)
 
     expect_that(fakeHttpParser$parserCallCount, equals(1))
-}) 
+})
 
 test_that("getCollectionContent raises exception if server returns empty response", {
 
@@ -190,13 +190,13 @@ test_that("getCollectionContent raises exception if server returns empty respons
     response <- ""
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, FakeHttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$getCollectionContent(uuid),
                 throws_error("Response is empty, request may be misconfigured"))
-}) 
+})
 
 test_that(paste("getCollectionContent raises exception if server",
                 "response code is not between 200 and 300"), {
@@ -206,13 +206,13 @@ test_that(paste("getCollectionContent raises exception if server",
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, HttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$getCollectionContent(uuid),
                 throws_error("Server code: 404"))
-}) 
+})
 
 
 test_that("getResourceSize calls REST service properly", {
@@ -235,7 +235,7 @@ test_that("getResourceSize calls REST service properly", {
     expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
     expect_that(returnedContentMatchExpected, is_true())
-}) 
+})
 
 test_that("getResourceSize raises exception if server returns empty response", {
 
@@ -243,13 +243,13 @@ test_that("getResourceSize raises exception if server returns empty response", {
     response <- ""
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, FakeHttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$getResourceSize("file", uuid),
                 throws_error("Response is empty, request may be misconfigured"))
-}) 
+})
 
 test_that(paste("getResourceSize raises exception if server",
                 "response code is not between 200 and 300"), {
@@ -259,26 +259,26 @@ test_that(paste("getResourceSize raises exception if server",
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, HttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$getResourceSize("file", uuid),
                 throws_error("Server code: 404"))
-}) 
+})
 
 test_that("getResourceSize parses server response", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             FakeHttpRequest$new(), fakeHttpParser,
                             0, "https://webDavHost/")
 
     REST$getResourceSize("file", uuid)
 
     expect_that(fakeHttpParser$parserCallCount, equals(1))
-}) 
+})
 
 test_that("read calls REST service properly", {
 
@@ -290,7 +290,7 @@ test_that("read calls REST service properly", {
 
     fakeHttp <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, FakeHttpParser$new(),
                             0, "https://webDavHost/")
 
@@ -300,7 +300,7 @@ test_that("read calls REST service properly", {
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
     expect_that(fakeHttp$requestHeaderContainsRangeField, is_true())
     expect_that(returnResult, equals("file content"))
-}) 
+})
 
 test_that("read raises exception if server response code is not between 200 and 300", {
 
@@ -309,48 +309,48 @@ test_that("read raises exception if server response code is not between 200 and
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, HttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$read("file", uuid),
                 throws_error("Server code: 404"))
-}) 
+})
 
 test_that("read raises exception if contentType is not valid", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttp <- FakeHttpRequest$new()
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, HttpParser$new(),
                             0, "https://webDavHost/")
 
     expect_that(REST$read("file", uuid, "some invalid content type"),
                 throws_error("Invalid contentType. Please use text or raw."))
-}) 
+})
 
 test_that("read parses server response", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             FakeHttpRequest$new(), fakeHttpParser,
                             0, "https://webDavHost/")
 
     REST$read("file", uuid, "text", 1024, 512)
 
     expect_that(fakeHttpParser$parserCallCount, equals(1))
-}) 
+})
 
 test_that("write calls REST service properly", {
 
-    fileContent <- "new file content" 
+    fileContent <- "new file content"
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     expectedURL <- "https://webDavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
     fakeHttp <- FakeHttpRequest$new(expectedURL)
 
-    REST <- RESTService$new("token", "https://host/", 
+    REST <- RESTService$new("token", "https://host/",
                             fakeHttp, FakeHttpParser$new(),
                             0, "https://webDavHost/")
 
@@ -360,12 +360,12 @@ test_that("write calls REST service properly", {
     expect_that(fakeHttp$requestBodyIsProvided, is_true())
     expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
     expect_that(fakeHttp$requestHeaderContainsContentTypeField, is_true())
-}) 
+})
 
 test_that("write raises exception if server response code is not between 200 and 300", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
-    fileContent <- "new file content" 
+    fileContent <- "new file content"
     response <- list()
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
@@ -376,4 +376,17 @@ test_that("write raises exception if server response code is not between 200 and
 
     expect_that(REST$write("file", uuid, fileContent, "text/html"),
                 throws_error("Server code: 404"))
-}) 
+})
+
+test_that("getConnection calls REST service properly", {
+    uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+    fakeHttp <- FakeHttpRequest$new()
+
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
+
+    REST$getConnection("file", uuid, "r")
+
+    expect_that(fakeHttp$numberOfgetConnectionCalls, equals(1))
+})
index e025586c58a968f6c0d61a47512087a69d601635..6845801e59abb8155736fddcf4d92595ef67f018 100644 (file)
@@ -15,7 +15,7 @@ test_that("getRelativePath returns path relative to the tree root", {
 
     expect_that(animal$getRelativePath(), equals("animal"))
     expect_that(fish$getRelativePath(), equals("animal/fish"))
-}) 
+})
 
 test_that(paste("getFileListing by default returns sorted path of all files",
                 "relative to the current subcollection"), {
@@ -38,7 +38,7 @@ test_that(paste("getFileListing by default returns sorted path of all files",
                     all(expectedResult == result)
 
     expect_that(resultsMatch, is_true())
-}) 
+})
 
 test_that(paste("getFileListing returns sorted names of all direct children",
                 "if fullPath is set to FALSE"), {
@@ -59,7 +59,7 @@ test_that(paste("getFileListing returns sorted names of all direct children",
                     all(expectedResult == result)
 
     expect_that(resultsMatch, is_true())
-}) 
+})
 
 test_that("add adds content to inside collection tree", {
 
@@ -75,7 +75,7 @@ test_that("add adds content to inside collection tree", {
 
     expect_that(animalContainsFish, is_true())
     expect_that(animalContainsDog, is_true())
-}) 
+})
 
 test_that("add raises exception if content name is empty string", {
 
@@ -86,7 +86,7 @@ test_that("add raises exception if content name is empty string", {
                 throws_error("Content has invalid name.", fixed = TRUE))
 })
 
-test_that(paste("add raises exception if ArvadosFile/Subcollection", 
+test_that(paste("add raises exception if ArvadosFile/Subcollection",
                 "with same name already exists in the subcollection"), {
 
     animal     <- Subcollection$new("animal")
@@ -102,9 +102,9 @@ test_that(paste("add raises exception if ArvadosFile/Subcollection",
     expect_that(animal$add(thirdFish),
                 throws_error(paste("Subcollection already contains ArvadosFile or",
                                    "Subcollection with same name."), fixed = TRUE))
-}) 
+})
 
-test_that(paste("add raises exception if passed argument is", 
+test_that(paste("add raises exception if passed argument is",
                 "not ArvadosFile or Subcollection"), {
 
     animal <- Subcollection$new("animal")
@@ -113,11 +113,11 @@ test_that(paste("add raises exception if passed argument is",
     expect_that(animal$add(number),
                 throws_error(paste("Expected AravodsFile or Subcollection object,",
                                    "got (numeric)."), fixed = TRUE))
-}) 
+})
 
-test_that(paste("add post content to a REST service", 
+test_that(paste("add post content to a REST service",
                 "if subcollection belongs to a collection"), {
-    
+
     collectionContent <- c("animal", "animal/fish")
     fakeREST <- FakeRESTService$new(collectionContent)
 
@@ -131,7 +131,7 @@ test_that(paste("add post content to a REST service",
     animal$add(dog)
 
     expect_that(fakeREST$createCallCount, equals(1))
-}) 
+})
 
 test_that("remove removes content from subcollection", {
 
@@ -144,9 +144,9 @@ test_that("remove removes content from subcollection", {
     returnValueAfterRemovalIsNull <- is.null(animal$get("fish"))
 
     expect_that(returnValueAfterRemovalIsNull, is_true())
-}) 
+})
 
-test_that(paste("remove raises exception", 
+test_that(paste("remove raises exception",
                 "if content to remove doesn't exist in the subcollection"), {
 
     animal <- Subcollection$new("animal")
@@ -154,7 +154,7 @@ test_that(paste("remove raises exception",
     expect_that(animal$remove("fish"),
                 throws_error(paste("Subcollection doesn't contains ArvadosFile",
                                    "or Subcollection with specified name.")))
-}) 
+})
 
 test_that("remove raises exception if passed argument is not character vector", {
 
@@ -164,11 +164,11 @@ test_that("remove raises exception if passed argument is not character vector",
     expect_that(animal$remove(number),
                 throws_error(paste("Expected character,",
                                    "got (numeric)."), fixed = TRUE))
-}) 
+})
 
-test_that(paste("remove removes content from REST service", 
+test_that(paste("remove removes content from REST service",
                 "if subcollection belongs to a collection"), {
-    
+
     collectionContent <- c("animal", "animal/fish", "animal/dog")
     fakeREST <- FakeRESTService$new(collectionContent)
 
@@ -180,9 +180,9 @@ test_that(paste("remove removes content from REST service",
     animal$remove("fish")
 
     expect_that(fakeREST$deleteCallCount, equals(1))
-}) 
+})
 
-test_that(paste("get returns ArvadosFile or Subcollection", 
+test_that(paste("get returns ArvadosFile or Subcollection",
                 "if file or folder with given name exists"), {
 
     animal <- Subcollection$new("animal")
@@ -203,9 +203,9 @@ test_that(paste("get returns ArvadosFile or Subcollection",
 
     expect_that(returnedDogIsArvadosFile, is_true())
     expect_that(returnedDog$getName(), equals("dog"))
-}) 
+})
 
-test_that(paste("get returns NULL if file or folder", 
+test_that(paste("get returns NULL if file or folder",
                 "with given name doesn't exists"), {
 
     animal <- Subcollection$new("animal")
@@ -216,7 +216,7 @@ test_that(paste("get returns NULL if file or folder",
     returnedDogIsNull <- is.null(animal$get("dog"))
 
     expect_that(returnedDogIsNull, is_true())
-}) 
+})
 
 test_that("getFirst returns first child in the subcollection", {
 
@@ -226,7 +226,7 @@ test_that("getFirst returns first child in the subcollection", {
     animal$add(fish)
 
     expect_that(animal$getFirst()$getName(), equals("fish"))
-}) 
+})
 
 test_that("getFirst returns NULL if subcollection contains no children", {
 
@@ -235,7 +235,7 @@ test_that("getFirst returns NULL if subcollection contains no children", {
     returnedElementIsNull <- is.null(animal$getFirst())
 
     expect_that(returnedElementIsNull, is_true())
-}) 
+})
 
 test_that(paste("setCollection by default sets collection",
                 "filed of subcollection and all its children"), {
@@ -248,7 +248,7 @@ test_that(paste("setCollection by default sets collection",
 
     expect_that(animal$getCollection(), equals("myCollection"))
     expect_that(fish$getCollection(), equals("myCollection"))
-}) 
+})
 
 test_that(paste("setCollection sets collection filed of subcollection only",
                 "if parameter setRecursively is set to FALSE"), {
@@ -262,7 +262,7 @@ test_that(paste("setCollection sets collection filed of subcollection only",
 
     expect_that(animal$getCollection(), equals("myCollection"))
     expect_that(fishCollectionIsNull, is_true())
-}) 
+})
 
 test_that(paste("move raises exception if subcollection",
                 "doesn't belong to any collection"), {
@@ -271,7 +271,7 @@ test_that(paste("move raises exception if subcollection",
 
     expect_that(animal$move("new/location"),
                 throws_error("Subcollection doesn't belong to any collection"))
-}) 
+})
 
 test_that("move raises exception if new location contains content with the same name", {
 
@@ -290,7 +290,7 @@ test_that("move raises exception if new location contains content with the same
     expect_that(fish$move("fish"),
                 throws_error("Destination already contains content with same name."))
 
-}) 
+})
 
 test_that(paste("move raises exception if newLocationInCollection",
                 "parameter is invalid"), {
@@ -310,7 +310,7 @@ test_that(paste("move raises exception if newLocationInCollection",
 
     expect_that(fish$move("objects/dog"),
                 throws_error("Unable to get destination subcollection"))
-}) 
+})
 
 test_that("move moves subcollection inside collection tree", {
 
@@ -332,7 +332,7 @@ test_that("move moves subcollection inside collection tree", {
 
     expect_that(fishIsNullOnOldLocation, is_true())
     expect_that(fishExistsOnNewLocation, is_true())
-}) 
+})
 
 test_that(paste("getSizeInBytes returns zero if subcollection",
                 "is not part of a collection"), {
@@ -340,7 +340,7 @@ test_that(paste("getSizeInBytes returns zero if subcollection",
     animal <- Subcollection$new("animal")
 
     expect_that(animal$getSizeInBytes(), equals(0))
-}) 
+})
 
 test_that(paste("getSizeInBytes delegates size calculation",
                 "to REST service class"), {
index 9f5e07c1767af6c089274a308dc3dc270fb25c2f..419e8785fdf53d0b7c0ef538e6dc9eeb8f7a8ee0 100644 (file)
@@ -26,7 +26,7 @@ test_that("listAll always returns all resource items from server", {
     result <- listAll(testFunction)
 
     expect_that(length(result), equals(8))
-}) 
+})
 
 test_that("trimFromStart trims string correctly if string starts with trimCharacters", {
 
@@ -36,7 +36,7 @@ test_that("trimFromStart trims string correctly if string starts with trimCharac
     result <- trimFromStart(sample, trimCharacters)
 
     expect_that(result, equals("random"))
-}) 
+})
 
 test_that("trimFromStart returns original string if string doesn't starts with trimCharacters", {
 
@@ -46,7 +46,7 @@ test_that("trimFromStart returns original string if string doesn't starts with t
     result <- trimFromStart(sample, trimCharacters)
 
     expect_that(result, equals("./something/random"))
-}) 
+})
 
 test_that("trimFromEnd trims string correctly if string ends with trimCharacters", {
 
@@ -56,7 +56,7 @@ test_that("trimFromEnd trims string correctly if string ends with trimCharacters
     result <- trimFromEnd(sample, trimCharacters)
 
     expect_that(result, equals("./something"))
-}) 
+})
 
 test_that("trimFromEnd returns original string if string doesn't end with trimCharacters", {
 
@@ -66,11 +66,11 @@ test_that("trimFromEnd returns original string if string doesn't end with trimCh
     result <- trimFromStart(sample, trimCharacters)
 
     expect_that(result, equals("./something/random"))
-}) 
+})
 
 test_that("RListToPythonList converts nested R list to char representation of Python list", {
 
-    sample <- list("insert", list("random", list("text")), list("here")) 
+    sample <- list("insert", list("random", list("text")), list("here"))
 
     result              <- RListToPythonList(sample)
     resultWithSeparator <- RListToPythonList(sample, separator = ",+")
@@ -78,7 +78,7 @@ test_that("RListToPythonList converts nested R list to char representation of Py
     expect_that(result, equals("[\"insert\", [\"random\", \"text\"], \"here\"]"))
     expect_that(resultWithSeparator,
                 equals("[\"insert\",+[\"random\",+\"text\"],+\"here\"]"))
-}) 
+})
 
 test_that("appendToStartIfNotExist appends characters to beginning of a string", {
 
@@ -88,7 +88,7 @@ test_that("appendToStartIfNotExist appends characters to beginning of a string",
     result <- appendToStartIfNotExist(sample, charactersToAppend)
 
     expect_that(result, equals("Happy New Year"))
-}) 
+})
 
 test_that(paste("appendToStartIfNotExist returns original string if string",
                 "doesn't start with specified characters"), {
@@ -99,7 +99,7 @@ test_that(paste("appendToStartIfNotExist returns original string if string",
     result <- appendToStartIfNotExist(sample, charactersToAppend)
 
     expect_that(result, equals("Happy New Year"))
-}) 
+})
 
 test_that(paste("splitToPathAndName splits relative path to file/folder",
                 "name and rest of the path"), {
@@ -110,4 +110,4 @@ test_that(paste("splitToPathAndName splits relative path to file/folder",
 
     expect_that(result$name, equals("file.exe"))
     expect_that(result$path, equals("path/to/my"))
-}) 
+})
index fd48b4852df4f1223eb7ce6fc125fc2234e78f6d..f84636e077e2e5785ed9aa4cb58940beba58cbfc 100644 (file)
@@ -38,7 +38,7 @@ Gem::Specification.new do |s|
   s.add_runtime_dependency 'json', '>= 1.7.7', '<3'
   s.add_runtime_dependency 'trollop', '~> 2.0'
   s.add_runtime_dependency 'andand', '~> 1.3', '>= 1.3.3'
-  s.add_runtime_dependency 'oj', '~> 2.0', '>= 2.0.3'
+  s.add_runtime_dependency 'oj', '~> 3.0'
   s.add_runtime_dependency 'curb', '~> 0.8'
   s.homepage    =
     'https://arvados.org'
index 7d4d4bba176591a97e2d166c6e291e4588dbe99e..135b8d1d07e1fc6332f1320f614744eef4054dcd 100644 (file)
@@ -32,7 +32,6 @@ gem 'pg', '~> 0.18'
 
 gem 'multi_json'
 gem 'oj'
-gem 'oj_mimic_json'
 
 # for building assets
 gem 'sass-rails',   '~> 4.0'
@@ -62,7 +61,6 @@ gem 'faye-websocket'
 gem 'themes_for_rails', git: 'https://github.com/curoverse/themes_for_rails'
 
 gem 'arvados', '>= 0.1.20150615153458'
-gem 'arvados-cli', '>= 0.1.20161017193526'
 gem 'httpclient'
 
 gem 'sshkey'
index a3ff8e78997855640e93aa479d92dd93cb36b012..1514ce1342064ce9698f3905047255692a3e1a5e 100644 (file)
@@ -58,15 +58,6 @@ GEM
       i18n (~> 0)
       json (>= 1.7.7, < 3)
       jwt (>= 0.1.5, < 2)
-    arvados-cli (1.1.4.20180412190507)
-      activesupport (>= 3.2.13, < 5)
-      andand (~> 1.3, >= 1.3.3)
-      arvados (~> 0.1, >= 0.1.20150128223554)
-      curb (~> 0.8)
-      google-api-client (~> 0.6, >= 0.6.3, < 0.8.9)
-      json (>= 1.7.7, < 3)
-      oj (~> 2.0, >= 2.0.3)
-      trollop (~> 2.0)
     autoparse (0.3.3)
       addressable (>= 2.3.1)
       extlib (>= 0.9.15)
@@ -87,7 +78,6 @@ GEM
     coffee-script-source (1.12.2)
     concurrent-ruby (1.0.5)
     crass (1.0.4)
-    curb (0.9.4)
     database_cleaner (1.7.0)
     erubis (2.7.0)
     eventmachine (1.2.6)
@@ -179,8 +169,7 @@ GEM
       multi_json (~> 1.3)
       multi_xml (~> 0.5)
       rack (>= 1.2, < 3)
-    oj (2.18.5)
-    oj_mimic_json (1.0.1)
+    oj (3.6.4)
     omniauth (1.4.3)
       hashie (>= 1.2, < 4)
       rack (>= 1.6.2, < 3)
@@ -292,7 +281,6 @@ DEPENDENCIES
   acts_as_api
   andand
   arvados (>= 0.1.20150615153458)
-  arvados-cli (>= 0.1.20161017193526)
   coffee-rails (~> 4.0)
   database_cleaner
   factory_girl_rails
@@ -304,7 +292,6 @@ DEPENDENCIES
   mocha
   multi_json
   oj
-  oj_mimic_json
   omniauth (~> 1.4.0)
   omniauth-oauth2 (~> 1.1)
   passenger
@@ -328,4 +315,4 @@ DEPENDENCIES
   uglifier (~> 2.0)
 
 BUNDLED WITH
-   1.16.1
+   1.16.2
diff --git a/services/api/config/initializers/oj_mimic_json.rb b/services/api/config/initializers/oj_mimic_json.rb
new file mode 100644 (file)
index 0000000..ce2d40c
--- /dev/null
@@ -0,0 +1,11 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+require 'oj'
+
+Oj::Rails.set_encoder()
+Oj::Rails.set_decoder()
+Oj::Rails.optimize()
+Oj::Rails.mimic_JSON()
+
index 3d690930ae18a1a4d1956f0872b37eec77d9d228..78cabc87ac7cd5f66a07becb1207be53ff6e2af3 100644 (file)
@@ -2,6 +2,8 @@
 #
 # SPDX-License-Identifier: AGPL-3.0
 
+ActiveSupport::JSON::Encoding.time_precision = 9
+
 class ActiveSupport::TimeWithZone
   remove_method :as_json
   def as_json *args
index f4da283d746fcbecba6a03ce54fa041f0e3f58de..f78a3d34dc5d00b2d47ac8b4f9634d319c5462bc 100644 (file)
@@ -7,6 +7,12 @@ class SafeJSON
     return Oj.dump(o, mode: :compat)
   end
   def self.load(s)
+    if s.nil? or s == ''
+      # Oj 2.18.5 used to return nil. Not anymore on 3.6.4.
+      # Upgraded for performance issues (see #13803 and
+      # https://github.com/ohler55/oj/issues/441)
+      return nil
+    end
     Oj.strict_load(s, symbol_keys: false)
   end
 end
index c834250cb6caa89c28ff25ad942978dd14399949..6dbaa7550f55a8e49b035e6092c331304c6e4edb 100644 (file)
@@ -143,7 +143,7 @@ class ActiveSupport::TestCase
   end
 
   def self.slow_test(name, &block)
-    define_method(name, block) unless skip_slow_tests?
+    test(name, &block) unless skip_slow_tests?
   end
 end
 
index 23a8a0ca01124df89575c5724a4b6cb6650527fb..719ec98d27aa19d65eceb7d3db3a46f506aed2f0 100644 (file)
@@ -55,11 +55,12 @@ func (s *IntegrationSuite) TearDownTest(c *C) {
 }
 
 type slurmFake struct {
-       didBatch   [][]string
-       didCancel  []string
-       didRelease []string
-       didRenice  [][]string
-       queue      string
+       didBatch      [][]string
+       didCancel     []string
+       didRelease    []string
+       didRenice     [][]string
+       queue         string
+       rejectNice10K bool
        // If non-nil, run this func during the 2nd+ call to Cancel()
        onCancel func()
        // Error returned by Batch()
@@ -82,6 +83,9 @@ func (sf *slurmFake) Release(name string) error {
 
 func (sf *slurmFake) Renice(name string, nice int64) error {
        sf.didRenice = append(sf.didRenice, []string{name, fmt.Sprintf("%d", nice)})
+       if sf.rejectNice10K && nice > 10000 {
+               return errors.New("scontrol: error: Invalid nice value, must be between -10000 and 10000")
+       }
        return nil
 }
 
index 742943f197580e186e7fd1f7b8084a1357f3661d..fd4851eb0a8a92b48fcacef0e4552ce99d0a7f48 100644 (file)
@@ -14,11 +14,14 @@ import (
        "time"
 )
 
+const slurm15NiceLimit int64 = 10000
+
 type slurmJob struct {
        uuid         string
        wantPriority int64
        priority     int64 // current slurm priority (incorporates nice value)
        nice         int64 // current slurm nice value
+       hitNiceLimit bool
 }
 
 // Squeue implements asynchronous polling monitor of the SLURM queue using the
@@ -103,10 +106,18 @@ func (sqc *SqueueChecker) reniceAll() {
        })
        renice := wantNice(jobs, sqc.PrioritySpread)
        for i, job := range jobs {
-               if renice[i] == job.nice {
+               niceNew := renice[i]
+               if job.hitNiceLimit && niceNew > slurm15NiceLimit {
+                       niceNew = slurm15NiceLimit
+               }
+               if niceNew == job.nice {
                        continue
                }
-               sqc.Slurm.Renice(job.uuid, renice[i])
+               err := sqc.Slurm.Renice(job.uuid, niceNew)
+               if err != nil && niceNew > slurm15NiceLimit && strings.Contains(err.Error(), "Invalid nice value") {
+                       log.Printf("container %q clamping nice values at %d, priority order will not be correct -- see https://dev.arvados.org/projects/arvados/wiki/SLURM_integration#Limited-nice-values-SLURM-15", job.uuid, slurm15NiceLimit)
+                       job.hitNiceLimit = true
+               }
        }
 }
 
@@ -157,14 +168,17 @@ func (sqc *SqueueChecker) check() {
                replacing.nice = n
                newq[uuid] = replacing
 
-               if state == "PENDING" && ((reason == "BadConstraints" && p == 0) || reason == "launch failed requeued held") && replacing.wantPriority > 0 {
+               if state == "PENDING" && ((reason == "BadConstraints" && p <= 2*slurm15NiceLimit) || reason == "launch failed requeued held") && replacing.wantPriority > 0 {
                        // When using SLURM 14.x or 15.x, our queued
                        // jobs land in this state when "scontrol
                        // reconfigure" invalidates their feature
                        // constraints by clearing all node features.
                        // They stay in this state even after the
                        // features reappear, until we run "scontrol
-                       // release {jobid}".
+                       // release {jobid}". Priority is usually 0 in
+                       // this state, but sometimes (due to a race
+                       // with nice adjustments?) it's a small
+                       // positive value.
                        //
                        // "scontrol release" is silent and successful
                        // regardless of whether the features have
@@ -175,7 +189,7 @@ func (sqc *SqueueChecker) check() {
                        // "launch failed requeued held" seems to be
                        // another manifestation of this problem,
                        // resolved the same way.
-                       log.Printf("releasing held job %q", uuid)
+                       log.Printf("releasing held job %q (priority=%d, state=%q, reason=%q)", uuid, p, state, reason)
                        sqc.Slurm.Release(uuid)
                } else if p < 1<<20 && replacing.wantPriority > 0 {
                        log.Printf("warning: job %q has low priority %d, nice %d, state %q, reason %q", uuid, p, n, state, reason)
index c9329fdf95bf87028346fb727b8521dc8edfa1cd..ef036dabd781edd425b29fc28f847ae18370d700 100644 (file)
@@ -103,6 +103,50 @@ func (s *SqueueSuite) TestReniceAll(c *C) {
        }
 }
 
+// If a limited nice range prevents desired priority adjustments, give
+// up and clamp nice to 10K.
+func (s *SqueueSuite) TestReniceInvalidNiceValue(c *C) {
+       uuids := []string{"zzzzz-dz642-fake0fake0fake0", "zzzzz-dz642-fake1fake1fake1", "zzzzz-dz642-fake2fake2fake2"}
+       slurm := &slurmFake{
+               queue:         uuids[0] + " 0 4294000222 PENDING Resources\n" + uuids[1] + " 0 4294555222 PENDING Resources\n",
+               rejectNice10K: true,
+       }
+       sqc := &SqueueChecker{
+               Slurm:          slurm,
+               PrioritySpread: 1,
+               Period:         time.Hour,
+       }
+       sqc.startOnce.Do(sqc.start)
+       sqc.check()
+       sqc.SetPriority(uuids[0], 2)
+       sqc.SetPriority(uuids[1], 1)
+
+       // First attempt should renice to 555001, which will fail
+       sqc.reniceAll()
+       c.Check(slurm.didRenice, DeepEquals, [][]string{{uuids[1], "555001"}})
+
+       // Next attempt should renice to 10K, which will succeed
+       sqc.reniceAll()
+       c.Check(slurm.didRenice, DeepEquals, [][]string{{uuids[1], "555001"}, {uuids[1], "10000"}})
+       // ...so we'll change the squeue response to reflect the
+       // updated priority+nice, and make sure sqc sees that...
+       slurm.queue = uuids[0] + " 0 4294000222 PENDING Resources\n" + uuids[1] + " 10000 4294545222 PENDING Resources\n"
+       sqc.check()
+
+       // Next attempt should leave nice alone because it's already
+       // at the 10K limit
+       sqc.reniceAll()
+       c.Check(slurm.didRenice, DeepEquals, [][]string{{uuids[1], "555001"}, {uuids[1], "10000"}})
+
+       // Back to normal if desired nice value falls below 10K
+       slurm.queue = uuids[0] + " 0 4294000222 PENDING Resources\n" + uuids[1] + " 10000 4294000111 PENDING Resources\n"
+       sqc.check()
+       sqc.reniceAll()
+       c.Check(slurm.didRenice, DeepEquals, [][]string{{uuids[1], "555001"}, {uuids[1], "10000"}, {uuids[1], "9890"}})
+
+       sqc.Stop()
+}
+
 // If the given UUID isn't in the slurm queue yet, SetPriority()
 // should wait for it to appear on the very next poll, then give up.
 func (s *SqueueSuite) TestSetPriorityBeforeQueued(c *C) {
index e87fa4afd0db660c16af8a7ec78e68027620c531..dc70d968e2992a16581694ac70bbf42ba92f93ba 100644 (file)
@@ -617,7 +617,7 @@ func (s *ServerRequiredSuite) TestAskGetKeepProxyConnectionError(c *C) {
        kc := runProxy(c, nil, false)
        defer closeListener()
 
-       // Point keepproxy to a non-existant keepstore
+       // Point keepproxy at a non-existent keepstore
        locals := map[string]string{
                TestProxyUUID: "http://localhost:12345",
        }
index b4fec5096d5a8e2767169fce3910f45136ddaee3..77c515d565e8113681c2dad610d103fae4156a15 100644 (file)
@@ -243,12 +243,15 @@ class ComputeNodeShutdownActor(ComputeNodeStateChangeBase):
         return super(ComputeNodeShutdownActor, self)._finished()
 
     def cancel_shutdown(self, reason, **kwargs):
+        if not self.cancellable:
+            return False
         if self.cancel_reason is not None:
             # already cancelled
-            return
+            return False
         self.cancel_reason = reason
         self._logger.info("Shutdown cancelled: %s.", reason)
         self._finished(success_flag=False)
+        return True
 
     def _cancel_on_exception(orig_func):
         @functools.wraps(orig_func)
@@ -282,6 +285,7 @@ class ComputeNodeShutdownActor(ComputeNodeStateChangeBase):
         self._logger.info("Starting shutdown")
         arv_node = self._arvados_node()
         if self._cloud.destroy_node(self.cloud_node):
+            self.cancellable = False
             self._logger.info("Shutdown success")
             if arv_node:
                 self._later.clean_arvados_node(arv_node)
@@ -335,7 +339,7 @@ class ComputeNodeMonitorActor(config.actor_class):
     def __init__(self, cloud_node, cloud_node_start_time, shutdown_timer,
                  timer_actor, update_actor, cloud_client,
                  arvados_node=None, poll_stale_after=600, node_stale_after=3600,
-                 boot_fail_after=1800
+                 boot_fail_after=1800, consecutive_idle_count=0
     ):
         super(ComputeNodeMonitorActor, self).__init__()
         self._later = self.actor_ref.tell_proxy()
@@ -350,6 +354,8 @@ class ComputeNodeMonitorActor(config.actor_class):
         self.boot_fail_after = boot_fail_after
         self.subscribers = set()
         self.arvados_node = None
+        self.consecutive_idle_count = consecutive_idle_count
+        self.consecutive_idle = 0
         self._later.update_arvados_node(arvados_node)
         self.last_shutdown_opening = None
         self._later.consider_shutdown()
@@ -456,8 +462,14 @@ class ComputeNodeMonitorActor(config.actor_class):
         else:
             boot_grace = "boot exceeded"
 
-        # API server side not implemented yet.
-        idle_grace = 'idle exceeded'
+        if crunch_worker_state == "idle":
+            # Must report as "idle" at least "consecutive_idle_count" times
+            if self.consecutive_idle < self.consecutive_idle_count:
+                idle_grace = 'idle wait'
+            else:
+                idle_grace = 'idle exceeded'
+        else:
+            idle_grace = 'not idle'
 
         node_state = (crunch_worker_state, window, boot_grace, idle_grace)
         t = transitions[node_state]
@@ -517,4 +529,8 @@ class ComputeNodeMonitorActor(config.actor_class):
         if arvados_node is not None:
             self.arvados_node = arvados_node
             self._update.sync_node(self.cloud_node, self.arvados_node)
+            if self.arvados_node['crunch_worker_state'] == "idle":
+                self.consecutive_idle += 1
+            else:
+                self.consecutive_idle = 0
             self._later.consider_shutdown()
index 9e38d13eb7f4788d8af485a7e5b4b6589c9f324c..48d19f592bbdb0b87d905bac377c849000b59ef1 100644 (file)
@@ -35,8 +35,10 @@ class BaseComputeNodeDriver(RetryMixin):
         return driver_class(**auth_kwargs)
 
     @RetryMixin._retry()
-    def _set_sizes(self):
-        self.sizes = {sz.id: sz for sz in self.real.list_sizes()}
+    def sizes(self):
+        if self._sizes is None:
+            self._sizes = {sz.id: sz for sz in self.real.list_sizes()}
+        return self._sizes
 
     def __init__(self, auth_kwargs, list_kwargs, create_kwargs,
                  driver_class, retry_wait=1, max_retry_wait=180):
@@ -73,7 +75,7 @@ class BaseComputeNodeDriver(RetryMixin):
                 if new_pair is not None:
                     self.create_kwargs[new_pair[0]] = new_pair[1]
 
-        self._set_sizes()
+        self._sizes = None
 
     def _init_ping_host(self, ping_host):
         self.ping_host = ping_host
index ae554327ca20d929a92b595da54e32ba05e6485f..35c8b5a8c97db40b4d15a7ad20e20acaefdc605a 100644 (file)
@@ -89,8 +89,8 @@ echo %s > /var/tmp/arv-node-data/meta-data/instance-type
         for n in nodes:
             # Need to populate Node.size
             if not n.size:
-                n.size = self.sizes[n.extra["properties"]["hardwareProfile"]["vmSize"]]
-            n.extra['arvados_node_size'] = n.extra.get('tags', {}).get('arvados_node_size')
+                n.size = self.sizes()[n.extra["properties"]["hardwareProfile"]["vmSize"]]
+            n.extra['arvados_node_size'] = n.extra.get('tags', {}).get('arvados_node_size') or n.size.id
         return nodes
 
     def broken(self, cloud_node):
index 2829b9c0b1bead892aa83d10cf01f6aaa4f7e9a3..14845ac12fe31414e84749190593556516b6b224 100644 (file)
@@ -41,7 +41,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
         nodelist = super(ComputeNodeDriver, self).list_nodes()
         for node in nodelist:
             self._ensure_private_ip(node)
-            node.size = self.sizes["1"]
+            node.size = self.sizes()["1"]
         return nodelist
 
     def create_node(self, size, arvados_node):
index 2b1564279717d0d0159bd3c07b307b4b5675c98f..418a9f9d85499b64e592d614cfa793af70e694ca 100644 (file)
@@ -110,8 +110,8 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
         nodes = super(ComputeNodeDriver, self).list_nodes()
         for n in nodes:
             if not n.size:
-                n.size = self.sizes[n.extra["instance_type"]]
-            n.extra['arvados_node_size'] = n.extra.get('tags', {}).get('arvados_node_size')
+                n.size = self.sizes()[n.extra["instance_type"]]
+            n.extra['arvados_node_size'] = n.extra.get('tags', {}).get('arvados_node_size') or n.size.id
         return nodes
 
     @classmethod
index be39ecba6bf4b3cfb4ef6e0e5dd7c1168dc86ddd..23a1017316656cfe4323646ac9bba5e793f915cb 100644 (file)
@@ -38,7 +38,6 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
         super(ComputeNodeDriver, self).__init__(
             auth_kwargs, list_kwargs, create_kwargs,
             driver_class)
-        self._sizes_by_id = {sz.id: sz for sz in self.sizes.itervalues()}
         self._disktype_links = {dt.name: self._object_link(dt)
                                 for dt in self.real.ex_list_disktypes()}
 
@@ -120,9 +119,9 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
             # It's supposed to be the actual size object.  Check that it's not,
             # and monkeypatch the results when that's the case.
             if not hasattr(node.size, 'id'):
-                node.size = self._sizes_by_id[node.size]
+                node.size = self.sizes()[node.size]
             # Get arvados-assigned cloud size id
-            node.extra['arvados_node_size'] = node.extra.get('metadata', {}).get('arvados_node_size')
+            node.extra['arvados_node_size'] = node.extra.get('metadata', {}).get('arvados_node_size') or node.size.id
         return nodelist
 
     @classmethod
index 8c6757e51c451c253e5f16f57570d85bb52f3d7a..4fda7e76d69ed87aa1b5b032f1e3b1b8e608f5b5 100644 (file)
@@ -57,7 +57,8 @@ class NodeManagerConfig(ConfigParser.SafeConfigParser):
                        'boot_fail_after': str(sys.maxint),
                        'node_stale_after': str(60 * 60 * 2),
                        'watchdog': '600',
-                       'node_mem_scaling': '0.95'},
+                       'node_mem_scaling': '0.95',
+                       'consecutive_idle_count': '2'},
             'Manage': {'address': '127.0.0.1',
                        'port': '-1',
                        'ManagementToken': ''},
index 911798e08f937ded2d10e30b8b8fe7d64edd8f6b..1edf4dc4792e5b7a9f638a17599c66c76410ab84 100644 (file)
@@ -112,7 +112,8 @@ class NodeManagerDaemonActor(actor_class):
                  node_setup_class=dispatch.ComputeNodeSetupActor,
                  node_shutdown_class=dispatch.ComputeNodeShutdownActor,
                  node_actor_class=dispatch.ComputeNodeMonitorActor,
-                 max_total_price=0):
+                 max_total_price=0,
+                 consecutive_idle_count=1):
         super(NodeManagerDaemonActor, self).__init__()
         self._node_setup = node_setup_class
         self._node_shutdown = node_shutdown_class
@@ -133,6 +134,7 @@ class NodeManagerDaemonActor(actor_class):
         self.poll_stale_after = poll_stale_after
         self.boot_fail_after = boot_fail_after
         self.node_stale_after = node_stale_after
+        self.consecutive_idle_count = consecutive_idle_count
         self.last_polls = {}
         for poll_name in ['server_wishlist', 'arvados_nodes', 'cloud_nodes']:
             poll_actor = locals()[poll_name + '_actor']
@@ -173,7 +175,8 @@ class NodeManagerDaemonActor(actor_class):
             poll_stale_after=self.poll_stale_after,
             node_stale_after=self.node_stale_after,
             cloud_client=self._cloud_driver,
-            boot_fail_after=self.boot_fail_after)
+            boot_fail_after=self.boot_fail_after,
+            consecutive_idle_count=self.consecutive_idle_count)
         actorTell = actor.tell_proxy()
         actorTell.subscribe(self._later.node_can_shutdown)
         self._cloud_nodes_actor.subscribe_to(cloud_node.id,
@@ -390,22 +393,25 @@ class NodeManagerDaemonActor(actor_class):
         nodes_wanted = self._nodes_wanted(cloud_size)
         if nodes_wanted < 1:
             return None
-        arvados_node = self.arvados_nodes.find_stale_node(self.node_stale_after)
-        self._logger.info("Want %i more %s nodes.  Booting a node.",
-                          nodes_wanted, cloud_size.id)
-        new_setup = self._node_setup.start(
-            timer_actor=self._timer,
-            arvados_client=self._new_arvados(),
-            arvados_node=arvados_node,
-            cloud_client=self._new_cloud(),
-            cloud_size=self.server_calculator.find_size(cloud_size.id)).proxy()
-        self.booting[new_setup.actor_ref.actor_urn] = new_setup
-        self.sizes_booting[new_setup.actor_ref.actor_urn] = cloud_size
-
-        if arvados_node is not None:
-            self.arvados_nodes[arvados_node['uuid']].assignment_time = (
-                time.time())
-        new_setup.subscribe(self._later.node_setup_finished)
+
+        if not self.cancel_node_shutdown(cloud_size):
+            arvados_node = self.arvados_nodes.find_stale_node(self.node_stale_after)
+            self._logger.info("Want %i more %s nodes.  Booting a node.",
+                              nodes_wanted, cloud_size.id)
+            new_setup = self._node_setup.start(
+                timer_actor=self._timer,
+                arvados_client=self._new_arvados(),
+                arvados_node=arvados_node,
+                cloud_client=self._new_cloud(),
+                cloud_size=self.server_calculator.find_size(cloud_size.id))
+            self.booting[new_setup.actor_urn] = new_setup.proxy()
+            self.sizes_booting[new_setup.actor_urn] = cloud_size
+
+            if arvados_node is not None:
+                self.arvados_nodes[arvados_node['uuid']].assignment_time = (
+                    time.time())
+            new_setup.tell_proxy().subscribe(self._later.node_setup_finished)
+
         if nodes_wanted > 1:
             self._later.start_node(cloud_size)
 
@@ -456,13 +462,28 @@ class NodeManagerDaemonActor(actor_class):
         if (nodes_excess < 1) or not self.booting:
             return None
         for key, node in self.booting.iteritems():
-            if node and node.cloud_size.get().id == size.id and node.stop_if_no_cloud_node().get():
-                del self.booting[key]
-                del self.sizes_booting[key]
+            try:
+                if node and node.cloud_size.get().id == size.id and node.stop_if_no_cloud_node().get(2):
+                    del self.booting[key]
+                    del self.sizes_booting[key]
+                    if nodes_excess > 1:
+                        self._later.stop_booting_node(size)
+                    return
+            except pykka.Timeout:
+                pass
 
-                if nodes_excess > 1:
-                    self._later.stop_booting_node(size)
-                break
+    @_check_poll_freshness
+    def cancel_node_shutdown(self, size):
+        # Go through shutdown actors and see if there are any of the appropriate size that can be cancelled
+        for record in self.cloud_nodes.nodes.itervalues():
+            try:
+                if (record.shutdown_actor is not None and
+                    record.cloud_node.size.id == size.id and
+                    record.shutdown_actor.cancel_shutdown("Node size is in wishlist").get(2)):
+                        return True
+            except (pykka.ActorDeadError, pykka.Timeout) as e:
+                pass
+        return False
 
     def _begin_node_shutdown(self, node_actor, cancellable):
         cloud_node_obj = node_actor.cloud_node.get()
index 1020b4a80ced597911b886c40789dea39f1d5598..7ca9c9553721f0fa1291273bfeff5f5f9f7d0e78 100644 (file)
@@ -37,7 +37,10 @@ class ServerCalculator(object):
             self.scratch = 0
             self.cores = 0
             self.bandwidth = 0
-            self.price = 9999999
+            # price is multiplied by 1000 to get the node weight
+            # the maximum node weight is                  4294967280
+            # so use invalid node weight 4294967 * 1000 = 4294967000
+            self.price = 4294967
             self.preemptible = False
             self.extra = {}
 
index f65e0806ec56df96f81c5bed87f657b15355fdec..1439c94118a913179f09a928df38caaab4c24e04 100644 (file)
@@ -144,7 +144,8 @@ def main(args=None):
             config.getint('Daemon', 'boot_fail_after'),
             config.getint('Daemon', 'node_stale_after'),
             node_setup, node_shutdown, node_monitor,
-            max_total_price=config.getfloat('Daemon', 'max_total_price')).tell_proxy()
+            max_total_price=config.getfloat('Daemon', 'max_total_price'),
+            consecutive_idle_count=config.getint('Daemon', 'consecutive_idle_count'),).tell_proxy()
 
         watchdog = WatchdogActor.start(config.getint('Daemon', 'watchdog'),
                             cloud_node_poller.actor_ref,
index efd2445175589f761165aa7ff5746be7ab4b6f44..8ba68018d5840466698cf8a0cf19546887bf143b 100644 (file)
@@ -65,6 +65,15 @@ boot_fail_after = 1800
 # an Arvados node that hasn't been updated for this long.
 node_stale_after = 14400
 
+# Number of consecutive times a node must report as "idle" before it
+# will be considered eligible for shutdown.  Node status is checked
+# each poll period, and node can go idle at any point during a poll
+# period (meaning a node could be reported as idle that has only been
+# idle for 1 second).  With a 60 second poll period, three consecutive
+# status updates of "idle" suggests the node has been idle at least
+# 121 seconds.
+consecutive_idle_count = 3
+
 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
 # variable discrepancy between the advertised RAM value on cloud nodes and the
 # actual amount available.
@@ -74,6 +83,7 @@ node_mem_scaling = 0.95
 # File path for Certificate Authorities
 certs_file = /etc/ssl/certs/ca-certificates.crt
 
+
 [Logging]
 # Log file path
 file = /var/log/arvados/node-manager.log
index 117f9b224bff2f4ca567b64e09de81b4ed34c692..f5329ebe16213ad1d7fa37aff09212efce299603 100644 (file)
@@ -65,6 +65,15 @@ boot_fail_after = 1800
 # an Arvados node that hasn't been updated for this long.
 node_stale_after = 14400
 
+# Number of consecutive times a node must report as "idle" before it
+# will be considered eligible for shutdown.  Node status is checked
+# each poll period, and node can go idle at any point during a poll
+# period (meaning a node could be reported as idle that has only been
+# idle for 1 second).  With a 60 second poll period, three consecutive
+# status updates of "idle" suggests the node has been idle at least
+# 121 seconds.
+consecutive_idle_count = 3
+
 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
 # variable discrepancy between the advertised RAM value on cloud nodes and the
 # actual amount available.
index 8a244a444487052cd1543d9135448703741ca3e0..acd3fd1e3e6ab6a36720670f439cc2061f2c574f 100644 (file)
@@ -54,6 +54,15 @@ poll_stale_after = 600
 # an Arvados node that hasn't been updated for this long.
 node_stale_after = 14400
 
+# Number of consecutive times a node must report as "idle" before it
+# will be considered eligible for shutdown.  Node status is checked
+# each poll period, and node can go idle at any point during a poll
+# period (meaning a node could be reported as idle that has only been
+# idle for 1 second).  With a 60 second poll period, three consecutive
+# status updates of "idle" suggests the node has been idle at least
+# 121 seconds.
+consecutive_idle_count = 3
+
 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
 # variable discrepancy between the advertised RAM value on cloud nodes and the
 # actual amount available.
index 69a29019e78cb1ab7de2a8fdc41de85c8abc645a..1ba2957ee5544c9346bbb00bc3f0e2ad9e51276a 100755 (executable)
@@ -115,7 +115,10 @@ def node_shutdown(g):
     global compute_nodes
     if g.group(1) in compute_nodes:
         del compute_nodes[g.group(1)]
-    return 0
+        return 0
+    else:
+        return 1
+
 
 def jobs_req(g):
     global all_jobs
index 778c9aeaf5ffdbbcecaf90ac8072ace7210ce4a5..aee3cbdac8928cb8237357b9250d595bba349ba9 100644 (file)
@@ -424,7 +424,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
         self.make_actor()
         self.shutdowns._set_state(True, 600)
         self.assertEquals(self.node_actor.shutdown_eligible().get(self.TIMEOUT),
-                          (False, "node state is ('unpaired', 'open', 'boot wait', 'idle exceeded')"))
+                          (False, "node state is ('unpaired', 'open', 'boot wait', 'not idle')"))
 
     def test_shutdown_when_invalid_cloud_node_size(self):
         self.make_mocks(1)
@@ -438,7 +438,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
     def test_shutdown_without_arvados_node(self):
         self.make_actor(start_time=0)
         self.shutdowns._set_state(True, 600)
-        self.assertEquals((True, "node state is ('down', 'open', 'boot exceeded', 'idle exceeded')"),
+        self.assertEquals((True, "node state is ('down', 'open', 'boot exceeded', 'not idle')"),
                           self.node_actor.shutdown_eligible().get(self.TIMEOUT))
 
     def test_shutdown_missing(self):
@@ -447,7 +447,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
                                               last_ping_at='1970-01-01T01:02:03.04050607Z')
         self.make_actor(10, arv_node)
         self.shutdowns._set_state(True, 600)
-        self.assertEquals((True, "node state is ('down', 'open', 'boot wait', 'idle exceeded')"),
+        self.assertEquals((True, "node state is ('down', 'open', 'boot wait', 'not idle')"),
                           self.node_actor.shutdown_eligible().get(self.TIMEOUT))
 
     def test_shutdown_running_broken(self):
@@ -456,7 +456,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
         self.make_actor(12, arv_node)
         self.shutdowns._set_state(True, 600)
         self.cloud_client.broken.return_value = True
-        self.assertEquals((True, "node state is ('down', 'open', 'boot wait', 'idle exceeded')"),
+        self.assertEquals((True, "node state is ('down', 'open', 'boot wait', 'not idle')"),
                           self.node_actor.shutdown_eligible().get(self.TIMEOUT))
 
     def test_shutdown_missing_broken(self):
@@ -466,7 +466,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
         self.make_actor(11, arv_node)
         self.shutdowns._set_state(True, 600)
         self.cloud_client.broken.return_value = True
-        self.assertEquals(self.node_actor.shutdown_eligible().get(self.TIMEOUT), (True, "node state is ('down', 'open', 'boot wait', 'idle exceeded')"))
+        self.assertEquals(self.node_actor.shutdown_eligible().get(self.TIMEOUT), (True, "node state is ('down', 'open', 'boot wait', 'not idle')"))
 
     def test_no_shutdown_when_window_closed(self):
         self.make_actor(3, testutil.arvados_node_mock(3, job_uuid=None))
@@ -476,7 +476,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
     def test_no_shutdown_when_node_running_job(self):
         self.make_actor(4, testutil.arvados_node_mock(4, job_uuid=True))
         self.shutdowns._set_state(True, 600)
-        self.assertEquals((False, "node state is ('busy', 'open', 'boot wait', 'idle exceeded')"),
+        self.assertEquals((False, "node state is ('busy', 'open', 'boot wait', 'not idle')"),
                           self.node_actor.shutdown_eligible().get(self.TIMEOUT))
 
     def test_shutdown_when_node_state_unknown(self):
@@ -490,7 +490,7 @@ class ComputeNodeMonitorActorTestCase(testutil.ActorTestMixin,
         self.make_actor(5, testutil.arvados_node_mock(
             5, crunch_worker_state='fail'))
         self.shutdowns._set_state(True, 600)
-        self.assertEquals((True, "node state is ('fail', 'open', 'boot wait', 'idle exceeded')"),
+        self.assertEquals((True, "node state is ('fail', 'open', 'boot wait', 'not idle')"),
                           self.node_actor.shutdown_eligible().get(self.TIMEOUT))
 
     def test_no_shutdown_when_node_state_stale(self):
index d09cbf72359610ac08afa428e39f024d3086835c..1b6e4ca8da4aa24bfb45f8382e7b5d7700cd2bf2 100644 (file)
@@ -620,10 +620,26 @@ class NodeManagerDaemonActorTestCase(testutil.ActorTestMixin,
         monitor = self.monitor_list()[0].proxy()
         self.daemon.node_can_shutdown(monitor).get(self.TIMEOUT)
         self.assertTrue(self.node_shutdown.start.called)
+        getmock = mock.MagicMock()
+        getmock.get.return_value = False
+        self.last_shutdown.cancel_shutdown.return_value = getmock
         self.daemon.update_server_wishlist(
             [testutil.MockSize(6)]).get(self.TIMEOUT)
         self.busywait(lambda: self.node_setup.start.called)
 
+    def test_nodes_shutting_down_cancelled(self):
+        size = testutil.MockSize(6)
+        cloud_node = testutil.cloud_node_mock(6, size=size)
+        self.make_daemon([cloud_node], [testutil.arvados_node_mock(6, crunch_worker_state='down')],
+                         avail_sizes=[(size, {"cores":1})])
+        self.assertEqual(1, self.alive_monitor_count())
+        monitor = self.monitor_list()[0].proxy()
+        self.daemon.node_can_shutdown(monitor).get(self.TIMEOUT)
+        self.assertTrue(self.node_shutdown.start.called)
+        self.daemon.update_server_wishlist(
+            [testutil.MockSize(6)]).get(self.TIMEOUT)
+        self.busywait(lambda: self.last_shutdown.cancel_shutdown.called)
+
     def test_nodes_shutting_down_not_replaced_at_max_nodes(self):
         cloud_node = testutil.cloud_node_mock(7)
         self.make_daemon([cloud_node], [testutil.arvados_node_mock(7)],