Merge branch '13939-unqualified-contents-orders'
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 9 Aug 2018 14:18:05 +0000 (10:18 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 9 Aug 2018 14:18:05 +0000 (10:18 -0400)
fixes #13939

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

50 files changed:
build/build.list
build/package-testing/deb-common-test-packages.sh
build/run-library.sh
doc/css/code.css
sdk/R/DESCRIPTION
sdk/R/R/Arvados.R
sdk/R/R/ArvadosFile.R
sdk/R/R/Collection.R
sdk/R/R/CollectionTree.R
sdk/R/R/HttpRequest.R
sdk/R/R/RESTService.R
sdk/R/R/Subcollection.R
sdk/R/R/zzz.R
sdk/R/README.Rmd
sdk/R/man/Arvados.Rd
sdk/R/man/ArvadosFile.Rd
sdk/R/man/Collection.Rd
sdk/R/man/Subcollection.Rd
sdk/R/man/users.merge.Rd [new file with mode: 0644]
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-RESTService.R
sdk/R/tests/testthat/test-Subcollection.R
sdk/cwl/arvados_cwl/fsaccess.py
sdk/cwl/setup.py
sdk/cwl/tests/13931-size-job.yml [new file with mode: 0644]
sdk/cwl/tests/13931-size.cwl [new file with mode: 0644]
sdk/cwl/tests/arvados-tests.sh
sdk/cwl/tests/arvados-tests.yml
sdk/cwl/tests/test_container.py
sdk/cwl/tests/test_job.py
sdk/cwl/tests/test_submit.py
sdk/cwl/tests/wf/expect_packed.cwl
sdk/dev-jobs.dockerfile
sdk/go/dispatch/dispatch.go
services/api/app/models/collection.rb
services/api/config/application.rb
services/api/db/migrate/20180806133039_index_all_filenames.rb [new file with mode: 0644]
services/api/db/structure.sql
services/crunch-dispatch-slurm/crunch-dispatch-slurm.go
services/crunch-dispatch-slurm/crunch-dispatch-slurm_test.go
services/crunch-dispatch-slurm/squeue.go
services/keep-web/cache.go
services/keep-web/cache_test.go
services/keep-web/handler.go
services/keep-web/status_test.go
services/nodemanager/arvnodeman/config.py
services/nodemanager/arvnodeman/launcher.py

index ef6407031c41f286d47ad08e573f3020a48bf9e9..eb6ba220600e65b004c17e5bbef8de1f3030f4c2 100644 (file)
@@ -23,7 +23,7 @@ debian8,debian9,ubuntu1404,ubuntu1604,centos7|pyyaml|3.12|2|python|amd64
 debian8,debian9,ubuntu1404,ubuntu1604,centos7|rdflib|4.2.2|2|python|all
 debian8,debian9,ubuntu1404,centos7|shellescape|3.4.1|2|python|all
 debian8,debian9,ubuntu1404,ubuntu1604,centos7|mistune|0.7.3|2|python|all
-debian8,debian9,ubuntu1404,ubuntu1604,centos7|typing|3.5.3.0|2|python|all
+debian8,debian9,ubuntu1404,ubuntu1604,centos7|typing|3.6.2|2|python|all
 debian8,debian9,ubuntu1404,ubuntu1604,centos7|avro|1.8.1|2|python|all
 debian8,debian9,ubuntu1404,centos7|ruamel.ordereddict|0.4.9|2|python|amd64
 debian8,debian9,ubuntu1404,ubuntu1604,centos7|cachecontrol|0.11.7|2|python|all
@@ -40,6 +40,8 @@ centos7|python-daemon|2.1.2|1|python|all
 centos7|pbr|0.11.1|2|python|all
 centos7|pyparsing|2.1.10|2|python|all
 centos7|keepalive|0.5|2|python|all
+centos7|networkx|1.11|0|python|all
+centos7|psutil|5.0.1|0|python|all
 debian8,debian9,ubuntu1404,ubuntu1604,centos7|lockfile|0.12.2|2|python|all|--epoch 1
 debian8,debian9,ubuntu1404,ubuntu1604,centos7|subprocess32|3.5.1|2|python|all
 all|ruamel.yaml|0.14.12|2|python|amd64|--python-setup-py-arguments --single-version-externally-managed
@@ -50,3 +52,6 @@ all|futures|3.0.5|2|python|all
 all|future|0.16.0|2|python|all
 all|future|0.16.0|2|python3|all
 all|mypy-extensions|0.3.0|1|python|all
+all|prov|1.5.1|0|python|all
+all|bagit|1.6.4|0|python|all
+all|typing-extensions|3.6.5|0|python|all
index b4ea35c574b20a776960aeefad4d4e4d324a347e..900b091959107ace13d606f0a433d5d90c56f0d9 100755 (executable)
@@ -27,7 +27,13 @@ cd /tmp/opts
 
 export ARV_PACKAGES_DIR="/arvados/packages/$target"
 
-dpkg-deb -x $(ls -t "$ARV_PACKAGES_DIR/$1"_*.deb | head -n1) .
+if [[ -f $(ls -t "$ARV_PACKAGES_DIR/$1"_*.deb | head -n1) ]] ; then
+    debpkg=$(ls -t "$ARV_PACKAGES_DIR/$1"_*.deb | head -n1)
+else
+    debpkg=$(ls -t "$ARV_PACKAGES_DIR/processed/$1"_*.deb | head -n1)
+fi
+
+dpkg-deb -x $debpkg .
 
 while read so && [ -n "$so" ]; do
     echo
index c5a73cbe35a6116fdbed0b8f364f2af4f0e83df5..6ee57a4be5597114bbb0521d562883c3a1850399 100755 (executable)
@@ -60,7 +60,7 @@ version_from_git() {
     declare $(format_last_commit_here "git_ts=%ct git_hash=%h")
     ARVADOS_BUILDING_VERSION="$(git describe --abbrev=0).$(date -ud "@$git_ts" +%Y%m%d%H%M%S)"
     echo "$ARVADOS_BUILDING_VERSION"
-} 
+}
 
 nohash_version_from_git() {
     if [[ -n "$ARVADOS_BUILDING_VERSION" ]]; then
@@ -273,12 +273,15 @@ test_package_presence() {
           repo_subdir=${pkgname:0:1}
         fi
 
-        repo_pkg_list=$(curl -o - http://apt.arvados.org/pool/${D}/main/${repo_subdir}/)
+        repo_pkg_list=$(curl -s -o - http://apt.arvados.org/pool/${D}/main/${repo_subdir}/)
         echo ${repo_pkg_list} |grep -q ${complete_pkgname}
-        if [ $? -eq 0 ]; then
+        if [ $? -eq 0 ] ; then
           echo "Package $complete_pkgname exists, not rebuilding!"
           curl -o ./${complete_pkgname} http://apt.arvados.org/pool/${D}/main/${repo_subdir}/${complete_pkgname}
           return 1
+       elif test -f "$WORKSPACE/packages/$TARGET/processed/${complete_pkgname}" ; then
+          echo "Package $complete_pkgname exists, not rebuilding!"
+          return 1
         else
           echo "Package $complete_pkgname not found, building"
           return 0
index 543a14de0baff833edd73f63a76677c2f50fa055..ff4a58e12c6ed6bd0e0a4af38dcd7ee884839178 100644 (file)
@@ -29,3 +29,12 @@ table.code tr td:nth-child(2) {
 .userinput {
     color: #d14;
 }
+
+table.CodeRay {
+    margin-left: 3em;
+    width: calc(100% - 6em);
+}
+
+td.line-numbers {
+    width: 2em;
+}
index 19cf8fbabb537eb346102891438067c779cec46b..878a70901452b47e2710a52be85504179767ea38 100644 (file)
@@ -1,7 +1,7 @@
 Package: ArvadosR
 Type: Package
 Title: Arvados R SDK
-Version: 0.0.2
+Version: 0.0.5
 Authors@R: person("Fuad", "Muhic", role = c("aut", "cre"), email = "fmuhic@capeannenterprises.com")
 Maintainer: Ward Vandewege <wvandewege@veritasgenetics.com>
 Description: This is the Arvados R SDK
index 4b65546912393b52b4e05a4d1ecd21b83f44bd28..744cb3c296163906be8be5858e0713e8d43aa44e 100644 (file)
@@ -1,11 +1,7 @@
-# Copyright (C) The Arvados Authors. All rights reserved.
-#
-# 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 +9,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 +20,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 +31,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 +41,106 @@ 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.merge
+#' 
+#' users.merge is a method defined in Arvados class.
+#' 
+#' @usage arv$users.merge(new_owner_uuid,
+#'     new_user_token, redirect_to_new_user = NULL)
+#' @param new_owner_uuid 
+#' @param new_user_token 
+#' @param redirect_to_new_user 
+#' @return User object.
+#' @name users.merge
+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 +148,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 +160,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 +172,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 +182,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 +233,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 +245,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 +257,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 +267,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 +346,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 +358,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 +370,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,93 +380,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.
-#' @name authorized_keys.get
-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.
-#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
-#' @return AuthorizedKey object.
-#' @name authorized_keys.create
-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.
-#' @param uuid The UUID of the AuthorizedKey in question.
-#' @return AuthorizedKey object.
-#' @name authorized_keys.update
-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.
-#' @name authorized_keys.delete
-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
-#' @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 +410,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 +422,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 +434,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 +444,93 @@ 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
 
+#' 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.
+#' @name authorized_keys.get
+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.
+#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
+#' @return AuthorizedKey object.
+#' @name authorized_keys.create
+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.
+#' @param uuid The UUID of the AuthorizedKey in question.
+#' @return AuthorizedKey object.
+#' @name authorized_keys.update
+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.
+#' @name authorized_keys.delete
+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 
+#' @return AuthorizedKeyList object.
+#' @name authorized_keys.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 +538,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 +550,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 +562,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 +572,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 +643,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 +654,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 +665,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 +675,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 +705,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 +716,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 +727,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,128 +737,56 @@ 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.
-#' @name links.get
+#' 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.
+#' @name jobs.get
 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.
+#' 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.
-#' @return Link object.
-#' @name links.create
-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.
-#' @return Link object.
-#' @name links.update
-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.
-#' @name links.delete
-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
-#' @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
-#' @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.
-#' @name jobs.get
-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
-#' @return Job object.
-#' @name jobs.create
+#' @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 +795,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 +805,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 +883,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 +895,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 +907,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 +917,195 @@ 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
 
+#' 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.
+#' @name nodes.get
+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.
+#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
+#' @param assign_slot assign slot and hostname
+#' @return Node object.
+#' @name nodes.create
+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.
+#' @param assign_slot assign slot and hostname
+#' @return Node object.
+#' @name nodes.update
+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.
+#' @name nodes.delete
+NULL
+
+#' nodes.ping
+#' 
+#' nodes.ping is a method defined in Arvados class.
+#' 
+#' @usage arv$nodes.ping(uuid, 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 
+#' @return NodeList object.
+#' @name nodes.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.
+#' @name links.get
+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.
+#' @return Link object.
+#' @name links.create
+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.
+#' @return Link object.
+#' @name links.update
+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.
+#' @name links.delete
+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 
+#' @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 
+#' @return Link object.
+#' @name links.get_permissions
+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 +1113,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 +1125,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 +1137,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 +1147,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 +1186,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 +1198,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 +1210,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 +1220,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 +1250,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 +1262,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 +1274,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,115 +1284,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.
-#' @name nodes.get
-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.
-#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision.
-#' @param assign_slot assign slot and hostname
-#' @return Node object.
-#' @name nodes.create
-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.
-#' @param assign_slot assign slot and hostname
-#' @return Node object.
-#' @name nodes.update
-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.
-#' @name nodes.delete
-NULL
-
-#' nodes.ping
-#'
-#' nodes.ping is a method defined in Arvados class.
-#'
-#' @usage arv$nodes.ping(uuid, 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
-#' @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 +1324,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 +1336,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 +1348,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 +1358,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 +1397,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 +1409,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 +1421,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 +1431,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 +1461,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 +1472,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 +1483,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 +1493,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 +1522,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 +1533,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 +1544,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 +1554,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 +1584,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 +1596,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 +1608,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 +1618,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 +1667,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 +1679,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 +1691,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 +1701,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 +1731,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 +1742,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 +1753,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 +1763,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 +1836,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 +1848,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 +1860,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 +1870,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 +1927,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 +1938,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 +1949,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 +1959,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
@@ -2130,6 +2139,7 @@ NULL
 #'     \item{}{\code{\link{users.delete}}}
 #'     \item{}{\code{\link{users.get}}}
 #'     \item{}{\code{\link{users.list}}}
+#'     \item{}{\code{\link{users.merge}}}
 #'     \item{}{\code{\link{users.setup}}}
 #'     \item{}{\code{\link{users.system}}}
 #'     \item{}{\code{\link{users.unsetup}}}
@@ -2237,19 +2247,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 +2267,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 +2291,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 +2315,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 +2335,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 +2355,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 +2375,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 +2396,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 +2418,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 +2438,41 @@ 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
+               },
 
+               users.merge = function(new_owner_uuid, new_user_token,
+                       redirect_to_new_user = NULL)
+               {
+                       endPoint <- stringr::str_interp("users/merge")
+                       url <- paste0(private$host, endPoint)
+                       headers <- list(Authorization = paste("OAuth2", private$token), 
+                                       "Content-Type" = "application/json")
+                       queryArgs <- list(new_owner_uuid = new_owner_uuid,
+                                                         new_user_token = new_user_token, redirect_to_new_user = redirect_to_new_user)
+                       
+                       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 +2482,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 +2504,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 +2525,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 +2549,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 +2573,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 +2593,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 +2614,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 +2637,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 +2659,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 +2679,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 +2703,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 +2727,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 +2747,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 +2767,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 +2787,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 +2807,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 +2827,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 +2850,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 +2872,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 +2892,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 +2916,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 +2940,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,249 +2963,249 @@ 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
                },
 
-               authorized_keys.get = function(uuid)
+               container_requests.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("authorized_keys/${uuid}")
+                       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
                },
 
-               authorized_keys.create = function(authorizedkey,
+               container_requests.create = function(containerrequest,
                        ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("authorized_keys")
+                       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(authorizedkey) > 0)
-                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey),
+                       
+                       if(length(containerrequest) > 0)
+                               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
                },
 
-               authorized_keys.update = function(authorizedkey, uuid)
+               container_requests.update = function(containerrequest, uuid)
                {
-                       endPoint <- stringr::str_interp("authorized_keys/${uuid}")
+                       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(authorizedkey) > 0)
-                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey),
+                       
+                       if(length(containerrequest) > 0)
+                               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
                },
 
-               authorized_keys.delete = function(uuid)
+               container_requests.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("authorized_keys/${uuid}")
+                       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
                },
 
-               authorized_keys.list = function(filters = NULL,
+               container_requests.list = function(filters = NULL,
                        where = NULL, order = NULL, select = NULL,
                        distinct = NULL, limit = "100", offset = "0",
                        count = "exact")
                {
-                       endPoint <- stringr::str_interp("authorized_keys")
+                       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
                },
 
-               container_requests.get = function(uuid)
+               authorized_keys.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("container_requests/${uuid}")
+                       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
                },
 
-               container_requests.create = function(containerrequest,
+               authorized_keys.create = function(authorizedkey,
                        ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("container_requests")
+                       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(containerrequest) > 0)
-                               body <- jsonlite::toJSON(list(containerrequest = containerrequest),
+                       
+                       if(length(authorizedkey) > 0)
+                               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
                },
 
-               container_requests.update = function(containerrequest, uuid)
+               authorized_keys.update = function(authorizedkey, uuid)
                {
-                       endPoint <- stringr::str_interp("container_requests/${uuid}")
+                       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(containerrequest) > 0)
-                               body <- jsonlite::toJSON(list(containerrequest = containerrequest),
+                       
+                       if(length(authorizedkey) > 0)
+                               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
                },
 
-               container_requests.delete = function(uuid)
+               authorized_keys.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("container_requests/${uuid}")
+                       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
                },
 
-               container_requests.list = function(filters = NULL,
+               authorized_keys.list = function(filters = NULL,
                        where = NULL, order = NULL, select = NULL,
                        distinct = NULL, limit = "100", offset = "0",
                        count = "exact")
                {
-                       endPoint <- stringr::str_interp("container_requests")
+                       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
                },
 
@@ -3181,19 +3213,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 +3233,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 +3257,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 +3281,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 +3301,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 +3321,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 +3341,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 +3361,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 +3384,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 +3407,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 +3427,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 +3451,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 +3475,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 +3497,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 +3519,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 +3539,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 +3563,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 +3587,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,1008 +3610,1008 @@ 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
                },
 
-               links.get = function(uuid)
+               jobs.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("links/${uuid}")
+                       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
                },
 
-               links.create = function(link, ensure_unique_name = "false")
+               jobs.create = function(job, ensure_unique_name = "false",
+                       find_or_create = "false", filters = NULL,
+                       minimum_script_version = NULL, exclude_script_versions = NULL)
                {
-                       endPoint <- stringr::str_interp("links")
+                       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)
-
-                       if(length(link) > 0)
-                               body <- jsonlite::toJSON(list(link = link),
+                       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), 
                                                         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
                },
 
-               links.update = function(link, uuid)
+               jobs.update = function(job, uuid)
                {
-                       endPoint <- stringr::str_interp("links/${uuid}")
+                       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(link) > 0)
-                               body <- jsonlite::toJSON(list(link = link),
+                       
+                       if(length(job) > 0)
+                               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
                },
 
-               links.delete = function(uuid)
+               jobs.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("links/${uuid}")
+                       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
                },
 
-               links.list = function(filters = NULL, where = NULL,
+               jobs.queue = function(filters = NULL, where = NULL,
                        order = NULL, select = NULL, distinct = NULL,
                        limit = "100", offset = "0", count = "exact")
                {
-                       endPoint <- stringr::str_interp("links")
+                       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
                },
 
-               links.get_permissions = function(uuid)
+               jobs.queue_size = function()
                {
-                       endPoint <- stringr::str_interp("permissions/${uuid}")
+                       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
                },
 
-               jobs.get = function(uuid)
+               jobs.cancel = function(uuid)
                {
-                       endPoint <- stringr::str_interp("jobs/${uuid}")
+                       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("GET", url, headers, body,
+                       
+                       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
                },
 
-               jobs.create = function(job, ensure_unique_name = "false",
-                       find_or_create = "false", filters = NULL,
-                       minimum_script_version = NULL, exclude_script_versions = NULL)
+               jobs.lock = function(uuid)
                {
-                       endPoint <- stringr::str_interp("jobs")
+                       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 <- 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),
-                                                        auto_unbox = TRUE)
-                       else
-                               body <- NULL
-
+                       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
                },
 
-               jobs.update = function(job, uuid)
+               jobs.list = function(filters = NULL, where = NULL,
+                       order = NULL, select = NULL, distinct = NULL,
+                       limit = "100", offset = "0", count = "exact")
                {
-                       endPoint <- stringr::str_interp("jobs/${uuid}")
+                       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 <- NULL
-
-                       if(length(job) > 0)
-                               body <- jsonlite::toJSON(list(job = job),
-                                                        auto_unbox = TRUE)
-                       else
-                               body <- NULL
-
-                       response <- private$REST$http$exec("PUT", url, headers, body,
+                       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
                },
 
-               jobs.delete = function(uuid)
+               keep_disks.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("jobs/${uuid}")
+                       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,
+                       
+                       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
                },
 
-               jobs.queue = function(filters = NULL, where = NULL,
-                       order = NULL, select = NULL, distinct = NULL,
-                       limit = "100", offset = "0", count = "exact")
+               keep_disks.create = function(keepdisk, ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("jobs/queue")
+                       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 <- list(ensure_unique_name = ensure_unique_name)
+                       
+                       if(length(keepdisk) > 0)
+                               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
                },
 
-               jobs.queue_size = function()
+               keep_disks.update = function(keepdisk, uuid)
                {
-                       endPoint <- stringr::str_interp("jobs/queue_size")
+                       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,
+                       
+                       if(length(keepdisk) > 0)
+                               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
                },
 
-               jobs.cancel = function(uuid)
+               keep_disks.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("jobs/${uuid}/cancel")
+                       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("POST", url, headers, body,
+                       
+                       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
                },
 
-               jobs.lock = function(uuid)
+               keep_disks.ping = function(uuid = NULL, ping_secret,
+                       node_uuid = NULL, filesystem_uuid = NULL,
+                       service_host = NULL, service_port, service_ssl_flag)
                {
-                       endPoint <- stringr::str_interp("jobs/${uuid}/lock")
+                       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 <- NULL
-
+                       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
                },
 
-               jobs.list = function(filters = NULL, where = NULL,
-                       order = NULL, select = NULL, distinct = NULL,
-                       limit = "100", offset = "0", count = "exact")
+               keep_disks.list = function(filters = NULL,
+                       where = NULL, order = NULL, select = NULL,
+                       distinct = NULL, limit = "100", offset = "0",
+                       count = "exact")
                {
-                       endPoint <- stringr::str_interp("jobs")
+                       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
                },
 
-               keep_disks.get = function(uuid)
+               nodes.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("keep_disks/${uuid}")
+                       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
                },
 
-               keep_disks.create = function(keepdisk, ensure_unique_name = "false")
+               nodes.create = function(node, ensure_unique_name = "false",
+                       assign_slot = NULL)
                {
-                       endPoint <- stringr::str_interp("keep_disks")
+                       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)
-
-                       if(length(keepdisk) > 0)
-                               body <- jsonlite::toJSON(list(keepdisk = keepdisk),
+                       queryArgs <- list(ensure_unique_name = ensure_unique_name,
+                                                         assign_slot = assign_slot)
+                       
+                       if(length(node) > 0)
+                               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
                },
 
-               keep_disks.update = function(keepdisk, uuid)
+               nodes.update = function(node, uuid, assign_slot = NULL)
                {
-                       endPoint <- stringr::str_interp("keep_disks/${uuid}")
+                       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
-
-                       if(length(keepdisk) > 0)
-                               body <- jsonlite::toJSON(list(keepdisk = keepdisk),
+                       queryArgs <- list(assign_slot = assign_slot)
+                       
+                       if(length(node) > 0)
+                               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
                },
 
-               keep_disks.delete = function(uuid)
+               nodes.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("keep_disks/${uuid}")
+                       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
                },
 
-               keep_disks.ping = function(uuid = NULL, ping_secret,
-                       node_uuid = NULL, filesystem_uuid = NULL,
-                       service_host = NULL, service_port, service_ssl_flag)
+               nodes.ping = function(uuid, ping_secret)
                {
-                       endPoint <- stringr::str_interp("keep_disks/ping")
+                       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(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)
-
+                       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
                },
 
-               keep_disks.list = function(filters = NULL,
-                       where = NULL, order = NULL, select = NULL,
-                       distinct = NULL, limit = "100", offset = "0",
-                       count = "exact")
+               nodes.list = function(filters = NULL, where = NULL,
+                       order = NULL, select = NULL, distinct = NULL,
+                       limit = "100", offset = "0", count = "exact")
                {
-                       endPoint <- stringr::str_interp("keep_disks")
+                       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
                },
 
-               keep_services.get = function(uuid)
+               links.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("keep_services/${uuid}")
+                       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
                },
 
-               keep_services.create = function(keepservice,
-                       ensure_unique_name = "false")
+               links.create = function(link, ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("keep_services")
+                       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(keepservice) > 0)
-                               body <- jsonlite::toJSON(list(keepservice = keepservice),
+                       
+                       if(length(link) > 0)
+                               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
                },
 
-               keep_services.update = function(keepservice, uuid)
+               links.update = function(link, uuid)
                {
-                       endPoint <- stringr::str_interp("keep_services/${uuid}")
+                       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(keepservice) > 0)
-                               body <- jsonlite::toJSON(list(keepservice = keepservice),
+                       
+                       if(length(link) > 0)
+                               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
                },
 
-               keep_services.delete = function(uuid)
+               links.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("keep_services/${uuid}")
+                       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
                },
 
-               keep_services.accessible = function()
+               links.list = function(filters = NULL, where = NULL,
+                       order = NULL, select = NULL, distinct = NULL,
+                       limit = "100", offset = "0", count = "exact")
                {
-                       endPoint <- stringr::str_interp("keep_services/accessible")
+                       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 <- NULL
-
+                       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
                },
 
-               keep_services.list = function(filters = NULL,
-                       where = NULL, order = NULL, select = NULL,
-                       distinct = NULL, limit = "100", offset = "0",
-                       count = "exact")
+               links.get_permissions = function(uuid)
                {
-                       endPoint <- stringr::str_interp("keep_services")
+                       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 <- list(filters = filters, where = where,
-                                                         order = order, select = select, distinct = distinct,
-                                                         limit = limit, offset = offset, count = count)
-
+                       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
                },
 
-               pipeline_templates.get = function(uuid)
+               keep_services.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("pipeline_templates/${uuid}")
+                       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
                },
 
-               pipeline_templates.create = function(pipelinetemplate,
+               keep_services.create = function(keepservice,
                        ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("pipeline_templates")
+                       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(pipelinetemplate) > 0)
-                               body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate),
+                       
+                       if(length(keepservice) > 0)
+                               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
                },
 
-               pipeline_templates.update = function(pipelinetemplate, uuid)
+               keep_services.update = function(keepservice, uuid)
                {
-                       endPoint <- stringr::str_interp("pipeline_templates/${uuid}")
+                       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(pipelinetemplate) > 0)
-                               body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate),
+                       
+                       if(length(keepservice) > 0)
+                               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
                },
 
-               pipeline_templates.delete = function(uuid)
+               keep_services.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("pipeline_templates/${uuid}")
+                       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
+               },
 
+               keep_services.accessible = function()
+               {
+                       endPoint <- stringr::str_interp("keep_services/accessible")
+                       url <- paste0(private$host, endPoint)
+                       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
                },
 
-               pipeline_templates.list = function(filters = NULL,
+               keep_services.list = function(filters = NULL,
                        where = NULL, order = NULL, select = NULL,
                        distinct = NULL, limit = "100", offset = "0",
                        count = "exact")
                {
-                       endPoint <- stringr::str_interp("pipeline_templates")
+                       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
                },
 
-               pipeline_instances.get = function(uuid)
+               pipeline_templates.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("pipeline_instances/${uuid}")
+                       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
                },
 
-               pipeline_instances.create = function(pipelineinstance,
+               pipeline_templates.create = function(pipelinetemplate,
                        ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("pipeline_instances")
+                       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(pipelineinstance) > 0)
-                               body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance),
+                       
+                       if(length(pipelinetemplate) > 0)
+                               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
                },
 
-               pipeline_instances.update = function(pipelineinstance, uuid)
+               pipeline_templates.update = function(pipelinetemplate, uuid)
                {
-                       endPoint <- stringr::str_interp("pipeline_instances/${uuid}")
+                       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(pipelineinstance) > 0)
-                               body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance),
+                       
+                       if(length(pipelinetemplate) > 0)
+                               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
                },
 
-               pipeline_instances.delete = function(uuid)
+               pipeline_templates.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("pipeline_instances/${uuid}")
+                       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
-               },
-
-               pipeline_instances.cancel = function(uuid)
-               {
-                       endPoint <- stringr::str_interp("pipeline_instances/${uuid}/cancel")
-                       url <- paste0(private$host, endPoint)
-                       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
                },
 
-               pipeline_instances.list = function(filters = NULL,
+               pipeline_templates.list = function(filters = NULL,
                        where = NULL, order = NULL, select = NULL,
                        distinct = NULL, limit = "100", offset = "0",
                        count = "exact")
                {
-                       endPoint <- stringr::str_interp("pipeline_instances")
+                       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
                },
 
-               nodes.get = function(uuid)
+               pipeline_instances.get = function(uuid)
                {
-                       endPoint <- stringr::str_interp("nodes/${uuid}")
+                       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
                },
 
-               nodes.create = function(node, ensure_unique_name = "false",
-                       assign_slot = NULL)
+               pipeline_instances.create = function(pipelineinstance,
+                       ensure_unique_name = "false")
                {
-                       endPoint <- stringr::str_interp("nodes")
+                       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,
-                                                         assign_slot = assign_slot)
-
-                       if(length(node) > 0)
-                               body <- jsonlite::toJSON(list(node = node),
+                       queryArgs <- list(ensure_unique_name = ensure_unique_name)
+                       
+                       if(length(pipelineinstance) > 0)
+                               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
                },
 
-               nodes.update = function(node, uuid, assign_slot = NULL)
+               pipeline_instances.update = function(pipelineinstance, uuid)
                {
-                       endPoint <- stringr::str_interp("nodes/${uuid}")
+                       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 <- list(assign_slot = assign_slot)
-
-                       if(length(node) > 0)
-                               body <- jsonlite::toJSON(list(node = node),
+                       queryArgs <- NULL
+                       
+                       if(length(pipelineinstance) > 0)
+                               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
                },
 
-               nodes.delete = function(uuid)
+               pipeline_instances.delete = function(uuid)
                {
-                       endPoint <- stringr::str_interp("nodes/${uuid}")
+                       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
                },
 
-               nodes.ping = function(uuid, ping_secret)
+               pipeline_instances.cancel = function(uuid)
                {
-                       endPoint <- stringr::str_interp("nodes/${uuid}/ping")
+                       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 <- list(ping_secret = ping_secret)
-
+                       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
                },
 
-               nodes.list = function(filters = NULL, where = NULL,
-                       order = NULL, select = NULL, distinct = NULL,
-                       limit = "100", offset = "0", count = "exact")
+               pipeline_instances.list = function(filters = NULL,
+                       where = NULL, order = NULL, select = NULL,
+                       distinct = NULL, limit = "100", offset = "0",
+                       count = "exact")
                {
-                       endPoint <- stringr::str_interp("nodes")
+                       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
                },
 
@@ -4587,19 +4619,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 +4639,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 +4663,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 +4687,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 +4707,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 +4730,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 +4752,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 +4772,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 +4796,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 +4820,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 +4843,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 +4865,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 +4885,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 +4909,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 +4933,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 +4955,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 +4977,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 +4997,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 +5021,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 +5045,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 +5067,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 +5089,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 +5110,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 +5134,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 +5158,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 +5178,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 +5198,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 +5221,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 +5243,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 +5263,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 +5287,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 +5311,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 +5334,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 +5356,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 +5376,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 +5400,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 +5424,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 +5447,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 +5470,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 +5490,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 +5513,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 +5536,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 +5557,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 +5581,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 +5605,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 +5625,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 +5645,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 +5668,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 +5690,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 1071302892690a659370d41afaa4336316678362..70bb4450eccca6efd453002dc7a0962c904fb0d0 100644 (file)
@@ -26,7 +26,8 @@ source("./R/util.R")
 #'   \item{flush()}{Write connections content to a file (override current content of the file).}
 #'   \item{remove(name)}{Removes ArvadosFile or Subcollection specified by name from the subcollection.}
 #'   \item{getSizeInBytes()}{Returns file size in bytes.}
-#'   \item{move(newLocation)}{Moves file to a new location inside collection.}
+#'   \item{move(destination)}{Moves file to a new location inside collection.}
+#'   \item{copy(destination)}{Copies file to a new location inside collection.}
 #' }
 #'
 #' @name ArvadosFile
@@ -49,6 +50,7 @@ source("./R/util.R")
 #' mytable <- read.table(arvConnection)
 #'
 #' myFile$move("newFolder/myFile")
+#' myFile$copy("newFolder/myFile")
 #' }
 NULL
 
@@ -83,7 +85,6 @@ ArvadosFile <- R6::R6Class(
 
             fileSize <- REST$getResourceSize(self$getRelativePath(),
                                              private$collection$uuid)
-
             fileSize
         },
 
@@ -99,7 +100,7 @@ ArvadosFile <- R6::R6Class(
 
         getCollection = function() private$collection,
 
-        setCollection = function(collection)
+        setCollection = function(collection, setRecursively = TRUE)
         {
             private$collection <- collection
         },
@@ -176,20 +177,18 @@ ArvadosFile <- R6::R6Class(
             writeResult
         },
 
-        move = function(newLocation)
+        move = function(destination)
         {
             if(is.null(private$collection))
-                stop("ArvadosFile doesn't belong to any collection")
+                stop("ArvadosFile doesn't belong to any collection.")
 
-            newLocation <- trimFromEnd(newLocation, "/")
-            nameAndPath <- splitToPathAndName(newLocation)
+            destination <- trimFromEnd(destination, "/")
+            nameAndPath <- splitToPathAndName(destination)
 
             newParent <- private$collection$get(nameAndPath$path)
 
             if(is.null(newParent))
-            {
-                stop("Unable to get destination subcollection")
-            }
+                stop("Unable to get destination subcollection.")
 
             childWithSameName <- newParent$get(nameAndPath$name)
 
@@ -202,11 +201,50 @@ ArvadosFile <- R6::R6Class(
                       private$collection$uuid)
 
             private$dettachFromCurrentParent()
-            private$attachToNewParent(newParent)
+            private$attachToNewParent(self, newParent)
 
+            private$parent <- newParent
             private$name <- nameAndPath$name
 
-            "Content moved successfully."
+            self
+        },
+
+        copy = function(destination)
+        {
+            if(is.null(private$collection))
+                stop("ArvadosFile doesn't belong to any collection.")
+
+            destination <- trimFromEnd(destination, "/")
+            nameAndPath <- splitToPathAndName(destination)
+
+            newParent <- private$collection$get(nameAndPath$path)
+
+            if(is.null(newParent))
+                stop("Unable to get destination subcollection.")
+
+            childWithSameName <- newParent$get(nameAndPath$name)
+
+            if(!is.null(childWithSameName))
+                stop("Destination already contains content with same name.")
+
+            REST <- private$collection$getRESTService()
+            REST$copy(self$getRelativePath(),
+                      paste0(newParent$getRelativePath(), "/", nameAndPath$name),
+                      private$collection$uuid)
+
+            newFile <- self$duplicate(nameAndPath$name)
+            newFile$setCollection(self$getCollection())
+            private$attachToNewParent(newFile, newParent)
+            newFile$setParent(newParent)
+
+            newFile
+        },
+
+        duplicate = function(newName = NULL)
+        {
+            name <- if(!is.null(newName)) newName else private$name
+            newFile <- ArvadosFile$new(name)
+            newFile
         }
     ),
 
@@ -218,30 +256,29 @@ ArvadosFile <- R6::R6Class(
         collection = NULL,
         buffer     = NULL,
 
-        attachToNewParent = function(newParent)
+        attachToNewParent = function(content, newParent)
         {
-            #Note: We temporary set parents collection to NULL. This will ensure that
-            #      add method doesn't post file on REST.
+            # We temporary set parents collection to NULL. This will ensure that
+            # add method doesn't post this file on REST.
+            # We also need to set content's collection to NULL because
+            # add method throws exception if we try to add content that already
+            # belongs to a collection.
             parentsCollection <- newParent$getCollection()
+            content$setCollection(NULL, setRecursively = FALSE)
             newParent$setCollection(NULL, setRecursively = FALSE)
-
-            newParent$add(self)
-
+            newParent$add(content)
+            content$setCollection(parentsCollection, setRecursively = FALSE)
             newParent$setCollection(parentsCollection, setRecursively = FALSE)
-
-            private$parent <- newParent
         },
 
         dettachFromCurrentParent = function()
         {
-            #Note: We temporary set parents collection to NULL. This will ensure that
-            #      remove method doesn't remove this subcollection from REST.
+            # We temporary set parents collection to NULL. This will ensure that
+            # remove method doesn't remove this file from REST.
             parent <- private$parent
             parentsCollection <- parent$getCollection()
             parent$setCollection(NULL, setRecursively = FALSE)
-
             parent$remove(private$name)
-
             parent$setCollection(parentsCollection, setRecursively = FALSE)
         }
     ),
@@ -267,8 +304,8 @@ print.ArvadosFile = function(x, ...)
         relativePath <- paste0("/", relativePath)
     }
 
-    cat(paste0("Type:          ", "\"", "ArvadosFile",         "\""), sep = "\n")
-    cat(paste0("Name:          ", "\"", x$getName(),           "\""), sep = "\n")
-    cat(paste0("Relative path: ", "\"", relativePath,          "\""), sep = "\n")
-    cat(paste0("Collection:    ", "\"", collection,            "\""), sep = "\n")
+    cat(paste0("Type:          ", "\"", "ArvadosFile", "\""), sep = "\n")
+    cat(paste0("Name:          ", "\"", x$getName(),   "\""), sep = "\n")
+    cat(paste0("Relative path: ", "\"", relativePath,  "\""), sep = "\n")
+    cat(paste0("Collection:    ", "\"", collection,    "\""), sep = "\n")
 }
index 833b833c80f367ef59d4ca82ef78784e278cf73d..8869d7be67846b449200fe2c675936dd1c4133db 100644 (file)
@@ -23,9 +23,10 @@ source("./R/util.R")
 #' @section Methods:
 #' \describe{
 #'   \item{add(content)}{Adds ArvadosFile or Subcollection specified by content to the collection.}
-#'   \item{create(fileNames, relativePath = "")}{Creates one or more ArvadosFiles and adds them to the collection at specified path.}
+#'   \item{create(files)}{Creates one or more ArvadosFiles and adds them to the collection at specified path.}
 #'   \item{remove(fileNames)}{Remove one or more files from the collection.}
-#'   \item{move(content, newLocation)}{Moves ArvadosFile or Subcollection to another location in the collection.}
+#'   \item{move(content, destination)}{Moves ArvadosFile or Subcollection to another location in the collection.}
+#'   \item{copy(content, destination)}{Copies ArvadosFile or Subcollection to another location in the collection.}
 #'   \item{getFileListing()}{Returns collections file content as character vector.}
 #'   \item{get(relativePath)}{If relativePath is valid, returns ArvadosFile or Subcollection specified by relativePath, else returns NULL.}
 #' }
@@ -36,9 +37,6 @@ source("./R/util.R")
 #' arv <- Arvados$new("your Arvados token", "example.arvadosapi.com")
 #' collection <- Collection$new(arv, "uuid")
 #'
-#' newFile <- ArvadosFile$new("myFile")
-#' collection$add(newFile, "myFolder")
-#'
 #' createdFiles <- collection$create(c("main.cpp", lib.dll), "cpp/src/")
 #'
 #' collection$remove("location/to/my/file.cpp")
@@ -58,23 +56,17 @@ Collection <- R6::R6Class(
     public = list(
 
                uuid = NULL,
-        # api  = NULL,
 
                initialize = function(api, uuid)
         {
-            # self$api <- api
             private$REST <- api$getRESTService()
-
             self$uuid <- uuid
-
-            private$fileContent <- private$REST$getCollectionContent(uuid)
-            private$tree <- CollectionTree$new(private$fileContent, self)
         },
 
         add = function(content, relativePath = "")
         {
             if(is.null(private$tree))
-                private$genereateCollectionTreeStructure()
+                private$generateCollectionTreeStructure()
 
             if(relativePath == ""  ||
                relativePath == "." ||
@@ -94,6 +86,9 @@ Collection <- R6::R6Class(
             if("ArvadosFile"   %in% class(content) ||
                "Subcollection" %in% class(content))
             {
+                if(!is.null(content$getCollection()))
+                    stop("Content already belongs to a collection.")
+
                 if(content$getName() == "")
                     stop("Content has invalid name.")
 
@@ -108,50 +103,32 @@ Collection <- R6::R6Class(
             }
         },
 
-        create = function(fileNames, relativePath = "")
+        create = function(files)
         {
             if(is.null(private$tree))
-                private$genereateCollectionTreeStructure()
-
-            if(relativePath == ""  ||
-               relativePath == "." ||
-               relativePath == "./")
-            {
-                subcollection <- private$tree$getTree()
-            }
-            else
-            {
-                relativePath  <- trimFromEnd(relativePath, "/")
-                subcollection <- self$get(relativePath)
-            }
-
-            if(is.null(subcollection))
-                stop(paste("Subcollection", relativePath, "doesn't exist."))
+                private$generateCollectionTreeStructure()
 
-            if(is.character(fileNames))
+            if(is.character(files))
             {
-                arvadosFiles <- NULL
-                sapply(fileNames, function(fileName)
+                sapply(files, function(file)
                 {
-                    childWithSameName <- subcollection$get(fileName)
+                    childWithSameName <- self$get(file)
                     if(!is.null(childWithSameName))
                         stop("Destination already contains file with same name.")
 
-                    newFile <- ArvadosFile$new(fileName)
-                    subcollection$add(newFile)
+                    newTreeBranch <- private$tree$createBranch(file)
+                    private$tree$addBranch(private$tree$getTree(), newTreeBranch)
 
-                    arvadosFiles <<- c(arvadosFiles, newFile)
+                    private$REST$create(file, self$uuid)
+                    newTreeBranch$setCollection(self)
                 })
 
-                if(length(arvadosFiles) == 1)
-                    return(arvadosFiles[[1]])
-                else
-                    return(arvadosFiles)
+                "Created"
             }
             else
             {
                 stop(paste0("Expected character vector, got ",
-                            paste0("(", paste0(class(fileNames), collapse = ", "), ")"),
+                            paste0("(", paste0(class(files), collapse = ", "), ")"),
                             "."))
             }
         },
@@ -159,7 +136,7 @@ Collection <- R6::R6Class(
         remove = function(paths)
         {
             if(is.null(private$tree))
-                private$genereateCollectionTreeStructure()
+                private$generateCollectionTreeStructure()
 
             if(is.character(paths))
             {
@@ -189,10 +166,10 @@ Collection <- R6::R6Class(
             }
         },
 
-        move = function(content, newLocation)
+        move = function(content, destination)
         {
             if(is.null(private$tree))
-                private$genereateCollectionTreeStructure()
+                private$generateCollectionTreeStructure()
 
             content <- trimFromEnd(content, "/")
 
@@ -201,13 +178,37 @@ Collection <- R6::R6Class(
             if(is.null(elementToMove))
                 stop("Content you want to move doesn't exist in the collection.")
 
-            elementToMove$move(newLocation)
+            elementToMove$move(destination)
+        },
+
+        copy = function(content, destination)
+        {
+            if(is.null(private$tree))
+                private$generateCollectionTreeStructure()
+
+            content <- trimFromEnd(content, "/")
+
+            elementToCopy <- self$get(content)
+
+            if(is.null(elementToCopy))
+                stop("Content you want to copy doesn't exist in the collection.")
+
+            elementToCopy$copy(destination)
+        },
+
+        refresh = function()
+        {
+            if(!is.null(private$tree))
+            {
+                private$tree$getTree()$setCollection(NULL, setRecursively = TRUE)
+                private$tree <- NULL
+            }
         },
 
         getFileListing = function()
         {
             if(is.null(private$tree))
-                private$genereateCollectionTreeStructure()
+                private$generateCollectionTreeStructure()
 
             content <- private$REST$getCollectionContent(self$uuid)
             content[order(tolower(content))]
@@ -216,32 +217,11 @@ Collection <- R6::R6Class(
         get = function(relativePath)
         {
             if(is.null(private$tree))
-                private$genereateCollectionTreeStructure()
+                private$generateCollectionTreeStructure()
 
             private$tree$getElement(relativePath)
         },
 
-               toJSON = function()
-        {
-                       fields <- sapply(private$classFields, function(field)
-                       {
-                               self[[field]]
-                       }, USE.NAMES = TRUE)
-
-                       jsonlite::toJSON(list("collection" =
-                     Filter(Negate(is.null), fields)), auto_unbox = TRUE)
-               },
-
-               isEmpty = function() {
-                       fields <- sapply(private$classFields,
-                                        function(field) self[[field]])
-
-                       if(any(sapply(fields, function(field) !is.null(field) && field != "")))
-                               FALSE
-                       else
-                               TRUE
-               },
-
         getRESTService = function() private$REST,
         setRESTService = function(newRESTService) private$REST <- newRESTService
     ),
@@ -251,9 +231,8 @@ Collection <- R6::R6Class(
         REST        = NULL,
         tree        = NULL,
         fileContent = NULL,
-        classFields = NULL,
 
-        genereateCollectionTreeStructure = function()
+        generateCollectionTreeStructure = function()
         {
             if(is.null(self$uuid))
                 stop("Collection uuid is not defined.")
index 8b2f8876b0f91a0d86e148f81f1d29d87ab2f479..5f7a29455ae4a58aaae6792f6dd1eb26ae30ae4e 100644 (file)
@@ -15,55 +15,16 @@ CollectionTree <- R6::R6Class(
         initialize = function(fileContent, collection)
         {
             self$pathsList <- fileContent
-
-            treeBranches <- sapply(fileContent, function(filePath)
-            {
-                splitPath <- unlist(strsplit(filePath, "/", fixed = TRUE))
-                branch <- private$createBranch(splitPath)
-            })
-
+            treeBranches <- sapply(fileContent, function(filePath) self$createBranch(filePath))
             root <- Subcollection$new("")
-
-            sapply(treeBranches, function(branch)
-            {
-                private$addBranch(root, branch)
-            })
-
+            sapply(treeBranches, function(branch) self$addBranch(root, branch))
             root$setCollection(collection)
             private$tree <- root
         },
 
-        getElement = function(relativePath)
-        {
-            relativePath <- trimFromStart(relativePath, "./")
-            relativePath <- trimFromEnd(relativePath, "/")
-
-            if(endsWith(relativePath, "/"))
-                relativePath <- substr(relativePath, 0, nchar(relativePath) - 1)
-
-            splitPath <- unlist(strsplit(relativePath, "/", fixed = TRUE))
-            returnElement <- private$tree
-
-            for(pathFragment in splitPath)
-            {
-                returnElement <- returnElement$get(pathFragment)
-
-                if(is.null(returnElement))
-                    return(NULL)
-            }
-
-            returnElement
-        },
-
-        getTree = function() private$tree
-    ),
-
-    private = list(
-
-        tree = NULL,
-
-        createBranch = function(splitPath)
+        createBranch = function(filePath)
         {
+            splitPath <- unlist(strsplit(filePath, "/", fixed = TRUE))
             branch <- NULL
             lastElementIndex <- length(splitPath)
 
@@ -90,7 +51,11 @@ CollectionTree <- R6::R6Class(
 
             if(is.null(child))
             {
+                # Make sure we are don't make any REST call while adding child
+                collection <- container$getCollection()
+                container$setCollection(NULL, setRecursively = FALSE)
                 container$add(node)
+                container$setCollection(collection, setRecursively = FALSE)
             }
             else
             {
@@ -100,14 +65,41 @@ CollectionTree <- R6::R6Class(
                 # 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))
-                {
                     child = private$replaceFileWithSubcollection(child)
-                }
 
-                private$addBranch(child, node$getFirst())
+                self$addBranch(child, node$getFirst())
             }
         },
 
+        getElement = function(relativePath)
+        {
+            relativePath <- trimFromStart(relativePath, "./")
+            relativePath <- trimFromEnd(relativePath, "/")
+
+            if(endsWith(relativePath, "/"))
+                relativePath <- substr(relativePath, 0, nchar(relativePath) - 1)
+
+            splitPath <- unlist(strsplit(relativePath, "/", fixed = TRUE))
+            returnElement <- private$tree
+
+            for(pathFragment in splitPath)
+            {
+                returnElement <- returnElement$get(pathFragment)
+
+                if(is.null(returnElement))
+                    return(NULL)
+            }
+
+            returnElement
+        },
+
+        getTree = function() private$tree
+    ),
+
+    private = list(
+
+        tree = NULL,
+
         replaceFileWithSubcollection = function(arvadosFile)
         {
             subcollection <- Subcollection$new(arvadosFile$getName())
index 4595fef662c1c9422af13dc0222a10bd9a9df48a..07defca90f4c99e8be9f8a73f7412f398ab1a701 100644 (file)
@@ -16,7 +16,7 @@ HttpRequest <- R6::R6Class(
         initialize = function()
         {
             self$validContentTypes <- c("text", "raw")
-            self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE")
+            self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE", "COPY")
         },
 
         exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL,
index 867665299f49899909167c4fd838bc9ae1371dd8..78b2c35e32fa117190f033075e1ea5ee2a3805e3 100644 (file)
@@ -81,10 +81,10 @@ RESTService <- R6::R6Class(
         {
             collectionURL <- paste0(self$getWebDavHostName(), "c=", uuid, "/")
             fromURL <- paste0(collectionURL, from)
-            toURL <- paste0(collectionURL, to)
+            toURL <- paste0(collectionURL, trimFromStart(to, "/"))
 
             headers <- list("Authorization" = paste("OAuth2", self$token),
-                           "Destination" = toURL)
+                            "Destination" = toURL)
 
             serverResponse <- self$http$exec("MOVE", fromURL, headers,
                                              retryTimes = self$numRetries)
@@ -95,6 +95,24 @@ RESTService <- R6::R6Class(
             serverResponse
         },
 
+        copy = function(from, to, uuid)
+        {
+            collectionURL <- paste0(self$getWebDavHostName(), "c=", uuid, "/")
+            fromURL <- paste0(collectionURL, from)
+            toURL <- paste0(collectionURL, trimFromStart(to, "/"))
+
+            headers <- list("Authorization" = paste("OAuth2", self$token),
+                            "Destination" = toURL)
+
+            serverResponse <- self$http$exec("COPY", fromURL, headers,
+                                             retryTimes = self$numRetries)
+
+            if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
+                stop(paste("Server code:", serverResponse$status_code))
+
+            serverResponse
+        },
+
         getCollectionContent = function(uuid)
         {
             collectionURL <- URLencode(paste0(self$getWebDavHostName(),
index 45fe34347903192bed1d8618e14aceedf73a18f2..17a9ef3ee3ba6180546763da637a8824905d66dc 100644 (file)
@@ -26,7 +26,8 @@ source("./R/util.R")
 #'   \item{get(relativePath)}{If relativePath is valid, returns ArvadosFile or Subcollection specified by relativePath, else returns NULL.}
 #'   \item{getFileListing()}{Returns subcollections file content as character vector.}
 #'   \item{getSizeInBytes()}{Returns subcollections content size in bytes.}
-#'   \item{move(newLocation)}{Moves subcollection to a new location inside collection.}
+#'   \item{move(destination)}{Moves subcollection to a new location inside collection.}
+#'   \item{copy(destination)}{Copies subcollection to a new location inside collection.}
 #' }
 #'
 #' @name Subcollection
@@ -40,6 +41,7 @@ source("./R/util.R")
 #' myFolder$remove("myFile")
 #'
 #' myFolder$move("newLocation/myFolder")
+#' myFolder$copy("newLocation/myFolder")
 #' }
 NULL
 
@@ -77,6 +79,9 @@ Subcollection <- R6::R6Class(
             if("ArvadosFile"   %in% class(content) ||
                "Subcollection" %in% class(content))
             {
+                if(!is.null(content$getCollection()))
+                    stop("Content already belongs to a collection.")
+
                 if(content$getName() == "")
                     stop("Content has invalid name.")
 
@@ -161,20 +166,18 @@ Subcollection <- R6::R6Class(
             return(sum(fileSizes))
         },
 
-        move = function(newLocation)
+        move = function(destination)
         {
             if(is.null(private$collection))
-                stop("Subcollection doesn't belong to any collection")
+                stop("Subcollection doesn't belong to any collection.")
 
-            newLocation <- trimFromEnd(newLocation, "/")
-            nameAndPath <- splitToPathAndName(newLocation)
+            destination <- trimFromEnd(destination, "/")
+            nameAndPath <- splitToPathAndName(destination)
 
             newParent <- private$collection$get(nameAndPath$path)
 
             if(is.null(newParent))
-            {
-                stop("Unable to get destination subcollection")
-            }
+                stop("Unable to get destination subcollection.")
 
             childWithSameName <- newParent$get(nameAndPath$name)
 
@@ -187,11 +190,53 @@ Subcollection <- R6::R6Class(
                       private$collection$uuid)
 
             private$dettachFromCurrentParent()
-            private$attachToNewParent(newParent)
+            private$attachToNewParent(self, newParent)
 
+            private$parent <- newParent
             private$name <- nameAndPath$name
 
-            "Content moved successfully."
+            self
+        },
+
+        copy = function(destination)
+        {
+            if(is.null(private$collection))
+                stop("Subcollection doesn't belong to any collection.")
+
+            destination <- trimFromEnd(destination, "/")
+            nameAndPath <- splitToPathAndName(destination)
+
+            newParent <- private$collection$get(nameAndPath$path)
+
+            if(is.null(newParent) || !("Subcollection" %in% class(newParent)))
+                stop("Unable to get destination subcollection.")
+
+            childWithSameName <- newParent$get(nameAndPath$name)
+
+            if(!is.null(childWithSameName))
+                stop("Destination already contains content with same name.")
+
+            REST <- private$collection$getRESTService()
+            REST$copy(self$getRelativePath(),
+                      paste0(newParent$getRelativePath(), "/", nameAndPath$name),
+                      private$collection$uuid)
+
+            newContent <- self$duplicate(nameAndPath$name)
+            newContent$setCollection(self$getCollection(), setRecursively = TRUE)
+            newContent$setParent(newParent)
+            private$attachToNewParent(newContent, newParent)
+
+            newContent
+        },
+
+        duplicate = function(newName = NULL)
+        {
+            name <- if(!is.null(newName)) newName else private$name
+            root <- Subcollection$new(name)
+            for(child in private$children)
+                root$add(child$duplicate())
+
+            root
         },
 
         get = function(name)
@@ -254,30 +299,29 @@ Subcollection <- R6::R6Class(
             }
         },
 
-        attachToNewParent = function(newParent)
+        attachToNewParent = function(content, newParent)
         {
-            #Note: We temporary set parents collection to NULL. This will ensure that
-            #      add method doesn't post file on REST.
+            # We temporary set parents collection to NULL. This will ensure that
+            # add method doesn't post this subcollection to REST.
+            # We also need to set content's collection to NULL because
+            # add method throws exception if we try to add content that already
+            # belongs to a collection.
             parentsCollection <- newParent$getCollection()
+            content$setCollection(NULL, setRecursively = FALSE)
             newParent$setCollection(NULL, setRecursively = FALSE)
-
-            newParent$add(self)
-
+            newParent$add(content)
+            content$setCollection(parentsCollection, setRecursively = FALSE)
             newParent$setCollection(parentsCollection, setRecursively = FALSE)
-
-            private$parent <- newParent
         },
 
         dettachFromCurrentParent = function()
         {
-            #Note: We temporary set parents collection to NULL. This will ensure that
-            #      remove method doesn't remove this subcollection from REST.
+            # We temporary set parents collection to NULL. This will ensure that
+            # remove method doesn't remove this subcollection from REST.
             parent <- private$parent
             parentsCollection <- parent$getCollection()
             parent$setCollection(NULL, setRecursively = FALSE)
-
             parent$remove(private$name)
-
             parent$setCollection(parentsCollection, setRecursively = FALSE)
         },
 
index c98f803e5ea8e123b4e058b8256850668b5ae068..fa0cda45bfc65dfefb2c681eabee5c3668e822d9 100644 (file)
@@ -1,3 +1,7 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
 .onLoad <- function(libName, pkgName)
 {
     minAllowedRVersion <- "3.3.0"
index be34b2fdb1dabd3531ca74e696a8240528418520..c1d6c7cf4f01eebaae55764630e8e1c68d6f1def 100644 (file)
@@ -133,7 +133,7 @@ files <- collection$getFileListing()
 arvadosFile <- collection$get("location/to/my/file.cpp")
 ```
 
-    or
+or
 
 ```{r}
 arvadosSubcollection <- collection$get("location/to/my/directory/")
@@ -177,7 +177,7 @@ fileContent <- arvadosFile$read("raw", offset = 1024, length = 512)
 size <- arvadosFile$getSizeInBytes()
 ```
 
-    or
+or
 
 ```{r}
 size <- arvadosSubcollection$getSizeInBytes()
@@ -186,31 +186,16 @@ size <- arvadosSubcollection$getSizeInBytes()
 * Create new file in a collection:
 
 ```{r}
-collection$create(fileNames, optionalRelativePath)
+collection$create(files)
 ```
 
-    Example:
+Example:
 
 ```{r}
-mainFile <- collection$create("main.cpp", "cpp/src/")
-fileList <- collection$create(c("main.cpp", lib.dll), "cpp/src/")
+mainFile <- collection$create("cpp/src/main.cpp")
+fileList <- collection$create(c("cpp/src/main.cpp", "cpp/src/util.h"))
 ```
 
-* Add existing ArvadosFile or Subcollection to a collection:
-
-```{r}
-folder <- Subcollection$new("src")
-file   <- ArvadosFile$new("main.cpp")
-folder$add(file)
-```
-
-```{r}
-collection$add(folder, "cpp")
-```
-
-This examples will add file "main.cpp" in "./cpp/src/" folder if folder exists.
-If subcollection contains more files or folders they will be added recursively.
-
 * Delete file from a collection:
 
 ```{r}
@@ -234,9 +219,9 @@ subcollection$remove("fileInsideSubcollection.exe")
 subcollection$remove("folderInsideSubcollection/")
 ```
 
-* Move file or folder inside collection:
+* Move or rename a file or folder within a collection (moving between collections is currently not supported):
 
-Directley from collection
+Directly from collection
 
 ```{r}
 collection$move("folder/file.cpp", "file.cpp")
@@ -259,6 +244,28 @@ subcollection$move("newDestination/folder")
 Make sure to include new file name in destination.
 In second example file$move("newDestination/") will not work.
 
+* Copy file or folder within a collection (copying between collections is currently not supported):
+
+Directly from collection
+
+```{r}
+collection$copy("folder/file.cpp", "file.cpp")
+```
+
+Or from file
+
+```{r}
+file <- collection$get("location/to/my/file.cpp")
+file$copy("destination/file.cpp")
+```
+
+Or from subcollection
+
+```{r}
+subcollection <- collection$get("location/to/folder")
+subcollection$copy("destination/folder")
+```
+
 #### Working with Aravdos projects
 
 * Get a project:
index 95a2e5561fa9ce21b1d5bd236489595b8c2c034d..51f98d81dcd4de28b9e5faca303ee87a5da7a58d 100644 (file)
@@ -166,6 +166,7 @@ Arvados class gives users ability to access Arvados REST API.
        \item{}{\code{\link{users.delete}}}
        \item{}{\code{\link{users.get}}}
        \item{}{\code{\link{users.list}}}
+       \item{}{\code{\link{users.merge}}}
        \item{}{\code{\link{users.setup}}}
        \item{}{\code{\link{users.system}}}
        \item{}{\code{\link{users.unsetup}}}
index b7840dc16ff4cbbd15dd7383b9fcde0c59416606..514e9e846df958548bacefa670b35e69814d0767 100644 (file)
@@ -29,7 +29,8 @@ ArvadosFile class represents a file inside Arvados collection.
   \item{flush()}{Write connections content to a file (override current content of the file).}
   \item{remove(name)}{Removes ArvadosFile or Subcollection specified by name from the subcollection.}
   \item{getSizeInBytes()}{Returns file size in bytes.}
-  \item{move(newLocation)}{Moves file to a new location inside collection.}
+  \item{move(destination)}{Moves file to a new location inside collection.}
+  \item{copy(destination)}{Copies file to a new location inside collection.}
 }
 }
 
@@ -40,7 +41,7 @@ myFile <- ArvadosFile$new("myFile")
 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")
@@ -52,5 +53,6 @@ arvConnection <- myFile$connection("r")
 mytable <- read.table(arvConnection)
 
 myFile$move("newFolder/myFile")
+myFile$copy("newFolder/myFile")
 }
 }
index 8cf29a2ea56d19cc32307cdab3c0a488537ac295..fbe6038664447df230ba77295f17d5df97274d29 100644 (file)
@@ -23,9 +23,10 @@ Collection class provides interface for working with Arvados collections.
 
 \describe{
   \item{add(content)}{Adds ArvadosFile or Subcollection specified by content to the collection.}
-  \item{create(fileNames, relativePath = "")}{Creates one or more ArvadosFiles and adds them to the collection at specified path.}
+  \item{create(files)}{Creates one or more ArvadosFiles and adds them to the collection at specified path.}
   \item{remove(fileNames)}{Remove one or more files from the collection.}
-  \item{move(content, newLocation)}{Moves ArvadosFile or Subcollection to another location in the collection.}
+  \item{move(content, destination)}{Moves ArvadosFile or Subcollection to another location in the collection.}
+  \item{copy(content, destination)}{Copies ArvadosFile or Subcollection to another location in the collection.}
   \item{getFileListing()}{Returns collections file content as character vector.}
   \item{get(relativePath)}{If relativePath is valid, returns ArvadosFile or Subcollection specified by relativePath, else returns NULL.}
 }
@@ -36,9 +37,6 @@ Collection class provides interface for working with Arvados collections.
 arv <- Arvados$new("your Arvados token", "example.arvadosapi.com")
 collection <- Collection$new(arv, "uuid")
 
-newFile <- ArvadosFile$new("myFile")
-collection$add(newFile, "myFolder")
-
 createdFiles <- collection$create(c("main.cpp", lib.dll), "cpp/src/")
 
 collection$remove("location/to/my/file.cpp")
index df0970b30fd4ef843b595f8db52efbafd9b140a4..0b27a8bc4389d134b5f360bf012cd17d7934d77f 100644 (file)
@@ -5,7 +5,7 @@
 \title{Subcollection}
 \description{
 Subcollection class represents a folder inside Arvados collection.
-It is essentially a composite of ArvadosFiles and other Subcollections.
+It is essentially a composite of arvadosFiles and other subcollections.
 }
 \section{Usage}{
 
@@ -29,7 +29,8 @@ It is essentially a composite of ArvadosFiles and other Subcollections.
   \item{get(relativePath)}{If relativePath is valid, returns ArvadosFile or Subcollection specified by relativePath, else returns NULL.}
   \item{getFileListing()}{Returns subcollections file content as character vector.}
   \item{getSizeInBytes()}{Returns subcollections content size in bytes.}
-  \item{move(newLocation)}{Moves subcollection to a new location inside collection.}
+  \item{move(destination)}{Moves subcollection to a new location inside collection.}
+  \item{copy(destination)}{Copies subcollection to a new location inside collection.}
 }
 }
 
@@ -43,5 +44,6 @@ myFolder$get("myFile")
 myFolder$remove("myFile")
 
 myFolder$move("newLocation/myFolder")
+myFolder$copy("newLocation/myFolder")
 }
 }
diff --git a/sdk/R/man/users.merge.Rd b/sdk/R/man/users.merge.Rd
new file mode 100644 (file)
index 0000000..a539591
--- /dev/null
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/Arvados.R
+\name{users.merge}
+\alias{users.merge}
+\title{users.merge}
+\usage{
+arv$users.merge(new_owner_uuid,
+       new_user_token, redirect_to_new_user = NULL)
+}
+\arguments{
+\item{new_owner_uuid}{}
+
+\item{new_user_token}{}
+
+\item{redirect_to_new_user}{}
+}
+\value{
+User object.
+}
+\description{
+users.merge is a method defined in Arvados class.
+}
index 2ebcda2e4d671dc91cef9ca6ca0cdcb6a2707e18..7734e0d9284d6bde09b478ab30171e687ea75a2c 100644 (file)
@@ -27,6 +27,7 @@ FakeHttpRequest <- R6::R6Class(
         numberOfPUTRequests        = NULL,
         numberOfPOSTRequests       = NULL,
         numberOfMOVERequests       = NULL,
+        numberOfCOPYRequests       = NULL,
         numberOfgetConnectionCalls = NULL,
 
         initialize = function(expectedURL      = NULL,
@@ -57,6 +58,7 @@ FakeHttpRequest <- R6::R6Class(
             self$numberOfPUTRequests    <- 0
             self$numberOfPOSTRequests   <- 0
             self$numberOfMOVERequests   <- 0
+            self$numberOfCOPYRequests   <- 0
 
             self$numberOfgetConnectionCalls <- 0
 
@@ -81,6 +83,8 @@ FakeHttpRequest <- R6::R6Class(
                 self$numberOfDELETERequests <- self$numberOfDELETERequests + 1
             else if(verb == "MOVE")
                 self$numberOfMOVERequests <- self$numberOfMOVERequests + 1
+            else if(verb == "COPY")
+                self$numberOfCOPYRequests <- self$numberOfCOPYRequests + 1
             else if(verb == "PROPFIND")
             {
                 return(self$content)
index 048013f566a3c737188dc04f876bee6d9ae8dd90..a91da04fd1295edf5332b54b61da47ab2ea4687d 100644 (file)
@@ -18,6 +18,7 @@ FakeRESTService <- R6::R6Class(
         createCallCount               = NULL,
         deleteCallCount               = NULL,
         moveCallCount                 = NULL,
+        copyCallCount                 = NULL,
         getCollectionContentCallCount = NULL,
         getResourceSizeCallCount      = NULL,
         readCallCount                 = NULL,
@@ -31,7 +32,7 @@ FakeRESTService <- R6::R6Class(
         collectionContent = NULL,
         returnContent     = NULL,
 
-        initialize = function(collectionContent = NULL, returnContent = NULL, 
+        initialize = function(collectionContent = NULL, returnContent = NULL,
                               expectedFilterContent = NULL)
         {
             self$getResourceCallCount    <- 0
@@ -44,6 +45,7 @@ FakeRESTService <- R6::R6Class(
             self$createCallCount               <- 0
             self$deleteCallCount               <- 0
             self$moveCallCount                 <- 0
+            self$copyCallCount                 <- 0
             self$getCollectionContentCallCount <- 0
             self$getResourceSizeCallCount      <- 0
             self$readCallCount                 <- 0
@@ -135,6 +137,12 @@ FakeRESTService <- R6::R6Class(
             self$returnContent
         },
 
+        copy = function(from, to, uuid)
+        {
+            self$copyCallCount <- self$copyCallCount + 1
+            self$returnContent
+        },
+
         getCollectionContent = function(uuid)
         {
             self$getCollectionContentCallCount <- self$getCollectionContentCallCount + 1
@@ -146,7 +154,7 @@ FakeRESTService <- R6::R6Class(
             self$getResourceSizeCallCount <- self$getResourceSizeCallCount + 1
             self$returnContent
         },
-        
+
         read = function(relativePath, uuid, contentType = "text", offset = 0, length = 0)
         {
             self$readCallCount <- self$readCallCount + 1
index 1f559e999c52be207317b1f9f6f17332ab287ac0..e3457c993f7c88cee4a963ca7006a90c6078f478 100644 (file)
@@ -81,7 +81,6 @@ test_that("read raises exception if file doesn't belong to a collection", {
 
 test_that("read raises exception offset or length is negative number", {
 
-
     collectionContent <- c("animal", "animal/fish")
     fakeREST <- FakeRESTService$new(collectionContent)
 
@@ -156,7 +155,6 @@ test_that(paste("connection returns textConnection opened",
 
 test_that("flush sends data stored in a connection to a REST server", {
 
-
     collectionContent <- c("animal", "animal/fish")
     fakeREST <- FakeRESTService$new(collectionContent)
 
@@ -204,13 +202,12 @@ test_that(paste("move raises exception if arvados file",
     animal <- ArvadosFile$new("animal")
 
     expect_that(animal$move("new/location"),
-                throws_error("ArvadosFile doesn't belong to any collection"))
+                throws_error("ArvadosFile doesn't belong to any collection."))
 })
 
 test_that(paste("move raises exception if newLocationInCollection",
                 "parameter is invalid"), {
 
-
     collectionContent <- c("animal",
                            "animal/fish",
                            "animal/dog",
@@ -226,7 +223,7 @@ test_that(paste("move raises exception if newLocationInCollection",
     dog <- collection$get("animal/dog")
 
     expect_that(dog$move("objects/dog"),
-                throws_error("Unable to get destination subcollection"))
+                throws_error("Unable to get destination subcollection."))
 })
 
 test_that("move raises exception if new location contains content with the same name", {
@@ -252,7 +249,6 @@ test_that("move raises exception if new location contains content with the same
 
 test_that("move moves arvados file inside collection tree", {
 
-
     collectionContent <- c("animal",
                            "animal/fish",
                            "animal/dog",
@@ -273,3 +269,85 @@ test_that("move moves arvados file inside collection tree", {
     expect_that(dogIsNullOnOldLocation, is_true())
     expect_that(dogExistsOnNewLocation, is_true())
 })
+
+test_that(paste("copy raises exception if arvados file",
+                "doesn't belong to any collection"), {
+
+    animal <- ArvadosFile$new("animal")
+
+    expect_that(animal$copy("new/location"),
+                throws_error("ArvadosFile doesn't belong to any collection."))
+})
+
+test_that(paste("copy raises exception if location parameter is invalid"), {
+
+    collectionContent <- c("animal",
+                           "animal/fish",
+                           "animal/dog",
+                           "animal/fish/shark",
+                           "ball")
+
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+
+    collection <- Collection$new(api, "myUUID")
+    dog <- collection$get("animal/dog")
+
+    expect_that(dog$copy("objects/dog"),
+                throws_error("Unable to get destination subcollection."))
+})
+
+test_that("copy raises exception if new location contains content with the same name", {
+
+
+    collectionContent <- c("animal",
+                           "animal/fish",
+                           "animal/dog",
+                           "animal/fish/shark",
+                           "dog")
+
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "myUUID")
+    dog <- collection$get("animal/dog")
+
+    expect_that(dog$copy("dog"),
+                throws_error("Destination already contains content with same name."))
+
+})
+
+test_that("copy copies arvados file inside collection tree", {
+
+    collectionContent <- c("animal",
+                           "animal/fish",
+                           "animal/dog",
+                           "animal/fish/shark",
+                           "ball")
+
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "myUUID")
+    dog <- collection$get("animal/dog")
+
+    dog$copy("dog")
+    dogExistsOnOldLocation <- !is.null(collection$get("animal/dog"))
+    dogExistsOnNewLocation <- !is.null(collection$get("dog"))
+
+    expect_that(dogExistsOnOldLocation, is_true())
+    expect_that(dogExistsOnNewLocation, is_true())
+})
+
+test_that("duplicate performs deep cloning of Arvados file", {
+    arvFile <- ArvadosFile$new("foo")
+    newFile1 <- arvFile$duplicate()
+    newFile2 <- arvFile$duplicate("bar")
+
+    expect_that(newFile1$getFileListing(), equals(arvFile$getFileListing()))
+    expect_that(newFile2$getFileListing(), equals(c("bar")))
+})
index af5fabeb73c82c99cfee67e935a1ebfa8e61fd2c..636359ae21a7b196d406ec2b16ee8839e0921f9e 100644 (file)
@@ -104,37 +104,15 @@ test_that("create raises exception if passed argumet is not character vector", {
                              fixed = TRUE))
 })
 
-test_that("create raises exception if relative path is not valid", {
-
-    collectionContent <- c("animal",
-                           "animal/fish",
-                           "ball")
-
-    fakeREST <- FakeRESTService$new(collectionContent)
-
-    api <- Arvados$new("myToken", "myHostName")
-    api$setRESTService(fakeREST)
-    collection <- Collection$new(api, "myUUID")
-
-    newPen <- ArvadosFile$new("pen")
-
-    expect_that(collection$create(newPen, "objects"),
-                throws_error("Subcollection objects doesn't exist.",
-                              fixed = TRUE))
-})
-
 test_that(paste("create adds files specified by fileNames",
                 "to local tree structure and remote REST service"), {
 
-    collectionContent <- c("animal", "animal/fish", "ball")
-    fakeREST <- FakeRESTService$new(collectionContent)
-
+    fakeREST <- FakeRESTService$new()
     api <- Arvados$new("myToken", "myHostName")
     api$setRESTService(fakeREST)
     collection <- Collection$new(api, "myUUID")
 
-    files <- c("dog", "cat")
-    collection$create(files, "animal")
+    collection$create(c("animal/dog", "animal/cat"))
 
     dog <- collection$get("animal/dog")
     cat <- collection$get("animal/cat")
@@ -262,3 +240,58 @@ test_that("get returns arvados file or subcollection from internal tree structur
     expect_that(fishIsNotNull, is_true())
     expect_that(fish$getName(), equals("fish"))
 })
+
+test_that(paste("copy copies content to a new location inside file tree",
+                "and on REST service"), {
+
+    collectionContent <- c("animal", "animal/dog", "ball")
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "myUUID")
+
+    collection$copy("animal/dog", "dog")
+
+    dogExistsOnOldLocation <- !is.null(collection$get("animal/dog"))
+    dogExistsOnNewLocation <- !is.null(collection$get("dog"))
+
+    expect_that(dogExistsOnOldLocation, is_true())
+    expect_that(dogExistsOnNewLocation, is_true())
+    expect_that(fakeREST$copyCallCount, equals(1))
+})
+
+test_that("copy raises exception if new location is not valid", {
+
+    collectionContent <- c("animal", "animal/fish", "ball")
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "myUUID")
+
+    expect_that(collection$copy("fish", "object"),
+                throws_error("Content you want to copy doesn't exist in the collection.",
+                             fixed = TRUE))
+})
+
+test_that("refresh invalidates current tree structure", {
+
+    collectionContent <- c("animal", "animal/fish", "ball")
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "aaaaa-j7d0g-ccccccccccccccc")
+
+    # Before refresh
+    fish <- collection$get("animal/fish")
+    expect_that(fish$getName(), equals("fish"))
+    expect_that(fish$getCollection()$uuid, equals("aaaaa-j7d0g-ccccccccccccccc"))
+
+    collection$refresh()
+
+    # After refresh
+    expect_that(fish$getName(), equals("fish"))
+    expect_true(is.null(fish$getCollection()))
+})
index 26f459b17355903640676b7d4a717bd2c9052890..64988e33db2c3c4614112d2eb993687d6e169199 100644 (file)
@@ -135,6 +135,40 @@ test_that("move raises exception if server response code is not between 200 and
                 throws_error("Server code: 404"))
 })
 
+test_that("copy calls REST service properly", {
+
+    uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+    expectedURL <- "https://webDavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
+    fakeHttp <- FakeHttpRequest$new(expectedURL)
+    fakeHttpParser <- FakeHttpParser$new()
+
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, fakeHttpParser,
+                            0, "https://webDavHost/")
+
+    REST$copy("file", "newDestination/file", uuid)
+
+    expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
+    expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
+    expect_that(fakeHttp$requestHeaderContainsDestinationField, is_true())
+    expect_that(fakeHttp$numberOfCOPYRequests, equals(1))
+})
+
+test_that("copy raises exception if server response code is not between 200 and 300", {
+
+    uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+    response <- list()
+    response$status_code <- 404
+    fakeHttp <- FakeHttpRequest$new(serverResponse = response)
+
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
+
+    expect_that(REST$copy("file", "newDestination/file", uuid),
+                throws_error("Server code: 404"))
+})
+
 test_that("getCollectionContent retreives correct content from WebDAV server", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
index 6845801e59abb8155736fddcf4d92595ef67f018..a6e420962bce9777d56d69c4ded58c015986b288 100644 (file)
@@ -309,7 +309,7 @@ test_that(paste("move raises exception if newLocationInCollection",
     fish <- collection$get("animal/fish")
 
     expect_that(fish$move("objects/dog"),
-                throws_error("Unable to get destination subcollection"))
+                throws_error("Unable to get destination subcollection."))
 })
 
 test_that("move moves subcollection inside collection tree", {
@@ -358,3 +358,87 @@ test_that(paste("getSizeInBytes delegates size calculation",
 
     expect_that(resourceSize, equals(100))
 })
+
+#########################
+test_that(paste("copy raises exception if subcollection",
+                "doesn't belong to any collection"), {
+
+    animal <- Subcollection$new("animal")
+
+    expect_that(animal$copy("new/location"),
+                throws_error("Subcollection doesn't belong to any collection."))
+})
+
+test_that("copy raises exception if new location contains content with the same name", {
+
+    collectionContent <- c("animal",
+                           "animal/fish",
+                           "animal/dog",
+                           "animal/fish/shark",
+                           "fish")
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "myUUID")
+    fish <- collection$get("animal/fish")
+
+    expect_that(fish$copy("fish"),
+                throws_error("Destination already contains content with same name."))
+
+})
+
+test_that(paste("copy raises exception if location parameter is invalid"), {
+
+    collectionContent <- c("animal",
+                           "animal/fish",
+                           "animal/dog",
+                           "animal/fish/shark",
+                           "ball")
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+
+    collection <- Collection$new(api, "myUUID")
+    fish <- collection$get("animal/fish")
+
+    expect_that(fish$copy("objects/dog"),
+                throws_error("Unable to get destination subcollection."))
+})
+
+test_that("copy copies subcollection inside collection tree", {
+
+    collectionContent <- c("animal",
+                           "animal/fish",
+                           "animal/dog",
+                           "animal/fish/shark",
+                           "ball")
+    fakeREST <- FakeRESTService$new(collectionContent)
+
+    api <- Arvados$new("myToken", "myHostName")
+    api$setRESTService(fakeREST)
+    collection <- Collection$new(api, "myUUID")
+    fish <- collection$get("animal/fish")
+
+    fish$copy("fish")
+    fishExistsOnOldLocation <- !is.null(collection$get("animal/fish"))
+    fishExistsOnNewLocation <- !is.null(collection$get("fish"))
+
+    expect_that(fishExistsOnOldLocation, is_true())
+    expect_that(fishExistsOnNewLocation, is_true())
+})
+
+test_that("duplicate performs deep cloning of Subcollection", {
+    foo <- ArvadosFile$new("foo")
+    bar <- ArvadosFile$new("bar")
+    sub <- Subcollection$new("qux")
+    sub$add(foo)
+    sub$add(bar)
+
+    newSub1 <- sub$duplicate()
+    newSub2 <- sub$duplicate("quux")
+
+    expect_that(newSub1$getFileListing(), equals(sub$getFileListing()))
+    expect_that(sort(newSub2$getFileListing()), equals(c("quux/bar", "quux/foo")))
+})
index 15689a9010934cf2b8847ec08825cf30bd3e13eb..9a893df781f477dadac19264fb49cfa77b459bb7 100644 (file)
@@ -139,6 +139,17 @@ class CollectionFsAccess(cwltool.stdfsaccess.StdFsAccess):
         else:
             return super(CollectionFsAccess, self).exists(fn)
 
+    def size(self, fn):  # type: (unicode) -> bool
+        collection, rest = self.get_collection(fn)
+        if collection is not None:
+            if rest:
+                arvfile = collection.find(rest)
+                if isinstance(arvfile, arvados.arvfile.ArvadosFile):
+                    return arvfile.size()
+            raise IOError(errno.EINVAL, "Not a path to a file %s" % (fn))
+        else:
+            return super(CollectionFsAccess, self).size(fn)
+
     def isfile(self, fn):  # type: (unicode) -> bool
         collection, rest = self.get_collection(fn)
         if collection is not None:
index 0cab074d9a8a9755f941c6a59e226d4bd9d1e5f3..3836cf5a23cd9f5320aa9a66eb5d508e7ddb6165 100644 (file)
@@ -33,8 +33,8 @@ setup(name='arvados-cwl-runner',
       # Note that arvados/build/run-build-packages.sh looks at this
       # file to determine what version of cwltool and schema-salad to build.
       install_requires=[
-          'cwltool==1.0.20180615183820',
-          'schema-salad==2.7.20180501211602',
+          'cwltool==1.0.20180806194258',
+          'schema-salad==2.7.20180719125426',
           'typing >= 3.5.3',
           'ruamel.yaml >=0.13.11, <0.15',
           'arvados-python-client>=1.1.4.20180607143841',
diff --git a/sdk/cwl/tests/13931-size-job.yml b/sdk/cwl/tests/13931-size-job.yml
new file mode 100644 (file)
index 0000000..97b46dd
--- /dev/null
@@ -0,0 +1,3 @@
+fastq1:
+  class: File
+  location: keep:20850f01122e860fb878758ac1320877+71/sample1_S01_R1_001.fastq.gz
\ No newline at end of file
diff --git a/sdk/cwl/tests/13931-size.cwl b/sdk/cwl/tests/13931-size.cwl
new file mode 100644 (file)
index 0000000..aed1bd6
--- /dev/null
@@ -0,0 +1,10 @@
+cwlVersion: v1.0
+class: CommandLineTool
+inputs:
+  fastq1: File
+outputs:
+  out: stdout
+baseCommand: echo
+arguments:
+  - $(inputs.fastq1.size)
+stdout: size.txt
\ No newline at end of file
index 4869e3e524153af30feb6a654e65e2cac6c57f3f..8635aae65507fadb6be76d27156167855440ac68 100755 (executable)
@@ -12,4 +12,8 @@ fi
 if ! arv-get 4d8a70b1e63b2aad6984e40e338e2373+69 > /dev/null ; then
     arv-put --portable-data-hash secondaryFiles/hello.txt*
 fi
+if ! arv-get 20850f01122e860fb878758ac1320877+71 > /dev/null ; then
+    arv-put --portable-data-hash samples/sample1_S01_R1_001.fastq.gz
+fi
+
 exec cwltest --test arvados-tests.yml --tool arvados-cwl-runner $@ -- --disable-reuse --compute-checksum
index 8eac71886cbf643ca97db1e033b9ba2808b40137..21191a5b3e1553952e1031f9c1ef019db56ab1c4 100644 (file)
     out: null
   tool: wf-defaults/wf7.cwl
   doc: workflow level default in RunInSingleContainer
+
+- job: 13931-size-job.yml
+  output:
+    "out": {
+        "checksum": "sha1$5bf6e5357bd42a6b1d2a3a040e16a91490064d26",
+        "location": "size.txt",
+        "class": "File",
+        "size": 3
+    }
+  tool: 13931-size.cwl
+  doc: Test that size is set for files in Keep
index ae234414a3df90888cfbe9028c06aa5efbba9f55..3f8a32816ddccdad01c78eedfdce1ed0b2be5e64 100644 (file)
@@ -481,7 +481,8 @@ class TestContainer(unittest.TestCase):
 
         keepdocker.return_value = [("zzzzz-4zz18-zzzzzzzzzzzzzz3", "")]
         runner.api.collections().get().execute.return_value = {
-            "portable_data_hash": "99999999999999999999999999999993+99"}
+            "portable_data_hash": "99999999999999999999999999999994+99",
+            "manifest_text": ". 99999999999999999999999999999994+99 0:0:file1 0:0:file2"}
 
         document_loader, avsc_names, schema_metadata, metaschema_loader = cwltool.process.get_schema("v1.0")
 
index c110bc5d53cd4634656d93fab2937954be973d07..4473b88ca0d785dbb2eaff961bf64fd21c25c280 100644 (file)
@@ -389,6 +389,7 @@ class TestWorkflow(unittest.TestCase):
         metadata["cwlVersion"] = tool["cwlVersion"]
 
         mockcollection().portable_data_hash.return_value = "99999999999999999999999999999999+118"
+        mockcollectionreader().find.return_value = arvados.arvfile.ArvadosFile(mock.MagicMock(), "token.txt")
 
         arvtool = arvados_cwl.ArvadosWorkflow(runner, tool, loadingContext)
         arvtool.formatgraph = None
@@ -435,7 +436,8 @@ class TestWorkflow(unittest.TestCase):
   "fileblub": {
     "basename": "token.txt",
     "class": "File",
-    "location": "/keep/99999999999999999999999999999999+118/token.txt"
+    "location": "/keep/99999999999999999999999999999999+118/token.txt",
+    "size": 0
   },
   "sleeptime": 5
 }''')])
index cd46251300dfb95862cb7957f510e108dd78b281..d980db575dd8d6e3db1ac3dbb0f7709cb14a894e 100644 (file)
@@ -132,7 +132,8 @@ def stubs(func):
                     "listing": [{
                         "basename": "renamed.txt",
                         "class": "File",
-                        "location": "keep:99999999999999999999999999999998+99/file1.txt"
+                        "location": "keep:99999999999999999999999999999998+99/file1.txt",
+                        "size": 0
                     }],
                     'class': 'Directory'
                 },
@@ -164,7 +165,8 @@ def stubs(func):
                                   {
                                       'basename': 'renamed.txt',
                                       'class': 'File', 'location':
-                                      'keep:99999999999999999999999999999998+99/file1.txt'
+                                      'keep:99999999999999999999999999999998+99/file1.txt',
+                                      'size': 0
                                   }
                               ]}},
                         'cwl:tool': '3fffdeaa75e018172e1b583425f4ebff+60/workflow.cwl#main',
@@ -225,7 +227,8 @@ def stubs(func):
                         'z': {'basename': 'anonymous', 'class': 'Directory', 'listing': [
                             {'basename': 'renamed.txt',
                              'class': 'File',
-                             'location': 'keep:99999999999999999999999999999998+99/file1.txt'
+                             'location': 'keep:99999999999999999999999999999998+99/file1.txt',
+                             'size': 0
                             }
                         ]}
                     },
@@ -781,6 +784,7 @@ class TestSubmit(unittest.TestCase):
     @stubs
     def test_submit_file_keepref(self, stubs, tm, collectionReader):
         capture_stdout = cStringIO.StringIO()
+        collectionReader().find.return_value = arvados.arvfile.ArvadosFile(mock.MagicMock(), "blorp.txt")
         exited = arvados_cwl.main(
             ["--submit", "--no-wait", "--api=containers", "--debug",
              "tests/wf/submit_keepref_wf.cwl"],
index 7b3b4503efc239661f5b03b2afb0cfac3ca8cc4d..c84252c7b8c135b0eb6105881dab64f70424006b 100644 (file)
@@ -64,7 +64,8 @@
                                 "class": "File",
                                 "location": "keep:99999999999999999999999999999998+99/file1.txt",
                                 "nameext": ".txt",
-                                "nameroot": "renamed"
+                                "nameroot": "renamed",
+                                "size": 0
                             }
                         ]
                     },
index f9f1e967b94f7e589a60888261eae4a7916a88c1..aa1f18052f8afcbe289da18d597b6e66d62d3db6 100644 (file)
@@ -20,7 +20,7 @@ ENV DEBIAN_FRONTEND noninteractive
 
 RUN apt-get update -q && apt-get install -qy git python-pip python-virtualenv python-dev libcurl4-gnutls-dev libgnutls28-dev nodejs python-pyasn1-modules
 
-RUN pip install -U setuptools
+RUN pip install -U setuptools six
 
 ARG sdk
 ARG runner
index c3d60309992c9368ba7a2d75586db58829c8f2c0..e0dc2eefda5e52e014ab8e57d5839bdf176ea362 100644 (file)
@@ -165,7 +165,13 @@ func (d *Dispatcher) checkForUpdates(filters [][]interface{}, todo map[string]*r
        offset := 0
        for {
                params["offset"] = offset
+
+               // This list variable must be a new one declared
+               // inside the loop: otherwise, items in the API
+               // response would get deep-merged into the items
+               // loaded in previous iterations.
                var list arvados.ContainerList
+
                err := d.Arv.List("containers", params, &list)
                if err != nil {
                        log.Printf("Error getting list of containers: %q", err)
index 4772768c8fe086f1e3bc2a25ca7a134cef8d436c..85b12a377b15d5445fa241375b8d6a422977fbee 100644 (file)
@@ -190,22 +190,16 @@ class Collection < ArvadosModel
   end
 
   def manifest_files
+    return '' if !self.manifest_text
+
     names = ''
-    if self.manifest_text
-      self.manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
-        names << name.first.gsub('\040',' ') + "\n"
-        break if names.length > 2**12
-      end
+    self.manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
+      names << name.first.gsub('\040',' ') + "\n"
     end
-
-    if self.manifest_text and names.length < 2**12
-      self.manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
-        names << stream_name.first.gsub('\040',' ') + "\n"
-        break if names.length > 2**12
-      end
+    self.manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
+      names << stream_name.first.gsub('\040',' ') + "\n"
     end
-
-    names[0,2**12]
+    names
   end
 
   def default_empty_manifest
index c09a8e5e479db6442cab9210b41631453a700748..24fd61871d26e4c16416d254b3d7e7441e17bb68 100644 (file)
@@ -30,6 +30,9 @@ end
 
 module Server
   class Application < Rails::Application
+    # The following is to avoid SafeYAML's warning message
+    SafeYAML::OPTIONS[:default_mode] = :safe
+
     # Settings in config/environments/* take precedence over those specified here.
     # Application configuration should go into files in config/initializers
     # -- all .rb files in that directory are automatically loaded.
diff --git a/services/api/db/migrate/20180806133039_index_all_filenames.rb b/services/api/db/migrate/20180806133039_index_all_filenames.rb
new file mode 100644 (file)
index 0000000..79259f9
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+class IndexAllFilenames < ActiveRecord::Migration
+  def up
+    ActiveRecord::Base.connection.execute 'ALTER TABLE collections ALTER COLUMN file_names TYPE text'
+    Collection.find_each(batch_size: 20) do |c|
+      ActiveRecord::Base.connection.execute "UPDATE collections
+                    SET file_names = #{ActiveRecord::Base.connection.quote(c.manifest_files)}
+                    WHERE uuid = #{ActiveRecord::Base.connection.quote(c.uuid)}
+                    AND portable_data_hash = #{ActiveRecord::Base.connection.quote(c.portable_data_hash)}"
+    end
+  end
+  def down
+    ActiveRecord::Base.connection.execute 'ALTER TABLE collections ALTER COLUMN file_names TYPE varchar(8192)'
+  end
+end
index f1f57f51d9e77b5ce550d55cb626d7790d280c56..12158e51b4568517a73b3d11abec97eada45d527 100644 (file)
@@ -5,6 +5,7 @@
 SET statement_timeout = 0;
 SET client_encoding = 'UTF8';
 SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
 SET check_function_bodies = false;
 SET client_min_messages = warning;
 
@@ -22,8 +23,6 @@ CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
 -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
 
 
-SET search_path = public, pg_catalog;
-
 SET default_tablespace = '';
 
 SET default_with_oids = false;
@@ -32,7 +31,7 @@ SET default_with_oids = false;
 -- Name: api_client_authorizations; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE api_client_authorizations (
+CREATE TABLE public.api_client_authorizations (
     id integer NOT NULL,
     api_token character varying(255) NOT NULL,
     api_client_id integer NOT NULL,
@@ -53,7 +52,7 @@ CREATE TABLE api_client_authorizations (
 -- Name: api_client_authorizations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE api_client_authorizations_id_seq
+CREATE SEQUENCE public.api_client_authorizations_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -65,14 +64,14 @@ CREATE SEQUENCE api_client_authorizations_id_seq
 -- Name: api_client_authorizations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE api_client_authorizations_id_seq OWNED BY api_client_authorizations.id;
+ALTER SEQUENCE public.api_client_authorizations_id_seq OWNED BY public.api_client_authorizations.id;
 
 
 --
 -- Name: api_clients; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE api_clients (
+CREATE TABLE public.api_clients (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -91,7 +90,7 @@ CREATE TABLE api_clients (
 -- Name: api_clients_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE api_clients_id_seq
+CREATE SEQUENCE public.api_clients_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -103,14 +102,14 @@ CREATE SEQUENCE api_clients_id_seq
 -- Name: api_clients_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE api_clients_id_seq OWNED BY api_clients.id;
+ALTER SEQUENCE public.api_clients_id_seq OWNED BY public.api_clients.id;
 
 
 --
 -- Name: authorized_keys; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE authorized_keys (
+CREATE TABLE public.authorized_keys (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -131,7 +130,7 @@ CREATE TABLE authorized_keys (
 -- Name: authorized_keys_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE authorized_keys_id_seq
+CREATE SEQUENCE public.authorized_keys_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -143,14 +142,14 @@ CREATE SEQUENCE authorized_keys_id_seq
 -- Name: authorized_keys_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE authorized_keys_id_seq OWNED BY authorized_keys.id;
+ALTER SEQUENCE public.authorized_keys_id_seq OWNED BY public.authorized_keys.id;
 
 
 --
 -- Name: collections; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE collections (
+CREATE TABLE public.collections (
     id integer NOT NULL,
     owner_uuid character varying(255),
     created_at timestamp without time zone NOT NULL,
@@ -168,7 +167,7 @@ CREATE TABLE collections (
     description character varying(524288),
     properties jsonb,
     delete_at timestamp without time zone,
-    file_names character varying(8192),
+    file_names text,
     trash_at timestamp without time zone,
     is_trashed boolean DEFAULT false NOT NULL,
     storage_classes_desired jsonb DEFAULT '["default"]'::jsonb,
@@ -181,7 +180,7 @@ CREATE TABLE collections (
 -- Name: collections_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE collections_id_seq
+CREATE SEQUENCE public.collections_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -193,14 +192,14 @@ CREATE SEQUENCE collections_id_seq
 -- Name: collections_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE collections_id_seq OWNED BY collections.id;
+ALTER SEQUENCE public.collections_id_seq OWNED BY public.collections.id;
 
 
 --
 -- Name: commit_ancestors; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE commit_ancestors (
+CREATE TABLE public.commit_ancestors (
     id integer NOT NULL,
     repository_name character varying(255),
     descendant character varying(255) NOT NULL,
@@ -215,7 +214,7 @@ CREATE TABLE commit_ancestors (
 -- Name: commit_ancestors_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE commit_ancestors_id_seq
+CREATE SEQUENCE public.commit_ancestors_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -227,14 +226,14 @@ CREATE SEQUENCE commit_ancestors_id_seq
 -- Name: commit_ancestors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE commit_ancestors_id_seq OWNED BY commit_ancestors.id;
+ALTER SEQUENCE public.commit_ancestors_id_seq OWNED BY public.commit_ancestors.id;
 
 
 --
 -- Name: commits; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE commits (
+CREATE TABLE public.commits (
     id integer NOT NULL,
     repository_name character varying(255),
     sha1 character varying(255),
@@ -248,7 +247,7 @@ CREATE TABLE commits (
 -- Name: commits_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE commits_id_seq
+CREATE SEQUENCE public.commits_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -260,14 +259,14 @@ CREATE SEQUENCE commits_id_seq
 -- Name: commits_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE commits_id_seq OWNED BY commits.id;
+ALTER SEQUENCE public.commits_id_seq OWNED BY public.commits.id;
 
 
 --
 -- Name: container_requests; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE container_requests (
+CREATE TABLE public.container_requests (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -308,7 +307,7 @@ CREATE TABLE container_requests (
 -- Name: container_requests_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE container_requests_id_seq
+CREATE SEQUENCE public.container_requests_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -320,14 +319,14 @@ CREATE SEQUENCE container_requests_id_seq
 -- Name: container_requests_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE container_requests_id_seq OWNED BY container_requests.id;
+ALTER SEQUENCE public.container_requests_id_seq OWNED BY public.container_requests.id;
 
 
 --
 -- Name: containers; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE containers (
+CREATE TABLE public.containers (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -363,7 +362,7 @@ CREATE TABLE containers (
 -- Name: containers_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE containers_id_seq
+CREATE SEQUENCE public.containers_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -375,14 +374,14 @@ CREATE SEQUENCE containers_id_seq
 -- Name: containers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE containers_id_seq OWNED BY containers.id;
+ALTER SEQUENCE public.containers_id_seq OWNED BY public.containers.id;
 
 
 --
 -- Name: groups; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE groups (
+CREATE TABLE public.groups (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -405,7 +404,7 @@ CREATE TABLE groups (
 -- Name: groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE groups_id_seq
+CREATE SEQUENCE public.groups_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -417,14 +416,14 @@ CREATE SEQUENCE groups_id_seq
 -- Name: groups_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE groups_id_seq OWNED BY groups.id;
+ALTER SEQUENCE public.groups_id_seq OWNED BY public.groups.id;
 
 
 --
 -- Name: humans; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE humans (
+CREATE TABLE public.humans (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -441,7 +440,7 @@ CREATE TABLE humans (
 -- Name: humans_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE humans_id_seq
+CREATE SEQUENCE public.humans_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -453,14 +452,14 @@ CREATE SEQUENCE humans_id_seq
 -- Name: humans_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE humans_id_seq OWNED BY humans.id;
+ALTER SEQUENCE public.humans_id_seq OWNED BY public.humans.id;
 
 
 --
 -- Name: job_tasks; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE job_tasks (
+CREATE TABLE public.job_tasks (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -486,7 +485,7 @@ CREATE TABLE job_tasks (
 -- Name: job_tasks_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE job_tasks_id_seq
+CREATE SEQUENCE public.job_tasks_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -498,14 +497,14 @@ CREATE SEQUENCE job_tasks_id_seq
 -- Name: job_tasks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE job_tasks_id_seq OWNED BY job_tasks.id;
+ALTER SEQUENCE public.job_tasks_id_seq OWNED BY public.job_tasks.id;
 
 
 --
 -- Name: job_tasks_qsequence_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE job_tasks_qsequence_seq
+CREATE SEQUENCE public.job_tasks_qsequence_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -517,14 +516,14 @@ CREATE SEQUENCE job_tasks_qsequence_seq
 -- Name: job_tasks_qsequence_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE job_tasks_qsequence_seq OWNED BY job_tasks.qsequence;
+ALTER SEQUENCE public.job_tasks_qsequence_seq OWNED BY public.job_tasks.qsequence;
 
 
 --
 -- Name: jobs; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE jobs (
+CREATE TABLE public.jobs (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -566,7 +565,7 @@ CREATE TABLE jobs (
 -- Name: jobs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE jobs_id_seq
+CREATE SEQUENCE public.jobs_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -578,14 +577,14 @@ CREATE SEQUENCE jobs_id_seq
 -- Name: jobs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE jobs_id_seq OWNED BY jobs.id;
+ALTER SEQUENCE public.jobs_id_seq OWNED BY public.jobs.id;
 
 
 --
 -- Name: keep_disks; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE keep_disks (
+CREATE TABLE public.keep_disks (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -612,7 +611,7 @@ CREATE TABLE keep_disks (
 -- Name: keep_disks_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE keep_disks_id_seq
+CREATE SEQUENCE public.keep_disks_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -624,14 +623,14 @@ CREATE SEQUENCE keep_disks_id_seq
 -- Name: keep_disks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE keep_disks_id_seq OWNED BY keep_disks.id;
+ALTER SEQUENCE public.keep_disks_id_seq OWNED BY public.keep_disks.id;
 
 
 --
 -- Name: keep_services; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE keep_services (
+CREATE TABLE public.keep_services (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -652,7 +651,7 @@ CREATE TABLE keep_services (
 -- Name: keep_services_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE keep_services_id_seq
+CREATE SEQUENCE public.keep_services_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -664,14 +663,14 @@ CREATE SEQUENCE keep_services_id_seq
 -- Name: keep_services_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE keep_services_id_seq OWNED BY keep_services.id;
+ALTER SEQUENCE public.keep_services_id_seq OWNED BY public.keep_services.id;
 
 
 --
 -- Name: links; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE links (
+CREATE TABLE public.links (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -692,7 +691,7 @@ CREATE TABLE links (
 -- Name: links_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE links_id_seq
+CREATE SEQUENCE public.links_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -704,14 +703,14 @@ CREATE SEQUENCE links_id_seq
 -- Name: links_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE links_id_seq OWNED BY links.id;
+ALTER SEQUENCE public.links_id_seq OWNED BY public.links.id;
 
 
 --
 -- Name: logs; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE logs (
+CREATE TABLE public.logs (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -733,7 +732,7 @@ CREATE TABLE logs (
 -- Name: logs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE logs_id_seq
+CREATE SEQUENCE public.logs_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -745,14 +744,14 @@ CREATE SEQUENCE logs_id_seq
 -- Name: logs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE logs_id_seq OWNED BY logs.id;
+ALTER SEQUENCE public.logs_id_seq OWNED BY public.logs.id;
 
 
 --
 -- Name: users; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE users (
+CREATE TABLE public.users (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255) NOT NULL,
@@ -778,7 +777,7 @@ CREATE TABLE users (
 -- Name: materialized_permission_view; Type: MATERIALIZED VIEW; Schema: public; Owner: -
 --
 
-CREATE MATERIALIZED VIEW materialized_permission_view AS
+CREATE MATERIALIZED VIEW public.materialized_permission_view AS
  WITH RECURSIVE perm_value(name, val) AS (
          VALUES ('can_read'::text,(1)::smallint), ('can_login'::text,1), ('can_write'::text,2), ('can_manage'::text,3)
         ), perm_edges(tail_uuid, head_uuid, val, follow, trashed) AS (
@@ -788,9 +787,9 @@ CREATE MATERIALIZED VIEW materialized_permission_view AS
             ((pv.val = 3) OR (groups.uuid IS NOT NULL)) AS follow,
             (0)::smallint AS trashed,
             (0)::smallint AS followtrash
-           FROM ((links
+           FROM ((public.links
              LEFT JOIN perm_value pv ON ((pv.name = (links.name)::text)))
-             LEFT JOIN groups ON (((pv.val < 3) AND ((groups.uuid)::text = (links.head_uuid)::text))))
+             LEFT JOIN public.groups ON (((pv.val < 3) AND ((groups.uuid)::text = (links.head_uuid)::text))))
           WHERE ((links.link_class)::text = 'permission'::text)
         UNION ALL
          SELECT groups.owner_uuid,
@@ -802,14 +801,14 @@ CREATE MATERIALIZED VIEW materialized_permission_view AS
                     ELSE 0
                 END AS "case",
             1
-           FROM groups
+           FROM public.groups
         ), perm(val, follow, user_uuid, target_uuid, trashed) AS (
          SELECT (3)::smallint AS val,
             true AS follow,
             (users.uuid)::character varying(32) AS user_uuid,
             (users.uuid)::character varying(32) AS target_uuid,
             (0)::smallint AS trashed
-           FROM users
+           FROM public.users
         UNION
          SELECT (LEAST((perm_1.val)::integer, edges.val))::smallint AS val,
             edges.follow,
@@ -840,7 +839,7 @@ CREATE MATERIALIZED VIEW materialized_permission_view AS
 -- Name: nodes; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE nodes (
+CREATE TABLE public.nodes (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -865,7 +864,7 @@ CREATE TABLE nodes (
 -- Name: nodes_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE nodes_id_seq
+CREATE SEQUENCE public.nodes_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -877,14 +876,14 @@ CREATE SEQUENCE nodes_id_seq
 -- Name: nodes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE nodes_id_seq OWNED BY nodes.id;
+ALTER SEQUENCE public.nodes_id_seq OWNED BY public.nodes.id;
 
 
 --
 -- Name: permission_refresh_lock; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE permission_refresh_lock (
+CREATE TABLE public.permission_refresh_lock (
     id integer NOT NULL
 );
 
@@ -893,7 +892,7 @@ CREATE TABLE permission_refresh_lock (
 -- Name: permission_refresh_lock_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE permission_refresh_lock_id_seq
+CREATE SEQUENCE public.permission_refresh_lock_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -905,14 +904,14 @@ CREATE SEQUENCE permission_refresh_lock_id_seq
 -- Name: permission_refresh_lock_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE permission_refresh_lock_id_seq OWNED BY permission_refresh_lock.id;
+ALTER SEQUENCE public.permission_refresh_lock_id_seq OWNED BY public.permission_refresh_lock.id;
 
 
 --
 -- Name: pipeline_instances; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE pipeline_instances (
+CREATE TABLE public.pipeline_instances (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -937,7 +936,7 @@ CREATE TABLE pipeline_instances (
 -- Name: pipeline_instances_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE pipeline_instances_id_seq
+CREATE SEQUENCE public.pipeline_instances_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -949,14 +948,14 @@ CREATE SEQUENCE pipeline_instances_id_seq
 -- Name: pipeline_instances_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE pipeline_instances_id_seq OWNED BY pipeline_instances.id;
+ALTER SEQUENCE public.pipeline_instances_id_seq OWNED BY public.pipeline_instances.id;
 
 
 --
 -- Name: pipeline_templates; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE pipeline_templates (
+CREATE TABLE public.pipeline_templates (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -975,7 +974,7 @@ CREATE TABLE pipeline_templates (
 -- Name: pipeline_templates_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE pipeline_templates_id_seq
+CREATE SEQUENCE public.pipeline_templates_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -987,14 +986,14 @@ CREATE SEQUENCE pipeline_templates_id_seq
 -- Name: pipeline_templates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE pipeline_templates_id_seq OWNED BY pipeline_templates.id;
+ALTER SEQUENCE public.pipeline_templates_id_seq OWNED BY public.pipeline_templates.id;
 
 
 --
 -- Name: repositories; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE repositories (
+CREATE TABLE public.repositories (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -1011,7 +1010,7 @@ CREATE TABLE repositories (
 -- Name: repositories_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE repositories_id_seq
+CREATE SEQUENCE public.repositories_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -1023,14 +1022,14 @@ CREATE SEQUENCE repositories_id_seq
 -- Name: repositories_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE repositories_id_seq OWNED BY repositories.id;
+ALTER SEQUENCE public.repositories_id_seq OWNED BY public.repositories.id;
 
 
 --
 -- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE schema_migrations (
+CREATE TABLE public.schema_migrations (
     version character varying(255) NOT NULL
 );
 
@@ -1039,7 +1038,7 @@ CREATE TABLE schema_migrations (
 -- Name: specimens; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE specimens (
+CREATE TABLE public.specimens (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -1057,7 +1056,7 @@ CREATE TABLE specimens (
 -- Name: specimens_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE specimens_id_seq
+CREATE SEQUENCE public.specimens_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -1069,14 +1068,14 @@ CREATE SEQUENCE specimens_id_seq
 -- Name: specimens_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE specimens_id_seq OWNED BY specimens.id;
+ALTER SEQUENCE public.specimens_id_seq OWNED BY public.specimens.id;
 
 
 --
 -- Name: traits; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE traits (
+CREATE TABLE public.traits (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -1094,7 +1093,7 @@ CREATE TABLE traits (
 -- Name: traits_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE traits_id_seq
+CREATE SEQUENCE public.traits_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -1106,14 +1105,14 @@ CREATE SEQUENCE traits_id_seq
 -- Name: traits_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE traits_id_seq OWNED BY traits.id;
+ALTER SEQUENCE public.traits_id_seq OWNED BY public.traits.id;
 
 
 --
 -- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE users_id_seq
+CREATE SEQUENCE public.users_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -1125,14 +1124,14 @@ CREATE SEQUENCE users_id_seq
 -- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE users_id_seq OWNED BY users.id;
+ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id;
 
 
 --
 -- Name: virtual_machines; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE virtual_machines (
+CREATE TABLE public.virtual_machines (
     id integer NOT NULL,
     uuid character varying(255) NOT NULL,
     owner_uuid character varying(255) NOT NULL,
@@ -1149,7 +1148,7 @@ CREATE TABLE virtual_machines (
 -- Name: virtual_machines_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE virtual_machines_id_seq
+CREATE SEQUENCE public.virtual_machines_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -1161,14 +1160,14 @@ CREATE SEQUENCE virtual_machines_id_seq
 -- Name: virtual_machines_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE virtual_machines_id_seq OWNED BY virtual_machines.id;
+ALTER SEQUENCE public.virtual_machines_id_seq OWNED BY public.virtual_machines.id;
 
 
 --
 -- Name: workflows; Type: TABLE; Schema: public; Owner: -
 --
 
-CREATE TABLE workflows (
+CREATE TABLE public.workflows (
     id integer NOT NULL,
     uuid character varying(255),
     owner_uuid character varying(255),
@@ -1187,7 +1186,7 @@ CREATE TABLE workflows (
 -- Name: workflows_id_seq; Type: SEQUENCE; Schema: public; Owner: -
 --
 
-CREATE SEQUENCE workflows_id_seq
+CREATE SEQUENCE public.workflows_id_seq
     START WITH 1
     INCREMENT BY 1
     NO MINVALUE
@@ -1199,196 +1198,196 @@ CREATE SEQUENCE workflows_id_seq
 -- Name: workflows_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
 --
 
-ALTER SEQUENCE workflows_id_seq OWNED BY workflows.id;
+ALTER SEQUENCE public.workflows_id_seq OWNED BY public.workflows.id;
 
 
 --
 -- Name: api_client_authorizations id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY api_client_authorizations ALTER COLUMN id SET DEFAULT nextval('api_client_authorizations_id_seq'::regclass);
+ALTER TABLE ONLY public.api_client_authorizations ALTER COLUMN id SET DEFAULT nextval('public.api_client_authorizations_id_seq'::regclass);
 
 
 --
 -- Name: api_clients id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY api_clients ALTER COLUMN id SET DEFAULT nextval('api_clients_id_seq'::regclass);
+ALTER TABLE ONLY public.api_clients ALTER COLUMN id SET DEFAULT nextval('public.api_clients_id_seq'::regclass);
 
 
 --
 -- Name: authorized_keys id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY authorized_keys ALTER COLUMN id SET DEFAULT nextval('authorized_keys_id_seq'::regclass);
+ALTER TABLE ONLY public.authorized_keys ALTER COLUMN id SET DEFAULT nextval('public.authorized_keys_id_seq'::regclass);
 
 
 --
 -- Name: collections id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY collections ALTER COLUMN id SET DEFAULT nextval('collections_id_seq'::regclass);
+ALTER TABLE ONLY public.collections ALTER COLUMN id SET DEFAULT nextval('public.collections_id_seq'::regclass);
 
 
 --
 -- Name: commit_ancestors id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY commit_ancestors ALTER COLUMN id SET DEFAULT nextval('commit_ancestors_id_seq'::regclass);
+ALTER TABLE ONLY public.commit_ancestors ALTER COLUMN id SET DEFAULT nextval('public.commit_ancestors_id_seq'::regclass);
 
 
 --
 -- Name: commits id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY commits ALTER COLUMN id SET DEFAULT nextval('commits_id_seq'::regclass);
+ALTER TABLE ONLY public.commits ALTER COLUMN id SET DEFAULT nextval('public.commits_id_seq'::regclass);
 
 
 --
 -- Name: container_requests id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY container_requests ALTER COLUMN id SET DEFAULT nextval('container_requests_id_seq'::regclass);
+ALTER TABLE ONLY public.container_requests ALTER COLUMN id SET DEFAULT nextval('public.container_requests_id_seq'::regclass);
 
 
 --
 -- Name: containers id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY containers ALTER COLUMN id SET DEFAULT nextval('containers_id_seq'::regclass);
+ALTER TABLE ONLY public.containers ALTER COLUMN id SET DEFAULT nextval('public.containers_id_seq'::regclass);
 
 
 --
 -- Name: groups id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY groups ALTER COLUMN id SET DEFAULT nextval('groups_id_seq'::regclass);
+ALTER TABLE ONLY public.groups ALTER COLUMN id SET DEFAULT nextval('public.groups_id_seq'::regclass);
 
 
 --
 -- Name: humans id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY humans ALTER COLUMN id SET DEFAULT nextval('humans_id_seq'::regclass);
+ALTER TABLE ONLY public.humans ALTER COLUMN id SET DEFAULT nextval('public.humans_id_seq'::regclass);
 
 
 --
 -- Name: job_tasks id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY job_tasks ALTER COLUMN id SET DEFAULT nextval('job_tasks_id_seq'::regclass);
+ALTER TABLE ONLY public.job_tasks ALTER COLUMN id SET DEFAULT nextval('public.job_tasks_id_seq'::regclass);
 
 
 --
 -- Name: jobs id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY jobs ALTER COLUMN id SET DEFAULT nextval('jobs_id_seq'::regclass);
+ALTER TABLE ONLY public.jobs ALTER COLUMN id SET DEFAULT nextval('public.jobs_id_seq'::regclass);
 
 
 --
 -- Name: keep_disks id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY keep_disks ALTER COLUMN id SET DEFAULT nextval('keep_disks_id_seq'::regclass);
+ALTER TABLE ONLY public.keep_disks ALTER COLUMN id SET DEFAULT nextval('public.keep_disks_id_seq'::regclass);
 
 
 --
 -- Name: keep_services id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY keep_services ALTER COLUMN id SET DEFAULT nextval('keep_services_id_seq'::regclass);
+ALTER TABLE ONLY public.keep_services ALTER COLUMN id SET DEFAULT nextval('public.keep_services_id_seq'::regclass);
 
 
 --
 -- Name: links id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY links ALTER COLUMN id SET DEFAULT nextval('links_id_seq'::regclass);
+ALTER TABLE ONLY public.links ALTER COLUMN id SET DEFAULT nextval('public.links_id_seq'::regclass);
 
 
 --
 -- Name: logs id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY logs ALTER COLUMN id SET DEFAULT nextval('logs_id_seq'::regclass);
+ALTER TABLE ONLY public.logs ALTER COLUMN id SET DEFAULT nextval('public.logs_id_seq'::regclass);
 
 
 --
 -- Name: nodes id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY nodes ALTER COLUMN id SET DEFAULT nextval('nodes_id_seq'::regclass);
+ALTER TABLE ONLY public.nodes ALTER COLUMN id SET DEFAULT nextval('public.nodes_id_seq'::regclass);
 
 
 --
 -- Name: permission_refresh_lock id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY permission_refresh_lock ALTER COLUMN id SET DEFAULT nextval('permission_refresh_lock_id_seq'::regclass);
+ALTER TABLE ONLY public.permission_refresh_lock ALTER COLUMN id SET DEFAULT nextval('public.permission_refresh_lock_id_seq'::regclass);
 
 
 --
 -- Name: pipeline_instances id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY pipeline_instances ALTER COLUMN id SET DEFAULT nextval('pipeline_instances_id_seq'::regclass);
+ALTER TABLE ONLY public.pipeline_instances ALTER COLUMN id SET DEFAULT nextval('public.pipeline_instances_id_seq'::regclass);
 
 
 --
 -- Name: pipeline_templates id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY pipeline_templates ALTER COLUMN id SET DEFAULT nextval('pipeline_templates_id_seq'::regclass);
+ALTER TABLE ONLY public.pipeline_templates ALTER COLUMN id SET DEFAULT nextval('public.pipeline_templates_id_seq'::regclass);
 
 
 --
 -- Name: repositories id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY repositories ALTER COLUMN id SET DEFAULT nextval('repositories_id_seq'::regclass);
+ALTER TABLE ONLY public.repositories ALTER COLUMN id SET DEFAULT nextval('public.repositories_id_seq'::regclass);
 
 
 --
 -- Name: specimens id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY specimens ALTER COLUMN id SET DEFAULT nextval('specimens_id_seq'::regclass);
+ALTER TABLE ONLY public.specimens ALTER COLUMN id SET DEFAULT nextval('public.specimens_id_seq'::regclass);
 
 
 --
 -- Name: traits id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY traits ALTER COLUMN id SET DEFAULT nextval('traits_id_seq'::regclass);
+ALTER TABLE ONLY public.traits ALTER COLUMN id SET DEFAULT nextval('public.traits_id_seq'::regclass);
 
 
 --
 -- Name: users id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY users ALTER COLUMN id SET DEFAULT nextval('users_id_seq'::regclass);
+ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass);
 
 
 --
 -- Name: virtual_machines id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY virtual_machines ALTER COLUMN id SET DEFAULT nextval('virtual_machines_id_seq'::regclass);
+ALTER TABLE ONLY public.virtual_machines ALTER COLUMN id SET DEFAULT nextval('public.virtual_machines_id_seq'::regclass);
 
 
 --
 -- Name: workflows id; Type: DEFAULT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY workflows ALTER COLUMN id SET DEFAULT nextval('workflows_id_seq'::regclass);
+ALTER TABLE ONLY public.workflows ALTER COLUMN id SET DEFAULT nextval('public.workflows_id_seq'::regclass);
 
 
 --
 -- Name: api_client_authorizations api_client_authorizations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY api_client_authorizations
+ALTER TABLE ONLY public.api_client_authorizations
     ADD CONSTRAINT api_client_authorizations_pkey PRIMARY KEY (id);
 
 
@@ -1396,7 +1395,7 @@ ALTER TABLE ONLY api_client_authorizations
 -- Name: api_clients api_clients_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY api_clients
+ALTER TABLE ONLY public.api_clients
     ADD CONSTRAINT api_clients_pkey PRIMARY KEY (id);
 
 
@@ -1404,7 +1403,7 @@ ALTER TABLE ONLY api_clients
 -- Name: authorized_keys authorized_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY authorized_keys
+ALTER TABLE ONLY public.authorized_keys
     ADD CONSTRAINT authorized_keys_pkey PRIMARY KEY (id);
 
 
@@ -1412,7 +1411,7 @@ ALTER TABLE ONLY authorized_keys
 -- Name: collections collections_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY collections
+ALTER TABLE ONLY public.collections
     ADD CONSTRAINT collections_pkey PRIMARY KEY (id);
 
 
@@ -1420,7 +1419,7 @@ ALTER TABLE ONLY collections
 -- Name: commit_ancestors commit_ancestors_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY commit_ancestors
+ALTER TABLE ONLY public.commit_ancestors
     ADD CONSTRAINT commit_ancestors_pkey PRIMARY KEY (id);
 
 
@@ -1428,7 +1427,7 @@ ALTER TABLE ONLY commit_ancestors
 -- Name: commits commits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY commits
+ALTER TABLE ONLY public.commits
     ADD CONSTRAINT commits_pkey PRIMARY KEY (id);
 
 
@@ -1436,7 +1435,7 @@ ALTER TABLE ONLY commits
 -- Name: container_requests container_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY container_requests
+ALTER TABLE ONLY public.container_requests
     ADD CONSTRAINT container_requests_pkey PRIMARY KEY (id);
 
 
@@ -1444,7 +1443,7 @@ ALTER TABLE ONLY container_requests
 -- Name: containers containers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY containers
+ALTER TABLE ONLY public.containers
     ADD CONSTRAINT containers_pkey PRIMARY KEY (id);
 
 
@@ -1452,7 +1451,7 @@ ALTER TABLE ONLY containers
 -- Name: groups groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY groups
+ALTER TABLE ONLY public.groups
     ADD CONSTRAINT groups_pkey PRIMARY KEY (id);
 
 
@@ -1460,7 +1459,7 @@ ALTER TABLE ONLY groups
 -- Name: humans humans_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY humans
+ALTER TABLE ONLY public.humans
     ADD CONSTRAINT humans_pkey PRIMARY KEY (id);
 
 
@@ -1468,7 +1467,7 @@ ALTER TABLE ONLY humans
 -- Name: job_tasks job_tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY job_tasks
+ALTER TABLE ONLY public.job_tasks
     ADD CONSTRAINT job_tasks_pkey PRIMARY KEY (id);
 
 
@@ -1476,7 +1475,7 @@ ALTER TABLE ONLY job_tasks
 -- Name: jobs jobs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY jobs
+ALTER TABLE ONLY public.jobs
     ADD CONSTRAINT jobs_pkey PRIMARY KEY (id);
 
 
@@ -1484,7 +1483,7 @@ ALTER TABLE ONLY jobs
 -- Name: keep_disks keep_disks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY keep_disks
+ALTER TABLE ONLY public.keep_disks
     ADD CONSTRAINT keep_disks_pkey PRIMARY KEY (id);
 
 
@@ -1492,7 +1491,7 @@ ALTER TABLE ONLY keep_disks
 -- Name: keep_services keep_services_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY keep_services
+ALTER TABLE ONLY public.keep_services
     ADD CONSTRAINT keep_services_pkey PRIMARY KEY (id);
 
 
@@ -1500,7 +1499,7 @@ ALTER TABLE ONLY keep_services
 -- Name: links links_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY links
+ALTER TABLE ONLY public.links
     ADD CONSTRAINT links_pkey PRIMARY KEY (id);
 
 
@@ -1508,7 +1507,7 @@ ALTER TABLE ONLY links
 -- Name: logs logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY logs
+ALTER TABLE ONLY public.logs
     ADD CONSTRAINT logs_pkey PRIMARY KEY (id);
 
 
@@ -1516,7 +1515,7 @@ ALTER TABLE ONLY logs
 -- Name: nodes nodes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY nodes
+ALTER TABLE ONLY public.nodes
     ADD CONSTRAINT nodes_pkey PRIMARY KEY (id);
 
 
@@ -1524,7 +1523,7 @@ ALTER TABLE ONLY nodes
 -- Name: permission_refresh_lock permission_refresh_lock_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY permission_refresh_lock
+ALTER TABLE ONLY public.permission_refresh_lock
     ADD CONSTRAINT permission_refresh_lock_pkey PRIMARY KEY (id);
 
 
@@ -1532,7 +1531,7 @@ ALTER TABLE ONLY permission_refresh_lock
 -- Name: pipeline_instances pipeline_instances_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY pipeline_instances
+ALTER TABLE ONLY public.pipeline_instances
     ADD CONSTRAINT pipeline_instances_pkey PRIMARY KEY (id);
 
 
@@ -1540,7 +1539,7 @@ ALTER TABLE ONLY pipeline_instances
 -- Name: pipeline_templates pipeline_templates_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY pipeline_templates
+ALTER TABLE ONLY public.pipeline_templates
     ADD CONSTRAINT pipeline_templates_pkey PRIMARY KEY (id);
 
 
@@ -1548,7 +1547,7 @@ ALTER TABLE ONLY pipeline_templates
 -- Name: repositories repositories_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY repositories
+ALTER TABLE ONLY public.repositories
     ADD CONSTRAINT repositories_pkey PRIMARY KEY (id);
 
 
@@ -1556,7 +1555,7 @@ ALTER TABLE ONLY repositories
 -- Name: specimens specimens_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY specimens
+ALTER TABLE ONLY public.specimens
     ADD CONSTRAINT specimens_pkey PRIMARY KEY (id);
 
 
@@ -1564,7 +1563,7 @@ ALTER TABLE ONLY specimens
 -- Name: traits traits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY traits
+ALTER TABLE ONLY public.traits
     ADD CONSTRAINT traits_pkey PRIMARY KEY (id);
 
 
@@ -1572,7 +1571,7 @@ ALTER TABLE ONLY traits
 -- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY users
+ALTER TABLE ONLY public.users
     ADD CONSTRAINT users_pkey PRIMARY KEY (id);
 
 
@@ -1580,7 +1579,7 @@ ALTER TABLE ONLY users
 -- Name: virtual_machines virtual_machines_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY virtual_machines
+ALTER TABLE ONLY public.virtual_machines
     ADD CONSTRAINT virtual_machines_pkey PRIMARY KEY (id);
 
 
@@ -1588,7 +1587,7 @@ ALTER TABLE ONLY virtual_machines
 -- Name: workflows workflows_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
 
-ALTER TABLE ONLY workflows
+ALTER TABLE ONLY public.workflows
     ADD CONSTRAINT workflows_pkey PRIMARY KEY (id);
 
 
@@ -1596,1190 +1595,1190 @@ ALTER TABLE ONLY workflows
 -- Name: api_client_authorizations_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX api_client_authorizations_search_index ON api_client_authorizations USING btree (api_token, created_by_ip_address, last_used_by_ip_address, default_owner_uuid, uuid);
+CREATE INDEX api_client_authorizations_search_index ON public.api_client_authorizations USING btree (api_token, created_by_ip_address, last_used_by_ip_address, default_owner_uuid, uuid);
 
 
 --
 -- Name: api_clients_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX api_clients_search_index ON api_clients USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, url_prefix);
+CREATE INDEX api_clients_search_index ON public.api_clients USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, url_prefix);
 
 
 --
 -- Name: authorized_keys_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX authorized_keys_search_index ON authorized_keys USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, key_type, authorized_user_uuid);
+CREATE INDEX authorized_keys_search_index ON public.authorized_keys USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, key_type, authorized_user_uuid);
 
 
 --
 -- Name: collection_index_on_properties; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX collection_index_on_properties ON collections USING gin (properties);
+CREATE INDEX collection_index_on_properties ON public.collections USING gin (properties);
 
 
 --
 -- Name: collections_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX collections_full_text_search_idx ON collections USING gin (to_tsvector('english'::regconfig, (((((((((((((((((COALESCE(owner_uuid, ''::character varying))::text || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(portable_data_hash, ''::character varying))::text) || ' '::text) || (COALESCE(uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || (COALESCE(description, ''::character varying))::text) || ' '::text) || COALESCE((properties)::text, ''::text)) || ' '::text) || (COALESCE(file_names, ''::character varying))::text)));
+CREATE INDEX collections_full_text_search_idx ON public.collections USING gin (to_tsvector('english'::regconfig, (((((((((((((((((COALESCE(owner_uuid, ''::character varying))::text || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(portable_data_hash, ''::character varying))::text) || ' '::text) || (COALESCE(uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || (COALESCE(description, ''::character varying))::text) || ' '::text) || COALESCE((properties)::text, ''::text)) || ' '::text) || COALESCE(file_names, (''::character varying)::text))));
 
 
 --
 -- Name: collections_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX collections_search_index ON collections USING btree (owner_uuid, modified_by_client_uuid, modified_by_user_uuid, portable_data_hash, uuid, name);
+CREATE INDEX collections_search_index ON public.collections USING btree (owner_uuid, modified_by_client_uuid, modified_by_user_uuid, portable_data_hash, uuid, name);
 
 
 --
 -- Name: container_requests_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX container_requests_full_text_search_idx ON container_requests USING gin (to_tsvector('english'::regconfig, (((((((((((((((((((((((((((((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(description, ''::text)) || ' '::text) || COALESCE((properties)::text, ''::text)) || ' '::text) || (COALESCE(state, ''::character varying))::text) || ' '::text) || (COALESCE(requesting_container_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(container_uuid, ''::character varying))::text) || ' '::text) || COALESCE(runtime_constraints, ''::text)) || ' '::text) || (COALESCE(container_image, ''::character varying))::text) || ' '::text) || COALESCE(environment, ''::text)) || ' '::text) || (COALESCE(cwd, ''::character varying))::text) || ' '::text) || COALESCE(command, ''::text)) || ' '::text) || (COALESCE(output_path, ''::character varying))::text) || ' '::text) || COALESCE(filters, ''::text)) || ' '::text) || COALESCE(scheduling_parameters, ''::text)) || ' '::text) || (COALESCE(output_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(log_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(output_name, ''::character varying))::text)));
+CREATE INDEX container_requests_full_text_search_idx ON public.container_requests USING gin (to_tsvector('english'::regconfig, (((((((((((((((((((((((((((((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(description, ''::text)) || ' '::text) || COALESCE((properties)::text, ''::text)) || ' '::text) || (COALESCE(state, ''::character varying))::text) || ' '::text) || (COALESCE(requesting_container_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(container_uuid, ''::character varying))::text) || ' '::text) || COALESCE(runtime_constraints, ''::text)) || ' '::text) || (COALESCE(container_image, ''::character varying))::text) || ' '::text) || COALESCE(environment, ''::text)) || ' '::text) || (COALESCE(cwd, ''::character varying))::text) || ' '::text) || COALESCE(command, ''::text)) || ' '::text) || (COALESCE(output_path, ''::character varying))::text) || ' '::text) || COALESCE(filters, ''::text)) || ' '::text) || COALESCE(scheduling_parameters, ''::text)) || ' '::text) || (COALESCE(output_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(log_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(output_name, ''::character varying))::text)));
 
 
 --
 -- Name: container_requests_index_on_properties; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX container_requests_index_on_properties ON container_requests USING gin (properties);
+CREATE INDEX container_requests_index_on_properties ON public.container_requests USING gin (properties);
 
 
 --
 -- Name: container_requests_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX container_requests_search_index ON container_requests USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, state, requesting_container_uuid, container_uuid, container_image, cwd, output_path, output_uuid, log_uuid, output_name);
+CREATE INDEX container_requests_search_index ON public.container_requests USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, state, requesting_container_uuid, container_uuid, container_image, cwd, output_path, output_uuid, log_uuid, output_name);
 
 
 --
 -- Name: containers_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX containers_search_index ON containers USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, state, log, cwd, output_path, output, container_image, auth_uuid, locked_by_uuid);
+CREATE INDEX containers_search_index ON public.containers USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, state, log, cwd, output_path, output, container_image, auth_uuid, locked_by_uuid);
 
 
 --
 -- Name: group_index_on_properties; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX group_index_on_properties ON groups USING gin (properties);
+CREATE INDEX group_index_on_properties ON public.groups USING gin (properties);
 
 
 --
 -- Name: groups_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX groups_full_text_search_idx ON groups USING gin (to_tsvector('english'::regconfig, (((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || (COALESCE(description, ''::character varying))::text) || ' '::text) || (COALESCE(group_class, ''::character varying))::text) || ' '::text) || COALESCE((properties)::text, ''::text))));
+CREATE INDEX groups_full_text_search_idx ON public.groups USING gin (to_tsvector('english'::regconfig, (((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || (COALESCE(description, ''::character varying))::text) || ' '::text) || (COALESCE(group_class, ''::character varying))::text) || ' '::text) || COALESCE((properties)::text, ''::text))));
 
 
 --
 -- Name: groups_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX groups_search_index ON groups USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, group_class);
+CREATE INDEX groups_search_index ON public.groups USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name, group_class);
 
 
 --
 -- Name: humans_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX humans_search_index ON humans USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid);
+CREATE INDEX humans_search_index ON public.humans USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid);
 
 
 --
 -- Name: index_api_client_authorizations_on_api_client_id; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_api_client_authorizations_on_api_client_id ON api_client_authorizations USING btree (api_client_id);
+CREATE INDEX index_api_client_authorizations_on_api_client_id ON public.api_client_authorizations USING btree (api_client_id);
 
 
 --
 -- Name: index_api_client_authorizations_on_api_token; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_api_client_authorizations_on_api_token ON api_client_authorizations USING btree (api_token);
+CREATE UNIQUE INDEX index_api_client_authorizations_on_api_token ON public.api_client_authorizations USING btree (api_token);
 
 
 --
 -- Name: index_api_client_authorizations_on_expires_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_api_client_authorizations_on_expires_at ON api_client_authorizations USING btree (expires_at);
+CREATE INDEX index_api_client_authorizations_on_expires_at ON public.api_client_authorizations USING btree (expires_at);
 
 
 --
 -- Name: index_api_client_authorizations_on_user_id; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_api_client_authorizations_on_user_id ON api_client_authorizations USING btree (user_id);
+CREATE INDEX index_api_client_authorizations_on_user_id ON public.api_client_authorizations USING btree (user_id);
 
 
 --
 -- Name: index_api_client_authorizations_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_api_client_authorizations_on_uuid ON api_client_authorizations USING btree (uuid);
+CREATE UNIQUE INDEX index_api_client_authorizations_on_uuid ON public.api_client_authorizations USING btree (uuid);
 
 
 --
 -- Name: index_api_clients_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_api_clients_on_created_at ON api_clients USING btree (created_at);
+CREATE INDEX index_api_clients_on_created_at ON public.api_clients USING btree (created_at);
 
 
 --
 -- Name: index_api_clients_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_api_clients_on_modified_at ON api_clients USING btree (modified_at);
+CREATE INDEX index_api_clients_on_modified_at ON public.api_clients USING btree (modified_at);
 
 
 --
 -- Name: index_api_clients_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_api_clients_on_owner_uuid ON api_clients USING btree (owner_uuid);
+CREATE INDEX index_api_clients_on_owner_uuid ON public.api_clients USING btree (owner_uuid);
 
 
 --
 -- Name: index_api_clients_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_api_clients_on_uuid ON api_clients USING btree (uuid);
+CREATE UNIQUE INDEX index_api_clients_on_uuid ON public.api_clients USING btree (uuid);
 
 
 --
 -- Name: index_authkeys_on_user_and_expires_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_authkeys_on_user_and_expires_at ON authorized_keys USING btree (authorized_user_uuid, expires_at);
+CREATE INDEX index_authkeys_on_user_and_expires_at ON public.authorized_keys USING btree (authorized_user_uuid, expires_at);
 
 
 --
 -- Name: index_authorized_keys_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_authorized_keys_on_owner_uuid ON authorized_keys USING btree (owner_uuid);
+CREATE INDEX index_authorized_keys_on_owner_uuid ON public.authorized_keys USING btree (owner_uuid);
 
 
 --
 -- Name: index_authorized_keys_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_authorized_keys_on_uuid ON authorized_keys USING btree (uuid);
+CREATE UNIQUE INDEX index_authorized_keys_on_uuid ON public.authorized_keys USING btree (uuid);
 
 
 --
 -- Name: index_collections_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_created_at ON collections USING btree (created_at);
+CREATE INDEX index_collections_on_created_at ON public.collections USING btree (created_at);
 
 
 --
 -- Name: index_collections_on_delete_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_delete_at ON collections USING btree (delete_at);
+CREATE INDEX index_collections_on_delete_at ON public.collections USING btree (delete_at);
 
 
 --
 -- Name: index_collections_on_is_trashed; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_is_trashed ON collections USING btree (is_trashed);
+CREATE INDEX index_collections_on_is_trashed ON public.collections USING btree (is_trashed);
 
 
 --
 -- Name: index_collections_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_modified_at ON collections USING btree (modified_at);
+CREATE INDEX index_collections_on_modified_at ON public.collections USING btree (modified_at);
 
 
 --
 -- Name: index_collections_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_modified_at_uuid ON collections USING btree (modified_at DESC, uuid);
+CREATE INDEX index_collections_on_modified_at_uuid ON public.collections USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_collections_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_owner_uuid ON collections USING btree (owner_uuid);
+CREATE INDEX index_collections_on_owner_uuid ON public.collections USING btree (owner_uuid);
 
 
 --
 -- Name: index_collections_on_owner_uuid_and_name; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_collections_on_owner_uuid_and_name ON collections USING btree (owner_uuid, name) WHERE (is_trashed = false);
+CREATE UNIQUE INDEX index_collections_on_owner_uuid_and_name ON public.collections USING btree (owner_uuid, name) WHERE (is_trashed = false);
 
 
 --
 -- Name: index_collections_on_portable_data_hash; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_portable_data_hash ON collections USING btree (portable_data_hash);
+CREATE INDEX index_collections_on_portable_data_hash ON public.collections USING btree (portable_data_hash);
 
 
 --
 -- Name: index_collections_on_trash_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_collections_on_trash_at ON collections USING btree (trash_at);
+CREATE INDEX index_collections_on_trash_at ON public.collections USING btree (trash_at);
 
 
 --
 -- Name: index_collections_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_collections_on_uuid ON collections USING btree (uuid);
+CREATE UNIQUE INDEX index_collections_on_uuid ON public.collections USING btree (uuid);
 
 
 --
 -- Name: index_commit_ancestors_on_descendant_and_ancestor; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_commit_ancestors_on_descendant_and_ancestor ON commit_ancestors USING btree (descendant, ancestor);
+CREATE UNIQUE INDEX index_commit_ancestors_on_descendant_and_ancestor ON public.commit_ancestors USING btree (descendant, ancestor);
 
 
 --
 -- Name: index_commits_on_repository_name_and_sha1; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_commits_on_repository_name_and_sha1 ON commits USING btree (repository_name, sha1);
+CREATE UNIQUE INDEX index_commits_on_repository_name_and_sha1 ON public.commits USING btree (repository_name, sha1);
 
 
 --
 -- Name: index_container_requests_on_container_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_container_requests_on_container_uuid ON container_requests USING btree (container_uuid);
+CREATE INDEX index_container_requests_on_container_uuid ON public.container_requests USING btree (container_uuid);
 
 
 --
 -- Name: index_container_requests_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_container_requests_on_modified_at_uuid ON container_requests USING btree (modified_at DESC, uuid);
+CREATE INDEX index_container_requests_on_modified_at_uuid ON public.container_requests USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_container_requests_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_container_requests_on_owner_uuid ON container_requests USING btree (owner_uuid);
+CREATE INDEX index_container_requests_on_owner_uuid ON public.container_requests USING btree (owner_uuid);
 
 
 --
 -- Name: index_container_requests_on_requesting_container_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_container_requests_on_requesting_container_uuid ON container_requests USING btree (requesting_container_uuid);
+CREATE INDEX index_container_requests_on_requesting_container_uuid ON public.container_requests USING btree (requesting_container_uuid);
 
 
 --
 -- Name: index_container_requests_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_container_requests_on_uuid ON container_requests USING btree (uuid);
+CREATE UNIQUE INDEX index_container_requests_on_uuid ON public.container_requests USING btree (uuid);
 
 
 --
 -- Name: index_containers_on_auth_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_containers_on_auth_uuid ON containers USING btree (auth_uuid);
+CREATE INDEX index_containers_on_auth_uuid ON public.containers USING btree (auth_uuid);
 
 
 --
 -- Name: index_containers_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_containers_on_modified_at_uuid ON containers USING btree (modified_at DESC, uuid);
+CREATE INDEX index_containers_on_modified_at_uuid ON public.containers USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_containers_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_containers_on_owner_uuid ON containers USING btree (owner_uuid);
+CREATE INDEX index_containers_on_owner_uuid ON public.containers USING btree (owner_uuid);
 
 
 --
 -- Name: index_containers_on_secret_mounts_md5; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_containers_on_secret_mounts_md5 ON containers USING btree (secret_mounts_md5);
+CREATE INDEX index_containers_on_secret_mounts_md5 ON public.containers USING btree (secret_mounts_md5);
 
 
 --
 -- Name: index_containers_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_containers_on_uuid ON containers USING btree (uuid);
+CREATE UNIQUE INDEX index_containers_on_uuid ON public.containers USING btree (uuid);
 
 
 --
 -- Name: index_groups_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_created_at ON groups USING btree (created_at);
+CREATE INDEX index_groups_on_created_at ON public.groups USING btree (created_at);
 
 
 --
 -- Name: index_groups_on_delete_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_delete_at ON groups USING btree (delete_at);
+CREATE INDEX index_groups_on_delete_at ON public.groups USING btree (delete_at);
 
 
 --
 -- Name: index_groups_on_group_class; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_group_class ON groups USING btree (group_class);
+CREATE INDEX index_groups_on_group_class ON public.groups USING btree (group_class);
 
 
 --
 -- Name: index_groups_on_is_trashed; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_is_trashed ON groups USING btree (is_trashed);
+CREATE INDEX index_groups_on_is_trashed ON public.groups USING btree (is_trashed);
 
 
 --
 -- Name: index_groups_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_modified_at ON groups USING btree (modified_at);
+CREATE INDEX index_groups_on_modified_at ON public.groups USING btree (modified_at);
 
 
 --
 -- Name: index_groups_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_modified_at_uuid ON groups USING btree (modified_at DESC, uuid);
+CREATE INDEX index_groups_on_modified_at_uuid ON public.groups USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_groups_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_owner_uuid ON groups USING btree (owner_uuid);
+CREATE INDEX index_groups_on_owner_uuid ON public.groups USING btree (owner_uuid);
 
 
 --
 -- Name: index_groups_on_owner_uuid_and_name; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_groups_on_owner_uuid_and_name ON groups USING btree (owner_uuid, name) WHERE (is_trashed = false);
+CREATE UNIQUE INDEX index_groups_on_owner_uuid_and_name ON public.groups USING btree (owner_uuid, name) WHERE (is_trashed = false);
 
 
 --
 -- Name: index_groups_on_trash_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_groups_on_trash_at ON groups USING btree (trash_at);
+CREATE INDEX index_groups_on_trash_at ON public.groups USING btree (trash_at);
 
 
 --
 -- Name: index_groups_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_groups_on_uuid ON groups USING btree (uuid);
+CREATE UNIQUE INDEX index_groups_on_uuid ON public.groups USING btree (uuid);
 
 
 --
 -- Name: index_humans_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_humans_on_owner_uuid ON humans USING btree (owner_uuid);
+CREATE INDEX index_humans_on_owner_uuid ON public.humans USING btree (owner_uuid);
 
 
 --
 -- Name: index_humans_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_humans_on_uuid ON humans USING btree (uuid);
+CREATE UNIQUE INDEX index_humans_on_uuid ON public.humans USING btree (uuid);
 
 
 --
 -- Name: index_job_tasks_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_created_at ON job_tasks USING btree (created_at);
+CREATE INDEX index_job_tasks_on_created_at ON public.job_tasks USING btree (created_at);
 
 
 --
 -- Name: index_job_tasks_on_created_by_job_task_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_created_by_job_task_uuid ON job_tasks USING btree (created_by_job_task_uuid);
+CREATE INDEX index_job_tasks_on_created_by_job_task_uuid ON public.job_tasks USING btree (created_by_job_task_uuid);
 
 
 --
 -- Name: index_job_tasks_on_job_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_job_uuid ON job_tasks USING btree (job_uuid);
+CREATE INDEX index_job_tasks_on_job_uuid ON public.job_tasks USING btree (job_uuid);
 
 
 --
 -- Name: index_job_tasks_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_modified_at ON job_tasks USING btree (modified_at);
+CREATE INDEX index_job_tasks_on_modified_at ON public.job_tasks USING btree (modified_at);
 
 
 --
 -- Name: index_job_tasks_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_owner_uuid ON job_tasks USING btree (owner_uuid);
+CREATE INDEX index_job_tasks_on_owner_uuid ON public.job_tasks USING btree (owner_uuid);
 
 
 --
 -- Name: index_job_tasks_on_sequence; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_sequence ON job_tasks USING btree (sequence);
+CREATE INDEX index_job_tasks_on_sequence ON public.job_tasks USING btree (sequence);
 
 
 --
 -- Name: index_job_tasks_on_success; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_job_tasks_on_success ON job_tasks USING btree (success);
+CREATE INDEX index_job_tasks_on_success ON public.job_tasks USING btree (success);
 
 
 --
 -- Name: index_job_tasks_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_job_tasks_on_uuid ON job_tasks USING btree (uuid);
+CREATE UNIQUE INDEX index_job_tasks_on_uuid ON public.job_tasks USING btree (uuid);
 
 
 --
 -- Name: index_jobs_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_created_at ON jobs USING btree (created_at);
+CREATE INDEX index_jobs_on_created_at ON public.jobs USING btree (created_at);
 
 
 --
 -- Name: index_jobs_on_finished_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_finished_at ON jobs USING btree (finished_at);
+CREATE INDEX index_jobs_on_finished_at ON public.jobs USING btree (finished_at);
 
 
 --
 -- Name: index_jobs_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_modified_at ON jobs USING btree (modified_at);
+CREATE INDEX index_jobs_on_modified_at ON public.jobs USING btree (modified_at);
 
 
 --
 -- Name: index_jobs_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_modified_at_uuid ON jobs USING btree (modified_at DESC, uuid);
+CREATE INDEX index_jobs_on_modified_at_uuid ON public.jobs USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_jobs_on_output; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_output ON jobs USING btree (output);
+CREATE INDEX index_jobs_on_output ON public.jobs USING btree (output);
 
 
 --
 -- Name: index_jobs_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_owner_uuid ON jobs USING btree (owner_uuid);
+CREATE INDEX index_jobs_on_owner_uuid ON public.jobs USING btree (owner_uuid);
 
 
 --
 -- Name: index_jobs_on_script; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_script ON jobs USING btree (script);
+CREATE INDEX index_jobs_on_script ON public.jobs USING btree (script);
 
 
 --
 -- Name: index_jobs_on_script_parameters_digest; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_script_parameters_digest ON jobs USING btree (script_parameters_digest);
+CREATE INDEX index_jobs_on_script_parameters_digest ON public.jobs USING btree (script_parameters_digest);
 
 
 --
 -- Name: index_jobs_on_started_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_jobs_on_started_at ON jobs USING btree (started_at);
+CREATE INDEX index_jobs_on_started_at ON public.jobs USING btree (started_at);
 
 
 --
 -- Name: index_jobs_on_submit_id; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_jobs_on_submit_id ON jobs USING btree (submit_id);
+CREATE UNIQUE INDEX index_jobs_on_submit_id ON public.jobs USING btree (submit_id);
 
 
 --
 -- Name: index_jobs_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_jobs_on_uuid ON jobs USING btree (uuid);
+CREATE UNIQUE INDEX index_jobs_on_uuid ON public.jobs USING btree (uuid);
 
 
 --
 -- Name: index_keep_disks_on_filesystem_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_keep_disks_on_filesystem_uuid ON keep_disks USING btree (filesystem_uuid);
+CREATE INDEX index_keep_disks_on_filesystem_uuid ON public.keep_disks USING btree (filesystem_uuid);
 
 
 --
 -- Name: index_keep_disks_on_last_ping_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_keep_disks_on_last_ping_at ON keep_disks USING btree (last_ping_at);
+CREATE INDEX index_keep_disks_on_last_ping_at ON public.keep_disks USING btree (last_ping_at);
 
 
 --
 -- Name: index_keep_disks_on_node_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_keep_disks_on_node_uuid ON keep_disks USING btree (node_uuid);
+CREATE INDEX index_keep_disks_on_node_uuid ON public.keep_disks USING btree (node_uuid);
 
 
 --
 -- Name: index_keep_disks_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_keep_disks_on_owner_uuid ON keep_disks USING btree (owner_uuid);
+CREATE INDEX index_keep_disks_on_owner_uuid ON public.keep_disks USING btree (owner_uuid);
 
 
 --
 -- Name: index_keep_disks_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_keep_disks_on_uuid ON keep_disks USING btree (uuid);
+CREATE UNIQUE INDEX index_keep_disks_on_uuid ON public.keep_disks USING btree (uuid);
 
 
 --
 -- Name: index_keep_services_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_keep_services_on_owner_uuid ON keep_services USING btree (owner_uuid);
+CREATE INDEX index_keep_services_on_owner_uuid ON public.keep_services USING btree (owner_uuid);
 
 
 --
 -- Name: index_keep_services_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_keep_services_on_uuid ON keep_services USING btree (uuid);
+CREATE UNIQUE INDEX index_keep_services_on_uuid ON public.keep_services USING btree (uuid);
 
 
 --
 -- Name: index_links_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_links_on_created_at ON links USING btree (created_at);
+CREATE INDEX index_links_on_created_at ON public.links USING btree (created_at);
 
 
 --
 -- Name: index_links_on_head_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_links_on_head_uuid ON links USING btree (head_uuid);
+CREATE INDEX index_links_on_head_uuid ON public.links USING btree (head_uuid);
 
 
 --
 -- Name: index_links_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_links_on_modified_at ON links USING btree (modified_at);
+CREATE INDEX index_links_on_modified_at ON public.links USING btree (modified_at);
 
 
 --
 -- Name: index_links_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_links_on_modified_at_uuid ON links USING btree (modified_at DESC, uuid);
+CREATE INDEX index_links_on_modified_at_uuid ON public.links USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_links_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_links_on_owner_uuid ON links USING btree (owner_uuid);
+CREATE INDEX index_links_on_owner_uuid ON public.links USING btree (owner_uuid);
 
 
 --
 -- Name: index_links_on_tail_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_links_on_tail_uuid ON links USING btree (tail_uuid);
+CREATE INDEX index_links_on_tail_uuid ON public.links USING btree (tail_uuid);
 
 
 --
 -- Name: index_links_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_links_on_uuid ON links USING btree (uuid);
+CREATE UNIQUE INDEX index_links_on_uuid ON public.links USING btree (uuid);
 
 
 --
 -- Name: index_logs_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_created_at ON logs USING btree (created_at);
+CREATE INDEX index_logs_on_created_at ON public.logs USING btree (created_at);
 
 
 --
 -- Name: index_logs_on_event_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_event_at ON logs USING btree (event_at);
+CREATE INDEX index_logs_on_event_at ON public.logs USING btree (event_at);
 
 
 --
 -- Name: index_logs_on_event_type; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_event_type ON logs USING btree (event_type);
+CREATE INDEX index_logs_on_event_type ON public.logs USING btree (event_type);
 
 
 --
 -- Name: index_logs_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_modified_at ON logs USING btree (modified_at);
+CREATE INDEX index_logs_on_modified_at ON public.logs USING btree (modified_at);
 
 
 --
 -- Name: index_logs_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_modified_at_uuid ON logs USING btree (modified_at DESC, uuid);
+CREATE INDEX index_logs_on_modified_at_uuid ON public.logs USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_logs_on_object_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_object_owner_uuid ON logs USING btree (object_owner_uuid);
+CREATE INDEX index_logs_on_object_owner_uuid ON public.logs USING btree (object_owner_uuid);
 
 
 --
 -- Name: index_logs_on_object_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_object_uuid ON logs USING btree (object_uuid);
+CREATE INDEX index_logs_on_object_uuid ON public.logs USING btree (object_uuid);
 
 
 --
 -- Name: index_logs_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_owner_uuid ON logs USING btree (owner_uuid);
+CREATE INDEX index_logs_on_owner_uuid ON public.logs USING btree (owner_uuid);
 
 
 --
 -- Name: index_logs_on_summary; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_logs_on_summary ON logs USING btree (summary);
+CREATE INDEX index_logs_on_summary ON public.logs USING btree (summary);
 
 
 --
 -- Name: index_logs_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_logs_on_uuid ON logs USING btree (uuid);
+CREATE UNIQUE INDEX index_logs_on_uuid ON public.logs USING btree (uuid);
 
 
 --
 -- Name: index_nodes_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_nodes_on_created_at ON nodes USING btree (created_at);
+CREATE INDEX index_nodes_on_created_at ON public.nodes USING btree (created_at);
 
 
 --
 -- Name: index_nodes_on_hostname; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_nodes_on_hostname ON nodes USING btree (hostname);
+CREATE INDEX index_nodes_on_hostname ON public.nodes USING btree (hostname);
 
 
 --
 -- Name: index_nodes_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_nodes_on_modified_at ON nodes USING btree (modified_at);
+CREATE INDEX index_nodes_on_modified_at ON public.nodes USING btree (modified_at);
 
 
 --
 -- Name: index_nodes_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_nodes_on_owner_uuid ON nodes USING btree (owner_uuid);
+CREATE INDEX index_nodes_on_owner_uuid ON public.nodes USING btree (owner_uuid);
 
 
 --
 -- Name: index_nodes_on_slot_number; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_nodes_on_slot_number ON nodes USING btree (slot_number);
+CREATE UNIQUE INDEX index_nodes_on_slot_number ON public.nodes USING btree (slot_number);
 
 
 --
 -- Name: index_nodes_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_nodes_on_uuid ON nodes USING btree (uuid);
+CREATE UNIQUE INDEX index_nodes_on_uuid ON public.nodes USING btree (uuid);
 
 
 --
 -- Name: index_pipeline_instances_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_instances_on_created_at ON pipeline_instances USING btree (created_at);
+CREATE INDEX index_pipeline_instances_on_created_at ON public.pipeline_instances USING btree (created_at);
 
 
 --
 -- Name: index_pipeline_instances_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_instances_on_modified_at ON pipeline_instances USING btree (modified_at);
+CREATE INDEX index_pipeline_instances_on_modified_at ON public.pipeline_instances USING btree (modified_at);
 
 
 --
 -- Name: index_pipeline_instances_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_instances_on_modified_at_uuid ON pipeline_instances USING btree (modified_at DESC, uuid);
+CREATE INDEX index_pipeline_instances_on_modified_at_uuid ON public.pipeline_instances USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_pipeline_instances_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_instances_on_owner_uuid ON pipeline_instances USING btree (owner_uuid);
+CREATE INDEX index_pipeline_instances_on_owner_uuid ON public.pipeline_instances USING btree (owner_uuid);
 
 
 --
 -- Name: index_pipeline_instances_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_pipeline_instances_on_uuid ON pipeline_instances USING btree (uuid);
+CREATE UNIQUE INDEX index_pipeline_instances_on_uuid ON public.pipeline_instances USING btree (uuid);
 
 
 --
 -- Name: index_pipeline_templates_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_templates_on_created_at ON pipeline_templates USING btree (created_at);
+CREATE INDEX index_pipeline_templates_on_created_at ON public.pipeline_templates USING btree (created_at);
 
 
 --
 -- Name: index_pipeline_templates_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_templates_on_modified_at ON pipeline_templates USING btree (modified_at);
+CREATE INDEX index_pipeline_templates_on_modified_at ON public.pipeline_templates USING btree (modified_at);
 
 
 --
 -- Name: index_pipeline_templates_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_templates_on_modified_at_uuid ON pipeline_templates USING btree (modified_at DESC, uuid);
+CREATE INDEX index_pipeline_templates_on_modified_at_uuid ON public.pipeline_templates USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_pipeline_templates_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_pipeline_templates_on_owner_uuid ON pipeline_templates USING btree (owner_uuid);
+CREATE INDEX index_pipeline_templates_on_owner_uuid ON public.pipeline_templates USING btree (owner_uuid);
 
 
 --
 -- Name: index_pipeline_templates_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_pipeline_templates_on_uuid ON pipeline_templates USING btree (uuid);
+CREATE UNIQUE INDEX index_pipeline_templates_on_uuid ON public.pipeline_templates USING btree (uuid);
 
 
 --
 -- Name: index_repositories_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_repositories_on_modified_at_uuid ON repositories USING btree (modified_at DESC, uuid);
+CREATE INDEX index_repositories_on_modified_at_uuid ON public.repositories USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_repositories_on_name; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_repositories_on_name ON repositories USING btree (name);
+CREATE UNIQUE INDEX index_repositories_on_name ON public.repositories USING btree (name);
 
 
 --
 -- Name: index_repositories_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_repositories_on_owner_uuid ON repositories USING btree (owner_uuid);
+CREATE INDEX index_repositories_on_owner_uuid ON public.repositories USING btree (owner_uuid);
 
 
 --
 -- Name: index_repositories_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_repositories_on_uuid ON repositories USING btree (uuid);
+CREATE UNIQUE INDEX index_repositories_on_uuid ON public.repositories USING btree (uuid);
 
 
 --
 -- Name: index_specimens_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_specimens_on_created_at ON specimens USING btree (created_at);
+CREATE INDEX index_specimens_on_created_at ON public.specimens USING btree (created_at);
 
 
 --
 -- Name: index_specimens_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_specimens_on_modified_at ON specimens USING btree (modified_at);
+CREATE INDEX index_specimens_on_modified_at ON public.specimens USING btree (modified_at);
 
 
 --
 -- Name: index_specimens_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_specimens_on_owner_uuid ON specimens USING btree (owner_uuid);
+CREATE INDEX index_specimens_on_owner_uuid ON public.specimens USING btree (owner_uuid);
 
 
 --
 -- Name: index_specimens_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_specimens_on_uuid ON specimens USING btree (uuid);
+CREATE UNIQUE INDEX index_specimens_on_uuid ON public.specimens USING btree (uuid);
 
 
 --
 -- Name: index_traits_on_name; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_traits_on_name ON traits USING btree (name);
+CREATE INDEX index_traits_on_name ON public.traits USING btree (name);
 
 
 --
 -- Name: index_traits_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_traits_on_owner_uuid ON traits USING btree (owner_uuid);
+CREATE INDEX index_traits_on_owner_uuid ON public.traits USING btree (owner_uuid);
 
 
 --
 -- Name: index_traits_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_traits_on_uuid ON traits USING btree (uuid);
+CREATE UNIQUE INDEX index_traits_on_uuid ON public.traits USING btree (uuid);
 
 
 --
 -- Name: index_users_on_created_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_users_on_created_at ON users USING btree (created_at);
+CREATE INDEX index_users_on_created_at ON public.users USING btree (created_at);
 
 
 --
 -- Name: index_users_on_modified_at; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_users_on_modified_at ON users USING btree (modified_at);
+CREATE INDEX index_users_on_modified_at ON public.users USING btree (modified_at);
 
 
 --
 -- Name: index_users_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_users_on_modified_at_uuid ON users USING btree (modified_at DESC, uuid);
+CREATE INDEX index_users_on_modified_at_uuid ON public.users USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_users_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_users_on_owner_uuid ON users USING btree (owner_uuid);
+CREATE INDEX index_users_on_owner_uuid ON public.users USING btree (owner_uuid);
 
 
 --
 -- Name: index_users_on_username; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_users_on_username ON users USING btree (username);
+CREATE UNIQUE INDEX index_users_on_username ON public.users USING btree (username);
 
 
 --
 -- Name: index_users_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_users_on_uuid ON users USING btree (uuid);
+CREATE UNIQUE INDEX index_users_on_uuid ON public.users USING btree (uuid);
 
 
 --
 -- Name: index_virtual_machines_on_hostname; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_virtual_machines_on_hostname ON virtual_machines USING btree (hostname);
+CREATE INDEX index_virtual_machines_on_hostname ON public.virtual_machines USING btree (hostname);
 
 
 --
 -- Name: index_virtual_machines_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_virtual_machines_on_modified_at_uuid ON virtual_machines USING btree (modified_at DESC, uuid);
+CREATE INDEX index_virtual_machines_on_modified_at_uuid ON public.virtual_machines USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_virtual_machines_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_virtual_machines_on_owner_uuid ON virtual_machines USING btree (owner_uuid);
+CREATE INDEX index_virtual_machines_on_owner_uuid ON public.virtual_machines USING btree (owner_uuid);
 
 
 --
 -- Name: index_virtual_machines_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_virtual_machines_on_uuid ON virtual_machines USING btree (uuid);
+CREATE UNIQUE INDEX index_virtual_machines_on_uuid ON public.virtual_machines USING btree (uuid);
 
 
 --
 -- Name: index_workflows_on_modified_at_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_workflows_on_modified_at_uuid ON workflows USING btree (modified_at DESC, uuid);
+CREATE INDEX index_workflows_on_modified_at_uuid ON public.workflows USING btree (modified_at DESC, uuid);
 
 
 --
 -- Name: index_workflows_on_owner_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX index_workflows_on_owner_uuid ON workflows USING btree (owner_uuid);
+CREATE INDEX index_workflows_on_owner_uuid ON public.workflows USING btree (owner_uuid);
 
 
 --
 -- Name: index_workflows_on_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX index_workflows_on_uuid ON workflows USING btree (uuid);
+CREATE UNIQUE INDEX index_workflows_on_uuid ON public.workflows USING btree (uuid);
 
 
 --
 -- Name: job_tasks_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX job_tasks_search_index ON job_tasks USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, job_uuid, created_by_job_task_uuid);
+CREATE INDEX job_tasks_search_index ON public.job_tasks USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, job_uuid, created_by_job_task_uuid);
 
 
 --
 -- Name: jobs_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX jobs_full_text_search_idx ON jobs USING gin (to_tsvector('english'::regconfig, (((((((((((((((((((((((((((((((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(submit_id, ''::character varying))::text) || ' '::text) || (COALESCE(script, ''::character varying))::text) || ' '::text) || (COALESCE(script_version, ''::character varying))::text) || ' '::text) || COALESCE(script_parameters, ''::text)) || ' '::text) || (COALESCE(cancelled_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(cancelled_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(output, ''::character varying))::text) || ' '::text) || (COALESCE(is_locked_by_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(log, ''::character varying))::text) || ' '::text) || COALESCE(tasks_summary, ''::text)) || ' '::text) || COALESCE(runtime_constraints, ''::text)) || ' '::text) || (COALESCE(repository, ''::character varying))::text) || ' '::text) || (COALESCE(supplied_script_version, ''::character varying))::text) || ' '::text) || (COALESCE(docker_image_locator, ''::character varying))::text) || ' '::text) || (COALESCE(description, ''::character varying))::text) || ' '::text) || (COALESCE(state, ''::character varying))::text) || ' '::text) || (COALESCE(arvados_sdk_version, ''::character varying))::text) || ' '::text) || COALESCE(components, ''::text))));
+CREATE INDEX jobs_full_text_search_idx ON public.jobs USING gin (to_tsvector('english'::regconfig, (((((((((((((((((((((((((((((((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(submit_id, ''::character varying))::text) || ' '::text) || (COALESCE(script, ''::character varying))::text) || ' '::text) || (COALESCE(script_version, ''::character varying))::text) || ' '::text) || COALESCE(script_parameters, ''::text)) || ' '::text) || (COALESCE(cancelled_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(cancelled_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(output, ''::character varying))::text) || ' '::text) || (COALESCE(is_locked_by_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(log, ''::character varying))::text) || ' '::text) || COALESCE(tasks_summary, ''::text)) || ' '::text) || COALESCE(runtime_constraints, ''::text)) || ' '::text) || (COALESCE(repository, ''::character varying))::text) || ' '::text) || (COALESCE(supplied_script_version, ''::character varying))::text) || ' '::text) || (COALESCE(docker_image_locator, ''::character varying))::text) || ' '::text) || (COALESCE(description, ''::character varying))::text) || ' '::text) || (COALESCE(state, ''::character varying))::text) || ' '::text) || (COALESCE(arvados_sdk_version, ''::character varying))::text) || ' '::text) || COALESCE(components, ''::text))));
 
 
 --
 -- Name: jobs_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX jobs_search_index ON jobs USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, submit_id, script, script_version, cancelled_by_client_uuid, cancelled_by_user_uuid, output, is_locked_by_uuid, log, repository, supplied_script_version, docker_image_locator, state, arvados_sdk_version);
+CREATE INDEX jobs_search_index ON public.jobs USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, submit_id, script, script_version, cancelled_by_client_uuid, cancelled_by_user_uuid, output, is_locked_by_uuid, log, repository, supplied_script_version, docker_image_locator, state, arvados_sdk_version);
 
 
 --
 -- Name: keep_disks_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX keep_disks_search_index ON keep_disks USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, ping_secret, node_uuid, filesystem_uuid, keep_service_uuid);
+CREATE INDEX keep_disks_search_index ON public.keep_disks USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, ping_secret, node_uuid, filesystem_uuid, keep_service_uuid);
 
 
 --
 -- Name: keep_services_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX keep_services_search_index ON keep_services USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, service_host, service_type);
+CREATE INDEX keep_services_search_index ON public.keep_services USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, service_host, service_type);
 
 
 --
 -- Name: links_index_on_properties; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX links_index_on_properties ON links USING gin (properties);
+CREATE INDEX links_index_on_properties ON public.links USING gin (properties);
 
 
 --
 -- Name: links_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX links_search_index ON links USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, tail_uuid, link_class, name, head_uuid);
+CREATE INDEX links_search_index ON public.links USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, tail_uuid, link_class, name, head_uuid);
 
 
 --
 -- Name: links_tail_name_unique_if_link_class_name; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX links_tail_name_unique_if_link_class_name ON links USING btree (tail_uuid, name) WHERE ((link_class)::text = 'name'::text);
+CREATE UNIQUE INDEX links_tail_name_unique_if_link_class_name ON public.links USING btree (tail_uuid, name) WHERE ((link_class)::text = 'name'::text);
 
 
 --
 -- Name: logs_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX logs_search_index ON logs USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, object_uuid, event_type, object_owner_uuid);
+CREATE INDEX logs_search_index ON public.logs USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, object_uuid, event_type, object_owner_uuid);
 
 
 --
 -- Name: nodes_index_on_info; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX nodes_index_on_info ON nodes USING gin (info);
+CREATE INDEX nodes_index_on_info ON public.nodes USING gin (info);
 
 
 --
 -- Name: nodes_index_on_properties; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX nodes_index_on_properties ON nodes USING gin (properties);
+CREATE INDEX nodes_index_on_properties ON public.nodes USING gin (properties);
 
 
 --
 -- Name: nodes_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX nodes_search_index ON nodes USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, hostname, domain, ip_address, job_uuid);
+CREATE INDEX nodes_search_index ON public.nodes USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, hostname, domain, ip_address, job_uuid);
 
 
 --
 -- Name: permission_target_trashed; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX permission_target_trashed ON materialized_permission_view USING btree (trashed, target_uuid);
+CREATE INDEX permission_target_trashed ON public.materialized_permission_view USING btree (trashed, target_uuid);
 
 
 --
 -- Name: permission_target_user_trashed_level; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX permission_target_user_trashed_level ON materialized_permission_view USING btree (user_uuid, trashed, perm_level);
+CREATE INDEX permission_target_user_trashed_level ON public.materialized_permission_view USING btree (user_uuid, trashed, perm_level);
 
 
 --
 -- Name: pipeline_instances_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX pipeline_instances_full_text_search_idx ON pipeline_instances USING gin (to_tsvector('english'::regconfig, (((((((((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(pipeline_template_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(components, ''::text)) || ' '::text) || COALESCE(properties, ''::text)) || ' '::text) || (COALESCE(state, ''::character varying))::text) || ' '::text) || COALESCE(components_summary, ''::text)) || ' '::text) || (COALESCE(description, ''::character varying))::text)));
+CREATE INDEX pipeline_instances_full_text_search_idx ON public.pipeline_instances USING gin (to_tsvector('english'::regconfig, (((((((((((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(pipeline_template_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(components, ''::text)) || ' '::text) || COALESCE(properties, ''::text)) || ' '::text) || (COALESCE(state, ''::character varying))::text) || ' '::text) || COALESCE(components_summary, ''::text)) || ' '::text) || (COALESCE(description, ''::character varying))::text)));
 
 
 --
 -- Name: pipeline_instances_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX pipeline_instances_search_index ON pipeline_instances USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, pipeline_template_uuid, name, state);
+CREATE INDEX pipeline_instances_search_index ON public.pipeline_instances USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, pipeline_template_uuid, name, state);
 
 
 --
 -- Name: pipeline_template_owner_uuid_name_unique; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX pipeline_template_owner_uuid_name_unique ON pipeline_templates USING btree (owner_uuid, name);
+CREATE UNIQUE INDEX pipeline_template_owner_uuid_name_unique ON public.pipeline_templates USING btree (owner_uuid, name);
 
 
 --
 -- Name: pipeline_templates_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX pipeline_templates_full_text_search_idx ON pipeline_templates USING gin (to_tsvector('english'::regconfig, (((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(components, ''::text)) || ' '::text) || (COALESCE(description, ''::character varying))::text)));
+CREATE INDEX pipeline_templates_full_text_search_idx ON public.pipeline_templates USING gin (to_tsvector('english'::regconfig, (((((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(components, ''::text)) || ' '::text) || (COALESCE(description, ''::character varying))::text)));
 
 
 --
 -- Name: pipeline_templates_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX pipeline_templates_search_index ON pipeline_templates USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
+CREATE INDEX pipeline_templates_search_index ON public.pipeline_templates USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
 
 
 --
 -- Name: repositories_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX repositories_search_index ON repositories USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
+CREATE INDEX repositories_search_index ON public.repositories USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
 
 
 --
 -- Name: specimens_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX specimens_search_index ON specimens USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, material);
+CREATE INDEX specimens_search_index ON public.specimens USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, material);
 
 
 --
 -- Name: traits_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX traits_search_index ON traits USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
+CREATE INDEX traits_search_index ON public.traits USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
 
 
 --
 -- Name: unique_schema_migrations; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX unique_schema_migrations ON schema_migrations USING btree (version);
+CREATE UNIQUE INDEX unique_schema_migrations ON public.schema_migrations USING btree (version);
 
 
 --
 -- Name: users_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX users_search_index ON users USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, email, first_name, last_name, identity_url, default_owner_uuid, username, redirect_to_user_uuid);
+CREATE INDEX users_search_index ON public.users USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, email, first_name, last_name, identity_url, default_owner_uuid, username, redirect_to_user_uuid);
 
 
 --
 -- Name: virtual_machines_search_index; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX virtual_machines_search_index ON virtual_machines USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, hostname);
+CREATE INDEX virtual_machines_search_index ON public.virtual_machines USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, hostname);
 
 
 --
 -- Name: workflows_full_text_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX workflows_full_text_search_idx ON workflows USING gin (to_tsvector('english'::regconfig, (((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(description, ''::text))));
+CREATE INDEX workflows_full_text_search_idx ON public.workflows USING gin (to_tsvector('english'::regconfig, (((((((((((COALESCE(uuid, ''::character varying))::text || ' '::text) || (COALESCE(owner_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_client_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(modified_by_user_uuid, ''::character varying))::text) || ' '::text) || (COALESCE(name, ''::character varying))::text) || ' '::text) || COALESCE(description, ''::text))));
 
 
 --
 -- Name: workflows_search_idx; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX workflows_search_idx ON workflows USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
+CREATE INDEX workflows_search_idx ON public.workflows USING btree (uuid, owner_uuid, modified_by_client_uuid, modified_by_user_uuid, name);
 
 
 --
@@ -3120,3 +3119,5 @@ INSERT INTO schema_migrations (version) VALUES ('20180607175050');
 
 INSERT INTO schema_migrations (version) VALUES ('20180608123145');
 
+INSERT INTO schema_migrations (version) VALUES ('20180806133039');
+
index d1f19dd7b5702e2431471bc7ce2164f553a8cb11..b4103cc625a2badc3a3ab3f3d7458bac3f35e34e 100644 (file)
@@ -252,9 +252,6 @@ func (disp *Dispatcher) submit(container arvados.Container, crunchRunCommand []s
        crArgs = append(crArgs, container.UUID)
        crScript := strings.NewReader(execScript(crArgs))
 
-       disp.sqCheck.L.Lock()
-       defer disp.sqCheck.L.Unlock()
-
        sbArgs, err := disp.sbatchArgs(container)
        if err != nil {
                return err
@@ -355,10 +352,7 @@ func (disp *Dispatcher) runContainer(_ *dispatch.Dispatcher, ctr arvados.Contain
        }
 }
 func (disp *Dispatcher) scancel(ctr arvados.Container) {
-       disp.sqCheck.L.Lock()
        err := disp.slurm.Cancel(ctr.UUID)
-       disp.sqCheck.L.Unlock()
-
        if err != nil {
                log.Printf("scancel: %s", err)
                time.Sleep(time.Second)
index 719ec98d27aa19d65eceb7d3db3a46f506aed2f0..4ef4ba1d5d85a076a11dd0faf78c5b92d3641fcf 100644 (file)
@@ -116,7 +116,7 @@ func (s *IntegrationSuite) integrationTest(c *C,
        var containers arvados.ContainerList
        err = arv.List("containers", params, &containers)
        c.Check(err, IsNil)
-       c.Check(len(containers.Items), Equals, 1)
+       c.Assert(len(containers.Items), Equals, 1)
 
        s.disp.CrunchRunCommand = []string{"echo"}
 
index fd4851eb0a8a92b48fcacef0e4552ce99d0a7f48..20305ab90abe91b150ae71a7749fd39c8e529548 100644 (file)
@@ -33,7 +33,8 @@ type SqueueChecker struct {
        queue          map[string]*slurmJob
        startOnce      sync.Once
        done           chan struct{}
-       sync.Cond
+       lock           sync.RWMutex
+       notify         sync.Cond
 }
 
 // HasUUID checks if a given container UUID is in the slurm queue.
@@ -42,11 +43,11 @@ type SqueueChecker struct {
 func (sqc *SqueueChecker) HasUUID(uuid string) bool {
        sqc.startOnce.Do(sqc.start)
 
-       sqc.L.Lock()
-       defer sqc.L.Unlock()
+       sqc.lock.RLock()
+       defer sqc.lock.RUnlock()
 
        // block until next squeue broadcast signaling an update.
-       sqc.Wait()
+       sqc.notify.Wait()
        _, exists := sqc.queue[uuid]
        return exists
 }
@@ -55,25 +56,30 @@ func (sqc *SqueueChecker) HasUUID(uuid string) bool {
 // container.
 func (sqc *SqueueChecker) SetPriority(uuid string, want int64) {
        sqc.startOnce.Do(sqc.start)
-       sqc.L.Lock()
-       defer sqc.L.Unlock()
-       job, ok := sqc.queue[uuid]
-       if !ok {
+
+       sqc.lock.RLock()
+       job := sqc.queue[uuid]
+       if job == nil {
                // Wait in case the slurm job was just submitted and
                // will appear in the next squeue update.
-               sqc.Wait()
-               if job, ok = sqc.queue[uuid]; !ok {
-                       return
-               }
+               sqc.notify.Wait()
+               job = sqc.queue[uuid]
+       }
+       needUpdate := job != nil && job.wantPriority != want
+       sqc.lock.RUnlock()
+
+       if needUpdate {
+               sqc.lock.Lock()
+               job.wantPriority = want
+               sqc.lock.Unlock()
        }
-       job.wantPriority = want
 }
 
 // adjust slurm job nice values as needed to ensure slurm priority
 // order matches Arvados priority order.
 func (sqc *SqueueChecker) reniceAll() {
-       sqc.L.Lock()
-       defer sqc.L.Unlock()
+       sqc.lock.RLock()
+       defer sqc.lock.RUnlock()
 
        jobs := make([]*slurmJob, 0, len(sqc.queue))
        for _, j := range sqc.queue {
@@ -82,7 +88,7 @@ func (sqc *SqueueChecker) reniceAll() {
                        // (perhaps it's not an Arvados job)
                        continue
                }
-               if j.priority == 0 {
+               if j.priority <= 2*slurm15NiceLimit {
                        // SLURM <= 15.x implements "hold" by setting
                        // priority to 0. If we include held jobs
                        // here, we'll end up trying to push other
@@ -133,12 +139,8 @@ func (sqc *SqueueChecker) Stop() {
 // queued). If it succeeds, it updates sqc.queue and wakes up any
 // goroutines that are waiting in HasUUID() or All().
 func (sqc *SqueueChecker) check() {
-       // Mutex between squeue sync and running sbatch or scancel.  This
-       // establishes a sequence so that squeue doesn't run concurrently with
-       // sbatch or scancel; the next update of squeue will occur only after
-       // sbatch or scancel has completed.
-       sqc.L.Lock()
-       defer sqc.L.Unlock()
+       sqc.lock.Lock()
+       defer sqc.lock.Unlock()
 
        cmd := sqc.Slurm.QueueCommand([]string{"--all", "--noheader", "--format=%j %y %Q %T %r"})
        stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{}
@@ -191,18 +193,18 @@ func (sqc *SqueueChecker) check() {
                        // resolved the same way.
                        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 {
+               } else if state != "RUNNING" && p <= 2*slurm15NiceLimit && replacing.wantPriority > 0 {
                        log.Printf("warning: job %q has low priority %d, nice %d, state %q, reason %q", uuid, p, n, state, reason)
                }
        }
        sqc.queue = newq
-       sqc.Broadcast()
+       sqc.notify.Broadcast()
 }
 
 // Initialize, and start a goroutine to call check() once per
 // squeue.Period until terminated by calling Stop().
 func (sqc *SqueueChecker) start() {
-       sqc.L = &sync.Mutex{}
+       sqc.notify.L = sqc.lock.RLocker()
        sqc.done = make(chan struct{})
        go func() {
                ticker := time.NewTicker(sqc.Period)
@@ -214,6 +216,15 @@ func (sqc *SqueueChecker) start() {
                        case <-ticker.C:
                                sqc.check()
                                sqc.reniceAll()
+                               select {
+                               case <-ticker.C:
+                                       // If this iteration took
+                                       // longer than sqc.Period,
+                                       // consume the next tick and
+                                       // wait. Otherwise we would
+                                       // starve other goroutines.
+                               default:
+                               }
                        }
                }
        }()
@@ -223,9 +234,9 @@ func (sqc *SqueueChecker) start() {
 // names reported by squeue.
 func (sqc *SqueueChecker) All() []string {
        sqc.startOnce.Do(sqc.start)
-       sqc.L.Lock()
-       defer sqc.L.Unlock()
-       sqc.Wait()
+       sqc.lock.RLock()
+       defer sqc.lock.RUnlock()
+       sqc.notify.Wait()
        var uuids []string
        for u := range sqc.queue {
                uuids = append(uuids, u)
index b2bab78216eaf921a4710a5037d9af2231df31c5..8336b78f9ea9614af2796211d9ed89d58da741e8 100644 (file)
@@ -6,7 +6,6 @@ package main
 
 import (
        "sync"
-       "sync/atomic"
        "time"
 
        "git.curoverse.com/arvados.git/sdk/go/arvados"
@@ -26,7 +25,6 @@ type cache struct {
        MaxUUIDEntries       int
 
        registry    *prometheus.Registry
-       stats       cacheStats
        metrics     cacheMetrics
        pdhs        *lru.TwoQueueCache
        collections *lru.TwoQueueCache
@@ -34,17 +32,6 @@ type cache struct {
        setupOnce   sync.Once
 }
 
-// cacheStats is EOL - add new metrics to cacheMetrics instead
-type cacheStats struct {
-       Requests          uint64 `json:"Cache.Requests"`
-       CollectionBytes   uint64 `json:"Cache.CollectionBytes"`
-       CollectionEntries int    `json:"Cache.CollectionEntries"`
-       CollectionHits    uint64 `json:"Cache.CollectionHits"`
-       PDHHits           uint64 `json:"Cache.UUIDHits"`
-       PermissionHits    uint64 `json:"Cache.PermissionHits"`
-       APICalls          uint64 `json:"Cache.APICalls"`
-}
-
 type cacheMetrics struct {
        requests          prometheus.Counter
        collectionBytes   prometheus.Gauge
@@ -157,19 +144,6 @@ var selectPDH = map[string]interface{}{
        "select": []string{"portable_data_hash"},
 }
 
-func (c *cache) Stats() cacheStats {
-       c.setupOnce.Do(c.setup)
-       return cacheStats{
-               Requests:          atomic.LoadUint64(&c.stats.Requests),
-               CollectionBytes:   c.collectionBytes(),
-               CollectionEntries: c.collections.Len(),
-               CollectionHits:    atomic.LoadUint64(&c.stats.CollectionHits),
-               PDHHits:           atomic.LoadUint64(&c.stats.PDHHits),
-               PermissionHits:    atomic.LoadUint64(&c.stats.PermissionHits),
-               APICalls:          atomic.LoadUint64(&c.stats.APICalls),
-       }
-}
-
 // Update saves a modified version (fs) to an existing collection
 // (coll) and, if successful, updates the relevant cache entries so
 // subsequent calls to Get() reflect the modifications.
@@ -195,8 +169,6 @@ func (c *cache) Update(client *arvados.Client, coll arvados.Collection, fs arvad
 
 func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceReload bool) (*arvados.Collection, error) {
        c.setupOnce.Do(c.setup)
-
-       atomic.AddUint64(&c.stats.Requests, 1)
        c.metrics.requests.Inc()
 
        permOK := false
@@ -208,7 +180,6 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo
                        c.permissions.Remove(permKey)
                } else {
                        permOK = true
-                       atomic.AddUint64(&c.stats.PermissionHits, 1)
                        c.metrics.permissionHits.Inc()
                }
        }
@@ -222,7 +193,6 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo
                        c.pdhs.Remove(targetID)
                } else {
                        pdh = ent.pdh
-                       atomic.AddUint64(&c.stats.PDHHits, 1)
                        c.metrics.pdhHits.Inc()
                }
        }
@@ -239,7 +209,6 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo
                // likely, the cached PDH is still correct; if so,
                // _and_ the current token has permission, we can
                // use our cached manifest.
-               atomic.AddUint64(&c.stats.APICalls, 1)
                c.metrics.apiCalls.Inc()
                var current arvados.Collection
                err := arv.Get("collections", targetID, selectPDH, &current)
@@ -268,7 +237,6 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo
        }
 
        // Collection manifest is not cached.
-       atomic.AddUint64(&c.stats.APICalls, 1)
        c.metrics.apiCalls.Inc()
        err := arv.Get("collections", targetID, nil, &collection)
        if err != nil {
@@ -359,7 +327,6 @@ func (c *cache) lookupCollection(key string) *arvados.Collection {
                c.collections.Remove(key)
                return nil
        }
-       atomic.AddUint64(&c.stats.CollectionHits, 1)
        c.metrics.collectionHits.Inc()
        return ent.collection
 }
index cddeaf489763500b9e7230a75c2b19a4c25f40cf..d147573eec72d402faec43c21da86a010f13dc94 100644 (file)
@@ -5,17 +5,36 @@
 package main
 
 import (
+       "bytes"
+
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        "git.curoverse.com/arvados.git/sdk/go/arvadostest"
+       "github.com/prometheus/client_golang/prometheus"
+       "github.com/prometheus/common/expfmt"
        "gopkg.in/check.v1"
 )
 
+func (s *UnitSuite) checkCacheMetrics(c *check.C, reg *prometheus.Registry, regs ...string) {
+       mfs, err := reg.Gather()
+       c.Check(err, check.IsNil)
+       buf := &bytes.Buffer{}
+       enc := expfmt.NewEncoder(buf, expfmt.FmtText)
+       for _, mf := range mfs {
+               c.Check(enc.Encode(mf), check.IsNil)
+       }
+       mm := buf.String()
+       for _, reg := range regs {
+               c.Check(mm, check.Matches, `(?ms).*collectioncache_`+reg+`\n.*`)
+       }
+}
+
 func (s *UnitSuite) TestCache(c *check.C) {
        arv, err := arvadosclient.MakeArvadosClient()
        c.Assert(err, check.Equals, nil)
 
        cache := DefaultConfig().Cache
+       cache.registry = prometheus.NewRegistry()
 
        // Hit the same collection 5 times using the same token. Only
        // the first req should cause an API call; the next 4 should
@@ -29,11 +48,12 @@ func (s *UnitSuite) TestCache(c *check.C) {
                c.Check(coll.PortableDataHash, check.Equals, arvadostest.FooPdh)
                c.Check(coll.ManifestText[:2], check.Equals, ". ")
        }
-       c.Check(cache.Stats().Requests, check.Equals, uint64(5))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(4))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(1))
+       s.checkCacheMetrics(c, cache.registry,
+               "requests 5",
+               "hits 4",
+               "permission_hits 4",
+               "pdh_hits 4",
+               "api_calls 1")
 
        // Hit the same collection 2 more times, this time requesting
        // it by PDH and using a different token. The first req should
@@ -49,11 +69,12 @@ func (s *UnitSuite) TestCache(c *check.C) {
        c.Check(coll2.ManifestText[:2], check.Equals, ". ")
        c.Check(coll2.ManifestText, check.Not(check.Equals), coll.ManifestText)
 
-       c.Check(cache.Stats().Requests, check.Equals, uint64(5+1))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4+0))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(4+0))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4+0))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(1+1))
+       s.checkCacheMetrics(c, cache.registry,
+               "requests 6",
+               "hits 4",
+               "permission_hits 4",
+               "pdh_hits 4",
+               "api_calls 2")
 
        coll2, err = cache.Get(arv, arvadostest.FooPdh, false)
        c.Check(err, check.Equals, nil)
@@ -61,11 +82,12 @@ func (s *UnitSuite) TestCache(c *check.C) {
        c.Check(coll2.PortableDataHash, check.Equals, arvadostest.FooPdh)
        c.Check(coll2.ManifestText[:2], check.Equals, ". ")
 
-       c.Check(cache.Stats().Requests, check.Equals, uint64(5+2))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4+1))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(4+1))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4+0))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(1+1))
+       s.checkCacheMetrics(c, cache.registry,
+               "requests 7",
+               "hits 5",
+               "permission_hits 5",
+               "pdh_hits 4",
+               "api_calls 2")
 
        // Alternating between two collections N times should produce
        // only 2 more API calls.
@@ -80,11 +102,12 @@ func (s *UnitSuite) TestCache(c *check.C) {
                _, err := cache.Get(arv, target, false)
                c.Check(err, check.Equals, nil)
        }
-       c.Check(cache.Stats().Requests, check.Equals, uint64(5+2+20))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4+1+18))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(4+1+18))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4+0+18))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(1+1+2))
+       s.checkCacheMetrics(c, cache.registry,
+               "requests 27",
+               "hits 23",
+               "permission_hits 23",
+               "pdh_hits 22",
+               "api_calls 4")
 }
 
 func (s *UnitSuite) TestCacheForceReloadByPDH(c *check.C) {
@@ -92,17 +115,19 @@ func (s *UnitSuite) TestCacheForceReloadByPDH(c *check.C) {
        c.Assert(err, check.Equals, nil)
 
        cache := DefaultConfig().Cache
+       cache.registry = prometheus.NewRegistry()
 
        for _, forceReload := range []bool{false, true, false, true} {
                _, err := cache.Get(arv, arvadostest.FooPdh, forceReload)
                c.Check(err, check.Equals, nil)
        }
 
-       c.Check(cache.Stats().Requests, check.Equals, uint64(4))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(3))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(1))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(0))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(3))
+       s.checkCacheMetrics(c, cache.registry,
+               "requests 4",
+               "hits 3",
+               "permission_hits 1",
+               "pdh_hits 0",
+               "api_calls 3")
 }
 
 func (s *UnitSuite) TestCacheForceReloadByUUID(c *check.C) {
@@ -110,15 +135,17 @@ func (s *UnitSuite) TestCacheForceReloadByUUID(c *check.C) {
        c.Assert(err, check.Equals, nil)
 
        cache := DefaultConfig().Cache
+       cache.registry = prometheus.NewRegistry()
 
        for _, forceReload := range []bool{false, true, false, true} {
                _, err := cache.Get(arv, arvadostest.FooCollection, forceReload)
                c.Check(err, check.Equals, nil)
        }
 
-       c.Check(cache.Stats().Requests, check.Equals, uint64(4))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(3))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(1))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(3))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(3))
+       s.checkCacheMetrics(c, cache.registry,
+               "requests 4",
+               "hits 3",
+               "permission_hits 1",
+               "pdh_hits 3",
+               "api_calls 3")
 }
index d0ba431aa6312d64f44e518d5ca19d8826ad1c5c..bb77e5859449f5e7e4783d76d02120c359d51085 100644 (file)
@@ -91,14 +91,7 @@ func (h *handler) setup() {
 }
 
 func (h *handler) serveStatus(w http.ResponseWriter, r *http.Request) {
-       status := struct {
-               cacheStats
-               Version string
-       }{
-               cacheStats: h.Config.Cache.Stats(),
-               Version:    version,
-       }
-       json.NewEncoder(w).Encode(status)
+       json.NewEncoder(w).Encode(struct{ Version string }{version})
 }
 
 // updateOnSuccess wraps httpserver.ResponseWriter. If the handler
index 0a2b9eb988dce96c4791f7cbbaf0c602d5b16980..62db198dd9b9ef27618b9bfd04262b32ac2736f0 100644 (file)
@@ -30,7 +30,6 @@ func (s *UnitSuite) TestStatus(c *check.C) {
        var status map[string]interface{}
        err := json.NewDecoder(resp.Body).Decode(&status)
        c.Check(err, check.IsNil)
-       c.Check(status["Cache.Requests"], check.Equals, float64(0))
        c.Check(status["Version"], check.Not(check.Equals), "")
 }
 
index 4fda7e76d69ed87aa1b5b032f1e3b1b8e608f5b5..4857e891a77b010987221142ce7bb12ebaa048e8 100644 (file)
@@ -51,6 +51,9 @@ class NodeManagerConfig(ConfigParser.SafeConfigParser):
             'Daemon': {'min_nodes': '0',
                        'max_nodes': '1',
                        'poll_time': '60',
+                       'cloudlist_poll_time': '0',
+                       'nodelist_poll_time': '0',
+                       'wishlist_poll_time': '0',
                        'max_poll_time': '300',
                        'poll_stale_after': '600',
                        'max_total_price': '0',
index 1439c94118a913179f09a928df38caaab4c24e04..34ea9adb3da4dd17c8aa48505dff72b12cb8b936 100644 (file)
@@ -83,16 +83,20 @@ def launch_pollers(config, server_calculator):
     poll_time = config.getfloat('Daemon', 'poll_time')
     max_poll_time = config.getint('Daemon', 'max_poll_time')
 
+    cloudlist_poll_time = config.getfloat('Daemon', 'cloudlist_poll_time') or poll_time
+    nodelist_poll_time = config.getfloat('Daemon', 'nodelist_poll_time') or poll_time
+    wishlist_poll_time = config.getfloat('Daemon', 'wishlist_poll_time') or poll_time
+
     timer = TimedCallBackActor.start(poll_time / 10.0).tell_proxy()
     cloud_node_poller = CloudNodeListMonitorActor.start(
-        config.new_cloud_client(), timer, server_calculator, poll_time, max_poll_time).tell_proxy()
+        config.new_cloud_client(), timer, server_calculator, cloudlist_poll_time, max_poll_time).tell_proxy()
     arvados_node_poller = ArvadosNodeListMonitorActor.start(
-        config.new_arvados_client(), timer, poll_time, max_poll_time).tell_proxy()
+        config.new_arvados_client(), timer, nodelist_poll_time, max_poll_time).tell_proxy()
     job_queue_poller = JobQueueMonitorActor.start(
         config.new_arvados_client(), timer, server_calculator,
         config.getboolean('Arvados', 'jobs_queue'),
         config.getboolean('Arvados', 'slurm_queue'),
-        poll_time, max_poll_time
+        wishlist_poll_time, max_poll_time
     ).tell_proxy()
     return timer, cloud_node_poller, arvados_node_poller, job_queue_poller