Merge branch '18078-reacquire-fuse-lock' into main refs #18078
authorPeter Amstutz <peter.amstutz@curii.com>
Tue, 7 Sep 2021 15:47:30 +0000 (11:47 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Tue, 7 Sep 2021 15:47:30 +0000 (11:47 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

23 files changed:
doc/admin/upgrading.html.textile.liquid
doc/api/methods/users.html.textile.liquid
lib/controller/federation/conn.go
lib/controller/integration_test.go
lib/controller/router/router.go
lib/controller/rpc/conn.go
sdk/R/R/Arvados.R
sdk/R/man/Arvados.Rd
sdk/R/man/users.update_uuid.Rd [deleted file]
sdk/go/arvados/api.go
sdk/go/arvadosclient/arvadosclient.go
sdk/go/arvadosclient/arvadosclient_test.go
sdk/go/arvadostest/api.go
sdk/go/keepclient/keepclient.go
sdk/go/keepclient/keepclient_test.go
sdk/go/keepclient/support.go
services/api/app/controllers/arvados/v1/users_controller.rb
services/api/app/models/user.rb
services/api/config/routes.rb
services/api/test/functional/arvados/v1/users_controller_test.rb
services/api/test/unit/owner_test.rb
services/api/test/unit/user_test.rb
tools/compute-images/scripts/base.sh

index 9e7410260f8955ea35f1d6e4790e792feb1c670f..3c3211b61dc7c73f698547259474f9db4d6c497d 100644 (file)
@@ -35,10 +35,14 @@ TODO: extract this information based on git commit messages and generate changel
 <div class="releasenotes">
 </notextile>
 
-h2(#main). development main (as of 2021-07-15)
+h2(#main). development main (as of 2021-09-02)
 
 "Upgrading from 2.2.0":#v2_2_0
 
+h3. Removed unused @update_uuid@ endpoint for users.
+
+The @update_uuid@ endpoint was superseded by the "link accounts feature":{{site.baseurl}}/admin/link-accounts.html, so it's no longer available.
+
 h3. Removed deprecated '@@' search operator
 
 The '@@' full text search operator, previously deprecated, has been removed. To perform a string search across multiple columns, use the 'ilike' operator on 'any' column as described in the "available list method filter section":{{site.baseurl}}/api/methods.html#substringsearchfilter of the API documentation.
index a4d4aade9b581eaa6b2de3c7e30a5d7a5ac57eff..5861ddbf76d30a2ef89744095339ad40b504a11b 100644 (file)
@@ -112,19 +112,6 @@ table(table table-bordered table-condensed).
 {background:#ccffcc}.|uuid|string|The UUID of the User in question.|path||
 |user|object|The new attributes.|query||
 
-h3(#update_uuid). update_uuid
-
-Change the UUID of an existing user, updating all database references accordingly.
-
-This method can only be used by an admin user. It should only be used when the affected user is idle. New references to the affected user that are established _while the update_uuid operation is in progress_ might not be migrated as expected.
-
-Arguments:
-
-table(table table-bordered table-condensed).
-|_. Argument |_. Type |_. Description |_. Location |_. Example |
-{background:#ccffcc}.|uuid|string|The current UUID of the user in question.|path|@zzzzz-tpzed-12345abcde12345@|
-{background:#ccffcc}.|new_uuid|string|The desired new UUID. It is an error to use a UUID belonging to an existing user.|query|@zzzzz-tpzed-abcde12345abcde@|
-
 h3. setup
 
 Set up a user.  Adds the user to the "All users" group.  Enables the user to invoke @activate@.  See "user management":{{site.baseurl}}/admin/user-management.html for details.
index 77bc97aed962f7ff0c76c3a7e1e4fc3a1709c9ad..586ac23013a531dbcacdab9c705f307886abc158 100644 (file)
@@ -593,10 +593,6 @@ func (conn *Conn) UserUpdate(ctx context.Context, options arvados.UpdateOptions)
        return resp, err
 }
 
-func (conn *Conn) UserUpdateUUID(ctx context.Context, options arvados.UpdateUUIDOptions) (arvados.User, error) {
-       return conn.local.UserUpdateUUID(ctx, options)
-}
-
 func (conn *Conn) UserMerge(ctx context.Context, options arvados.UserMergeOptions) (arvados.User, error) {
        return conn.local.UserMerge(ctx, options)
 }
index 6851442054e1f49e8cde8c87dcced6d9eea0918a..8a23bccfb772ce385a40a8334b27df8bbbcbe56f 100644 (file)
@@ -150,6 +150,16 @@ func (s *IntegrationSuite) TearDownSuite(c *check.C) {
        }
 }
 
+func (s *IntegrationSuite) TestDefaultStorageClassesOnCollections(c *check.C) {
+       conn := s.testClusters["z1111"].Conn()
+       rootctx, _, _ := s.testClusters["z1111"].RootClients()
+       userctx, _, kc, _ := s.testClusters["z1111"].UserClients(rootctx, c, conn, s.oidcprovider.AuthEmail, true)
+       c.Assert(len(kc.DefaultStorageClasses) > 0, check.Equals, true)
+       coll, err := conn.CollectionCreate(userctx, arvados.CreateOptions{})
+       c.Assert(err, check.IsNil)
+       c.Assert(coll.StorageClassesDesired, check.DeepEquals, kc.DefaultStorageClasses)
+}
+
 func (s *IntegrationSuite) TestGetCollectionByPDH(c *check.C) {
        conn1 := s.testClusters["z1111"].Conn()
        rootctx1, _, _ := s.testClusters["z1111"].RootClients()
@@ -652,6 +662,111 @@ func (s *IntegrationSuite) TestIntermediateCluster(c *check.C) {
        }
 }
 
+// Test for bug #18076
+func (s *IntegrationSuite) TestStaleCachedUserRecord(c *check.C) {
+       rootctx1, _, _ := s.testClusters["z1111"].RootClients()
+       _, rootclnt3, _ := s.testClusters["z3333"].RootClients()
+       conn1 := s.testClusters["z1111"].Conn()
+       conn3 := s.testClusters["z3333"].Conn()
+
+       // Make sure LoginCluster is properly configured
+       for cls := range s.testClusters {
+               if cls == "z1111" || cls == "z3333" {
+                       c.Check(
+                               s.testClusters[cls].Config.Clusters[cls].Login.LoginCluster,
+                               check.Equals, "z1111",
+                               check.Commentf("incorrect LoginCluster config on cluster %q", cls))
+               }
+       }
+
+       for testCaseNr, testCase := range []struct {
+               name           string
+               withRepository bool
+       }{
+               {"User without local repository", false},
+               {"User with local repository", true},
+       } {
+               c.Log(c.TestName() + " " + testCase.name)
+               // Create some users, request them on the federated cluster so they're cached.
+               var users []arvados.User
+               for userNr := 0; userNr < 2; userNr++ {
+                       _, _, _, user := s.testClusters["z1111"].UserClients(
+                               rootctx1,
+                               c,
+                               conn1,
+                               fmt.Sprintf("user%d%d@example.com", testCaseNr, userNr),
+                               true)
+                       c.Assert(user.Username, check.Not(check.Equals), "")
+                       users = append(users, user)
+
+                       lst, err := conn3.UserList(rootctx1, arvados.ListOptions{Limit: -1})
+                       c.Assert(err, check.Equals, nil)
+                       userFound := false
+                       for _, fedUser := range lst.Items {
+                               if fedUser.UUID == user.UUID {
+                                       c.Assert(fedUser.Username, check.Equals, user.Username)
+                                       userFound = true
+                                       break
+                               }
+                       }
+                       c.Assert(userFound, check.Equals, true)
+
+                       if testCase.withRepository {
+                               var repo interface{}
+                               err = rootclnt3.RequestAndDecode(
+                                       &repo, "POST", "arvados/v1/repositories", nil,
+                                       map[string]interface{}{
+                                               "repository": map[string]string{
+                                                       "name":       fmt.Sprintf("%s/test", user.Username),
+                                                       "owner_uuid": user.UUID,
+                                               },
+                                       },
+                               )
+                               c.Assert(err, check.IsNil)
+                       }
+               }
+
+               // Swap the usernames
+               _, err := conn1.UserUpdate(rootctx1, arvados.UpdateOptions{
+                       UUID: users[0].UUID,
+                       Attrs: map[string]interface{}{
+                               "username": "",
+                       },
+               })
+               c.Assert(err, check.Equals, nil)
+               _, err = conn1.UserUpdate(rootctx1, arvados.UpdateOptions{
+                       UUID: users[1].UUID,
+                       Attrs: map[string]interface{}{
+                               "username": users[0].Username,
+                       },
+               })
+               c.Assert(err, check.Equals, nil)
+               _, err = conn1.UserUpdate(rootctx1, arvados.UpdateOptions{
+                       UUID: users[0].UUID,
+                       Attrs: map[string]interface{}{
+                               "username": users[1].Username,
+                       },
+               })
+               c.Assert(err, check.Equals, nil)
+
+               // Re-request the list on the federated cluster & check for updates
+               lst, err := conn3.UserList(rootctx1, arvados.ListOptions{Limit: -1})
+               c.Assert(err, check.Equals, nil)
+               var user0Found, user1Found bool
+               for _, user := range lst.Items {
+                       if user.UUID == users[0].UUID {
+                               user0Found = true
+                               c.Assert(user.Username, check.Equals, users[1].Username)
+                       } else if user.UUID == users[1].UUID {
+                               user1Found = true
+                               c.Assert(user.Username, check.Equals, users[0].Username)
+                       }
+               }
+               c.Assert(user0Found, check.Equals, true)
+               c.Assert(user1Found, check.Equals, true)
+       }
+}
+
 // Test for bug #16263
 func (s *IntegrationSuite) TestListUsers(c *check.C) {
        rootctx1, _, _ := s.testClusters["z1111"].RootClients()
@@ -676,6 +791,7 @@ func (s *IntegrationSuite) TestListUsers(c *check.C) {
        for _, user := range lst.Items {
                if user.Username == "" {
                        nullUsername = true
+                       break
                }
        }
        c.Assert(nullUsername, check.Equals, true)
index 5ceabbfb1d56fab171d8d4a8dfabca585f1362f6..9826c1e7448e548bc41c6f14dd092bacd2046742 100644 (file)
@@ -398,13 +398,6 @@ func (rtr *router) addRoutes() {
                                return rtr.backend.UserGet(ctx, *opts.(*arvados.GetOptions))
                        },
                },
-               {
-                       arvados.EndpointUserUpdateUUID,
-                       func() interface{} { return &arvados.UpdateUUIDOptions{} },
-                       func(ctx context.Context, opts interface{}) (interface{}, error) {
-                               return rtr.backend.UserUpdateUUID(ctx, *opts.(*arvados.UpdateUUIDOptions))
-                       },
-               },
                {
                        arvados.EndpointUserUpdate,
                        func() interface{} { return &arvados.UpdateOptions{} },
index 940f2184b240fb1827be6080a50700196d5ff3e2..640bbf1c23b837822485bc77b1326791f628c03d 100644 (file)
@@ -542,12 +542,6 @@ func (conn *Conn) UserUpdate(ctx context.Context, options arvados.UpdateOptions)
        err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
        return resp, err
 }
-func (conn *Conn) UserUpdateUUID(ctx context.Context, options arvados.UpdateUUIDOptions) (arvados.User, error) {
-       ep := arvados.EndpointUserUpdateUUID
-       var resp arvados.User
-       err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
-       return resp, err
-}
 func (conn *Conn) UserMerge(ctx context.Context, options arvados.UserMergeOptions) (arvados.User, error) {
        ep := arvados.EndpointUserMerge
        var resp arvados.User
index 528a60665043d90cba5c785c45fd20615538499c..52d6c95f5e688612a8745f9b265cd74bcf902871 100644 (file)
@@ -3,9 +3,9 @@
 # SPDX-License-Identifier: Apache-2.0
 
 #' 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.
@@ -13,9 +13,9 @@
 NULL
 
 #' api_clients.create
-#' 
+#'
 #' api_clients.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$api_clients.create(apiclient,
 #'     ensure_unique_name = "false", cluster_id = NULL)
 #' @param apiClient ApiClient object.
@@ -26,9 +26,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.
@@ -38,9 +38,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.
@@ -48,21 +48,21 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return ApiClientList object.
@@ -70,9 +70,9 @@ NULL
 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.
@@ -80,9 +80,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", cluster_id = NULL)
 #' @param apiClientAuthorization ApiClientAuthorization object.
@@ -93,9 +93,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.
@@ -105,9 +105,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.
@@ -115,42 +115,42 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return ApiClientAuthorizationList object.
@@ -158,9 +158,9 @@ NULL
 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.
@@ -168,9 +168,9 @@ NULL
 NULL
 
 #' authorized_keys.create
-#' 
+#'
 #' authorized_keys.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.create(authorizedkey,
 #'     ensure_unique_name = "false", cluster_id = NULL)
 #' @param authorizedKey AuthorizedKey object.
@@ -181,9 +181,9 @@ NULL
 NULL
 
 #' authorized_keys.update
-#' 
+#'
 #' authorized_keys.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.update(authorizedkey,
 #'     uuid)
 #' @param authorizedKey AuthorizedKey object.
@@ -193,9 +193,9 @@ NULL
 NULL
 
 #' authorized_keys.delete
-#' 
+#'
 #' authorized_keys.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.delete(uuid)
 #' @param uuid The UUID of the AuthorizedKey in question.
 #' @return AuthorizedKey object.
@@ -203,21 +203,21 @@ NULL
 NULL
 
 #' authorized_keys.list
-#' 
+#'
 #' authorized_keys.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$authorized_keys.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return AuthorizedKeyList object.
@@ -225,9 +225,9 @@ NULL
 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.
@@ -235,9 +235,9 @@ NULL
 NULL
 
 #' collections.create
-#' 
+#'
 #' collections.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.create(collection,
 #'     ensure_unique_name = "false", cluster_id = NULL)
 #' @param collection Collection object.
@@ -248,9 +248,9 @@ NULL
 NULL
 
 #' collections.update
-#' 
+#'
 #' collections.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$collections.update(collection,
 #'     uuid)
 #' @param collection Collection object.
@@ -260,9 +260,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.
@@ -270,62 +270,62 @@ 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", cluster_id = NULL, bypass_federation = NULL,
 #'     include_trash = NULL, include_old_versions = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @param include_trash Include collections whose is_trashed attribute is true.
@@ -335,9 +335,9 @@ NULL
 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.
@@ -345,9 +345,9 @@ NULL
 NULL
 
 #' containers.create
-#' 
+#'
 #' containers.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.create(container,
 #'     ensure_unique_name = "false", cluster_id = NULL)
 #' @param container Container object.
@@ -358,9 +358,9 @@ NULL
 NULL
 
 #' containers.update
-#' 
+#'
 #' containers.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$containers.update(container,
 #'     uuid)
 #' @param container Container object.
@@ -370,9 +370,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.
@@ -380,70 +380,70 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return ContainerList object.
@@ -451,9 +451,9 @@ NULL
 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.
@@ -461,9 +461,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", cluster_id = NULL)
 #' @param containerRequest ContainerRequest object.
@@ -474,9 +474,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.
@@ -486,9 +486,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.
@@ -496,22 +496,22 @@ 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", cluster_id = NULL, bypass_federation = NULL,
 #'     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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @param include_trash Include container requests whose owner project is trashed.
@@ -520,9 +520,9 @@ NULL
 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.
@@ -530,9 +530,9 @@ NULL
 NULL
 
 #' groups.create
-#' 
+#'
 #' groups.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.create(group, ensure_unique_name = "false",
 #'     cluster_id = NULL, async = "false")
 #' @param group Group object.
@@ -544,9 +544,9 @@ NULL
 NULL
 
 #' groups.update
-#' 
+#'
 #' groups.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.update(group, uuid,
 #'     async = "false")
 #' @param group Group object.
@@ -557,9 +557,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.
@@ -567,26 +567,26 @@ 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",
 #'     cluster_id = NULL, bypass_federation = NULL,
 #'     include_trash = NULL, uuid = NULL, recursive = NULL,
 #'     include = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @param include_trash Include items whose is_trashed attribute is true.
-#' @param uuid 
+#' @param uuid
 #' @param recursive Include contents from child groups recursively.
 #' @param include Include objects referred to by listed field in "included" (only owner_uuid)
 #' @return Group object.
@@ -594,67 +594,67 @@ NULL
 NULL
 
 #' groups.shared
-#' 
+#'
 #' groups.shared is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$groups.shared(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact", cluster_id = NULL, bypass_federation = NULL,
 #'     include_trash = NULL, include = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @param include_trash Include items whose is_trashed attribute is true.
-#' @param include 
+#' @param include
 #' @return Group object.
 #' @name groups.shared
 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", cluster_id = NULL, bypass_federation = NULL,
 #'     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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @param include_trash Include items whose is_trashed attribute is true.
@@ -663,9 +663,9 @@ NULL
 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.
@@ -673,9 +673,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", cluster_id = NULL)
 #' @param keepService KeepService object.
@@ -686,9 +686,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.
@@ -698,9 +698,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.
@@ -708,30 +708,30 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return KeepServiceList object.
@@ -739,9 +739,9 @@ NULL
 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.
@@ -749,9 +749,9 @@ NULL
 NULL
 
 #' links.create
-#' 
+#'
 #' links.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.create(link, ensure_unique_name = "false",
 #'     cluster_id = NULL)
 #' @param link Link object.
@@ -762,9 +762,9 @@ NULL
 NULL
 
 #' links.update
-#' 
+#'
 #' links.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.update(link, uuid)
 #' @param link Link object.
 #' @param uuid The UUID of the Link in question.
@@ -773,9 +773,9 @@ NULL
 NULL
 
 #' links.delete
-#' 
+#'
 #' links.delete is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.delete(uuid)
 #' @param uuid The UUID of the Link in question.
 #' @return Link object.
@@ -783,21 +783,21 @@ NULL
 NULL
 
 #' links.list
-#' 
+#'
 #' links.list is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.list(filters = NULL,
 #'     where = NULL, order = NULL, select = NULL,
 #'     distinct = NULL, limit = "100", offset = "0",
 #'     count = "exact", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return LinkList object.
@@ -805,19 +805,19 @@ NULL
 NULL
 
 #' links.get_permissions
-#' 
+#'
 #' links.get_permissions is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$links.get_permissions(uuid)
-#' @param uuid 
+#' @param uuid
 #' @return Link object.
 #' @name links.get_permissions
 NULL
 
 #' 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.
@@ -825,9 +825,9 @@ NULL
 NULL
 
 #' logs.create
-#' 
+#'
 #' logs.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$logs.create(log, ensure_unique_name = "false",
 #'     cluster_id = NULL)
 #' @param log Log object.
@@ -838,9 +838,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.
@@ -849,9 +849,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.
@@ -859,21 +859,21 @@ 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",
 #'     cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return LogList object.
@@ -881,9 +881,9 @@ NULL
 NULL
 
 #' 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.
@@ -891,9 +891,9 @@ NULL
 NULL
 
 #' users.create
-#' 
+#'
 #' users.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.create(user, ensure_unique_name = "false",
 #'     cluster_id = NULL)
 #' @param user User object.
@@ -904,21 +904,21 @@ NULL
 NULL
 
 #' users.update
-#' 
+#'
 #' users.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$users.update(user, uuid, bypass_federation = NULL)
 #' @param user User object.
 #' @param uuid The UUID of the User in question.
-#' @param bypass_federation 
+#' @param bypass_federation
 #' @return User object.
 #' @name users.update
 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.
@@ -926,101 +926,90 @@ 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(uuid = NULL, user = NULL,
 #'     repo_name = NULL, vm_uuid = NULL, send_notification_email = "false")
-#' @param uuid 
-#' @param user 
-#' @param repo_name 
-#' @param vm_uuid 
-#' @param send_notification_email 
+#' @param uuid
+#' @param user
+#' @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 
-#' @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 = NULL, redirect_to_new_user = NULL,
 #'     old_user_uuid = NULL, new_user_uuid = NULL)
-#' @param new_owner_uuid 
-#' @param new_user_token 
-#' @param redirect_to_new_user 
-#' @param old_user_uuid 
-#' @param new_user_uuid 
+#' @param new_owner_uuid
+#' @param new_user_token
+#' @param redirect_to_new_user
+#' @param old_user_uuid
+#' @param new_user_uuid
 #' @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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return UserList object.
@@ -1028,9 +1017,9 @@ NULL
 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.
@@ -1038,9 +1027,9 @@ NULL
 NULL
 
 #' repositories.create
-#' 
+#'
 #' repositories.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.create(repository,
 #'     ensure_unique_name = "false", cluster_id = NULL)
 #' @param repository Repository object.
@@ -1051,9 +1040,9 @@ NULL
 NULL
 
 #' repositories.update
-#' 
+#'
 #' repositories.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$repositories.update(repository,
 #'     uuid)
 #' @param repository Repository object.
@@ -1063,9 +1052,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.
@@ -1073,30 +1062,30 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return RepositoryList object.
@@ -1104,9 +1093,9 @@ NULL
 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.
@@ -1114,9 +1103,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", cluster_id = NULL)
 #' @param virtualMachine VirtualMachine object.
@@ -1127,9 +1116,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.
@@ -1139,9 +1128,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.
@@ -1149,40 +1138,40 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return VirtualMachineList object.
@@ -1190,9 +1179,9 @@ NULL
 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.
@@ -1200,9 +1189,9 @@ NULL
 NULL
 
 #' workflows.create
-#' 
+#'
 #' workflows.create is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.create(workflow,
 #'     ensure_unique_name = "false", cluster_id = NULL)
 #' @param workflow Workflow object.
@@ -1213,9 +1202,9 @@ NULL
 NULL
 
 #' workflows.update
-#' 
+#'
 #' workflows.update is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$workflows.update(workflow,
 #'     uuid)
 #' @param workflow Workflow object.
@@ -1225,9 +1214,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.
@@ -1235,21 +1224,21 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return WorkflowList object.
@@ -1257,9 +1246,9 @@ NULL
 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.
@@ -1267,9 +1256,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", cluster_id = NULL)
 #' @param userAgreement UserAgreement object.
@@ -1280,9 +1269,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.
@@ -1292,9 +1281,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.
@@ -1302,39 +1291,39 @@ 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", cluster_id = NULL, bypass_federation = 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 cluster_id List objects on a remote federated cluster instead of the current one.
 #' @param bypass_federation bypass federation behavior, list items from local instance database only
 #' @return UserAgreementList object.
@@ -1342,27 +1331,27 @@ NULL
 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
 
 #' configs.get
-#' 
+#'
 #' configs.get is a method defined in Arvados class.
-#' 
+#'
 #' @usage arv$configs.get(NULL)
 #' @return  object.
 #' @name configs.get
 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.
@@ -1370,9 +1359,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.
@@ -1381,9 +1370,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.
@@ -1392,9 +1381,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.
@@ -1402,22 +1391,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
@@ -1537,7 +1526,6 @@ NULL
 #'     \item{}{\code{\link{users.system}}}
 #'     \item{}{\code{\link{users.unsetup}}}
 #'     \item{}{\code{\link{users.update}}}
-#'     \item{}{\code{\link{users.update_uuid}}}
 #'     \item{}{\code{\link{virtual_machines.create}}}
 #'     \item{}{\code{\link{virtual_machines.delete}}}
 #'     \item{}{\code{\link{virtual_machines.get}}}
@@ -1640,19 +1628,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1661,24 +1649,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -1686,23 +1674,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1710,19 +1698,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1733,22 +1721,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_clients")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -1756,19 +1744,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1777,24 +1765,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -1802,23 +1790,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1826,19 +1814,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1846,20 +1834,20 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/create_system_auth")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1867,19 +1855,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations/current")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1890,22 +1878,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("api_client_authorizations")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -1913,19 +1901,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -1934,24 +1922,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        if(length(authorizedkey) > 0)
-                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), 
+                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -1959,23 +1947,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(authorizedkey) > 0)
-                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), 
+                               body <- jsonlite::toJSON(list(authorizedkey = authorizedkey),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -1983,19 +1971,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2006,22 +1994,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("authorized_keys")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -2029,19 +2017,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2050,24 +2038,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -2075,23 +2063,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2099,19 +2087,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2119,19 +2107,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/provenance")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2139,19 +2127,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/used_by")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2159,19 +2147,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/trash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2179,19 +2167,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections/${uuid}/untrash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2203,23 +2191,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("collections")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation,
                                                          include_trash = include_trash, include_old_versions = include_old_versions)
-                       
+
                        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
                },
 
@@ -2227,19 +2215,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2248,24 +2236,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -2273,23 +2261,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2297,19 +2285,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2317,19 +2305,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/auth")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2337,19 +2325,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/lock")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2357,19 +2345,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/unlock")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2377,19 +2365,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/${uuid}/secret_mounts")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2397,19 +2385,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers/current")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2420,22 +2408,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("containers")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -2443,19 +2431,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2464,24 +2452,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        if(length(containerrequest) > 0)
-                               body <- jsonlite::toJSON(list(containerrequest = containerrequest), 
+                               body <- jsonlite::toJSON(list(containerrequest = containerrequest),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2489,23 +2477,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(containerrequest) > 0)
-                               body <- jsonlite::toJSON(list(containerrequest = containerrequest), 
+                               body <- jsonlite::toJSON(list(containerrequest = containerrequest),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2513,19 +2501,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2537,23 +2525,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("container_requests")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation,
                                                          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
                },
 
@@ -2561,19 +2549,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2582,24 +2570,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id, async = async)
-                       
+
                        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
                },
 
@@ -2607,23 +2595,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(async = async)
-                       
+
                        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
                },
 
@@ -2631,19 +2619,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2656,23 +2644,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/contents")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, distinct = distinct, limit = limit,
                                                          offset = offset, count = count, cluster_id = cluster_id,
                                                          bypass_federation = bypass_federation, include_trash = include_trash,
                                                          uuid = uuid, recursive = recursive, include = include)
-                       
+
                        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
                },
 
@@ -2684,23 +2672,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/shared")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation,
                                                          include_trash = include_trash, include = include)
-                       
+
                        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
                },
 
@@ -2708,19 +2696,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}/trash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2728,19 +2716,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups/${uuid}/untrash")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2752,23 +2740,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("groups")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation,
                                                          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
                },
 
@@ -2776,19 +2764,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2797,24 +2785,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        if(length(keepservice) > 0)
-                               body <- jsonlite::toJSON(list(keepservice = keepservice), 
+                               body <- jsonlite::toJSON(list(keepservice = keepservice),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2822,23 +2810,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(keepservice) > 0)
-                               body <- jsonlite::toJSON(list(keepservice = keepservice), 
+                               body <- jsonlite::toJSON(list(keepservice = keepservice),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2846,19 +2834,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2866,19 +2854,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services/accessible")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2889,22 +2877,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("keep_services")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -2912,19 +2900,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -2933,24 +2921,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        if(length(link) > 0)
-                               body <- jsonlite::toJSON(list(link = link), 
+                               body <- jsonlite::toJSON(list(link = link),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("POST", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2958,23 +2946,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- NULL
-                       
+
                        if(length(link) > 0)
-                               body <- jsonlite::toJSON(list(link = link), 
+                               body <- jsonlite::toJSON(list(link = link),
                                                         auto_unbox = TRUE)
                        else
                                body <- NULL
-                       
+
                        response <- private$REST$http$exec("PUT", url, headers, body,
                                                           queryArgs, private$numRetries)
                        resource <- private$REST$httpParser$parseJSONResponse(response)
-                       
+
                        if(!is.null(resource$errors))
                                stop(resource$errors)
-                       
+
                        resource
                },
 
@@ -2982,19 +2970,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3005,22 +2993,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("links")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3028,19 +3016,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("permissions/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3048,19 +3036,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3069,24 +3057,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -3094,23 +3082,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3118,19 +3106,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3141,22 +3129,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("logs")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3164,19 +3152,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3185,24 +3173,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -3210,23 +3198,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3234,19 +3222,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3254,19 +3242,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/current")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3274,19 +3262,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/system")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3294,19 +3282,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}/activate")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3315,21 +3303,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/setup")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(uuid = uuid, user = user,
                                                          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
                },
 
@@ -3337,39 +3325,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/${uuid}/unsetup")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
-               },
 
-               users.update_uuid = function(uuid, new_uuid)
-               {
-                       endPoint <- stringr::str_interp("users/${uuid}/update_uuid")
-                       url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3379,21 +3347,21 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users/merge")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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,
                                                          old_user_uuid = old_user_uuid, new_user_uuid = new_user_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
                },
 
@@ -3404,22 +3372,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("users")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3427,19 +3395,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3448,24 +3416,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -3473,23 +3441,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3497,19 +3465,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3517,19 +3485,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories/get_all_permissions")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3540,22 +3508,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("repositories")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3563,19 +3531,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3584,24 +3552,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -3609,23 +3577,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3633,19 +3601,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3653,19 +3621,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/${uuid}/logins")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3673,19 +3641,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines/get_all_logins")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3696,22 +3664,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("virtual_machines")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3719,19 +3687,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3740,24 +3708,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -3765,23 +3733,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3789,19 +3757,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3812,22 +3780,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("workflows")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3835,19 +3803,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3856,24 +3824,24 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(ensure_unique_name = ensure_unique_name,
                                                          cluster_id = cluster_id)
-                       
+
                        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
                },
 
@@ -3881,23 +3849,23 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3905,19 +3873,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/${uuid}")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3925,19 +3893,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/signatures")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3945,19 +3913,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/sign")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -3968,22 +3936,22 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", private$token),
                                        "Content-Type" = "application/json")
                        queryArgs <- list(filters = filters, where = where,
                                                          order = order, select = select, distinct = distinct,
                                                          limit = limit, offset = offset, count = count,
                                                          cluster_id = cluster_id, bypass_federation = bypass_federation)
-                       
+
                        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
                },
 
@@ -3991,19 +3959,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("user_agreements/new")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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
                },
 
@@ -4011,19 +3979,19 @@ Arvados <- R6::R6Class(
                {
                        endPoint <- stringr::str_interp("config")
                        url <- paste0(private$host, endPoint)
-                       headers <- list(Authorization = paste("Bearer", private$token), 
+                       headers <- list(Authorization = paste("Bearer", 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 51f98d81dcd4de28b9e5faca303ee87a5da7a58d..b55dd00dc56ec461a817db64cb81f547f6a51dd6 100644 (file)
@@ -171,7 +171,6 @@ Arvados class gives users ability to access Arvados REST API.
        \item{}{\code{\link{users.system}}}
        \item{}{\code{\link{users.unsetup}}}
        \item{}{\code{\link{users.update}}}
-       \item{}{\code{\link{users.update_uuid}}}
        \item{}{\code{\link{virtual_machines.create}}}
        \item{}{\code{\link{virtual_machines.delete}}}
        \item{}{\code{\link{virtual_machines.get}}}
diff --git a/sdk/R/man/users.update_uuid.Rd b/sdk/R/man/users.update_uuid.Rd
deleted file mode 100644 (file)
index af62c2c..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/Arvados.R
-\name{users.update_uuid}
-\alias{users.update_uuid}
-\title{users.update_uuid}
-\usage{
-arv$users.update_uuid(uuid, new_uuid)
-}
-\arguments{
-\item{uuid}{}
-
-\item{new_uuid}{}
-}
-\value{
-User object.
-}
-\description{
-users.update_uuid is a method defined in Arvados class.
-}
index 736ace75e72ea68ff2038b911dc3d48965000dd3..b429e800841eb7e4935c63ebb56560ec93f556eb 100644 (file)
@@ -75,7 +75,6 @@ var (
        EndpointUserSystem                    = APIEndpoint{"GET", "arvados/v1/users/system", ""}
        EndpointUserUnsetup                   = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
        EndpointUserUpdate                    = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
-       EndpointUserUpdateUUID                = APIEndpoint{"POST", "arvados/v1/users/{uuid}/update_uuid", ""}
        EndpointUserBatchUpdate               = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
        EndpointUserAuthenticate              = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
        EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
@@ -154,11 +153,6 @@ type GroupContentsOptions struct {
        ExcludeHomeProject bool     `json:"exclude_home_project"`
 }
 
-type UpdateUUIDOptions struct {
-       UUID    string `json:"uuid"`
-       NewUUID string `json:"new_uuid"`
-}
-
 type UserActivateOptions struct {
        UUID string `json:"uuid"`
 }
@@ -265,7 +259,6 @@ type API interface {
        SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error)
        UserCreate(ctx context.Context, options CreateOptions) (User, error)
        UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
-       UserUpdateUUID(ctx context.Context, options UpdateUUIDOptions) (User, error)
        UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
        UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
        UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
index f8e768c5700159dd84b503857eb73f262d8726c6..8f902d3a09574d2f52ef388978c51f391b4b9d58 100644 (file)
@@ -426,6 +426,24 @@ func (c *ArvadosClient) Discovery(parameter string) (value interface{}, err erro
        return value, ErrInvalidArgument
 }
 
+// ClusterConfig returns the value of the given key in the current cluster's
+// exported config. If key is an empty string, it'll return the entire config.
+func (c *ArvadosClient) ClusterConfig(key string) (config interface{}, err error) {
+       var clusterConfig interface{}
+       err = c.Call("GET", "config", "", "", nil, &clusterConfig)
+       if err != nil {
+               return nil, err
+       }
+       if key == "" {
+               return clusterConfig, nil
+       }
+       configData, ok := clusterConfig.(map[string]interface{})[key]
+       if !ok {
+               return nil, ErrInvalidArgument
+       }
+       return configData, nil
+}
+
 func (c *ArvadosClient) httpClient() *http.Client {
        if c.Client != nil {
                return c.Client
index 9d6e4fe7e8f7e702287db4865c348715c104a4ff..27e23c1aea4e3d1b4fab84811dc8dddd70b6cde4 100644 (file)
@@ -158,6 +158,36 @@ func (s *ServerRequiredSuite) TestAPIDiscovery_Get_noSuchParameter(c *C) {
        c.Assert(value, IsNil)
 }
 
+func (s *ServerRequiredSuite) TestAPIClusterConfig_Get_StorageClasses(c *C) {
+       arv, err := MakeArvadosClient()
+       c.Assert(err, IsNil)
+       data, err := arv.ClusterConfig("StorageClasses")
+       c.Assert(err, IsNil)
+       c.Assert(data, NotNil)
+       clusterConfig := data.(map[string]interface{})
+       _, ok := clusterConfig["default"]
+       c.Assert(ok, Equals, true)
+}
+
+func (s *ServerRequiredSuite) TestAPIClusterConfig_Get_All(c *C) {
+       arv, err := MakeArvadosClient()
+       c.Assert(err, IsNil)
+       data, err := arv.ClusterConfig("")
+       c.Assert(err, IsNil)
+       c.Assert(data, NotNil)
+       clusterConfig := data.(map[string]interface{})
+       _, ok := clusterConfig["StorageClasses"]
+       c.Assert(ok, Equals, true)
+}
+
+func (s *ServerRequiredSuite) TestAPIClusterConfig_Get_noSuchSection(c *C) {
+       arv, err := MakeArvadosClient()
+       c.Assert(err, IsNil)
+       data, err := arv.ClusterConfig("noSuchSection")
+       c.Assert(err, NotNil)
+       c.Assert(data, IsNil)
+}
+
 func (s *ServerRequiredSuite) TestCreateLarge(c *C) {
        arv, err := MakeArvadosClient()
        c.Assert(err, IsNil)
index f255aeb2d085a9dbb4bc2fd2494daccf3f9d2605..8bf01693c444100cb1b866b796e03c5c7699f5ed 100644 (file)
@@ -193,10 +193,6 @@ func (as *APIStub) UserUpdate(ctx context.Context, options arvados.UpdateOptions
        as.appendCall(ctx, as.UserUpdate, options)
        return arvados.User{}, as.Error
 }
-func (as *APIStub) UserUpdateUUID(ctx context.Context, options arvados.UpdateUUIDOptions) (arvados.User, error) {
-       as.appendCall(ctx, as.UserUpdateUUID, options)
-       return arvados.User{}, as.Error
-}
 func (as *APIStub) UserActivate(ctx context.Context, options arvados.UserActivateOptions) (arvados.User, error) {
        as.appendCall(ctx, as.UserActivate, options)
        return arvados.User{}, as.Error
index 3bc6f4afcddf7cea0e5b77b140ac1b7c6b3a7a62..68ac886ddd8ede2809a56a577baedfd67604e7d1 100644 (file)
@@ -97,17 +97,18 @@ type HTTPClient interface {
 
 // KeepClient holds information about Arvados and Keep servers.
 type KeepClient struct {
-       Arvados            *arvadosclient.ArvadosClient
-       Want_replicas      int
-       localRoots         map[string]string
-       writableLocalRoots map[string]string
-       gatewayRoots       map[string]string
-       lock               sync.RWMutex
-       HTTPClient         HTTPClient
-       Retries            int
-       BlockCache         *BlockCache
-       RequestID          string
-       StorageClasses     []string
+       Arvados               *arvadosclient.ArvadosClient
+       Want_replicas         int
+       localRoots            map[string]string
+       writableLocalRoots    map[string]string
+       gatewayRoots          map[string]string
+       lock                  sync.RWMutex
+       HTTPClient            HTTPClient
+       Retries               int
+       BlockCache            *BlockCache
+       RequestID             string
+       StorageClasses        []string
+       DefaultStorageClasses []string // Set by cluster's exported config
 
        // set to 1 if all writable services are of disk type, otherwise 0
        replicasPerService int
@@ -119,7 +120,23 @@ type KeepClient struct {
        disableDiscovery bool
 }
 
-// MakeKeepClient creates a new KeepClient, calls
+func (kc *KeepClient) loadDefaultClasses() error {
+       scData, err := kc.Arvados.ClusterConfig("StorageClasses")
+       if err != nil {
+               return err
+       }
+       classes := scData.(map[string]interface{})
+       for scName := range classes {
+               scConf, _ := classes[scName].(map[string]interface{})
+               isDefault, ok := scConf["Default"].(bool)
+               if ok && isDefault {
+                       kc.DefaultStorageClasses = append(kc.DefaultStorageClasses, scName)
+               }
+       }
+       return nil
+}
+
+// MakeKeepClient creates a new KeepClient, loads default storage classes, calls
 // DiscoverKeepServices(), and returns when the client is ready to
 // use.
 func MakeKeepClient(arv *arvadosclient.ArvadosClient) (*KeepClient, error) {
@@ -138,11 +155,16 @@ func New(arv *arvadosclient.ArvadosClient) *KeepClient {
                        defaultReplicationLevel = int(v)
                }
        }
-       return &KeepClient{
+       kc := &KeepClient{
                Arvados:       arv,
                Want_replicas: defaultReplicationLevel,
                Retries:       2,
        }
+       err = kc.loadDefaultClasses()
+       if err != nil {
+               DebugPrintf("DEBUG: Unable to load the default storage classes cluster config")
+       }
+       return kc
 }
 
 // PutHR puts a block given the block hash, a reader, and the number of bytes
index cddf03bc37de5ba4661674e62029585dee1e61b6..a6e0a11d510b6f5c79a510a1db22633cc775a134 100644 (file)
@@ -24,7 +24,6 @@ import (
        "git.arvados.org/arvados.git/sdk/go/arvadosclient"
        "git.arvados.org/arvados.git/sdk/go/arvadostest"
        . "gopkg.in/check.v1"
-       check "gopkg.in/check.v1"
 )
 
 // Gocheck boilerplate
@@ -76,9 +75,22 @@ func (s *ServerRequiredSuite) TestMakeKeepClient(c *C) {
        }
 }
 
+func (s *ServerRequiredSuite) TestDefaultStorageClasses(c *C) {
+       arv, err := arvadosclient.MakeArvadosClient()
+       c.Assert(err, IsNil)
+
+       cc, err := arv.ClusterConfig("StorageClasses")
+       c.Assert(err, IsNil)
+       c.Assert(cc, NotNil)
+       c.Assert(cc.(map[string]interface{})["default"], NotNil)
+
+       kc := New(arv)
+       c.Assert(kc.DefaultStorageClasses, DeepEquals, []string{"default"})
+}
+
 func (s *ServerRequiredSuite) TestDefaultReplications(c *C) {
        arv, err := arvadosclient.MakeArvadosClient()
-       c.Assert(err, Equals, nil)
+       c.Assert(err, IsNil)
 
        kc, err := MakeKeepClient(arv)
        c.Check(err, IsNil)
@@ -133,7 +145,7 @@ func RunFakeKeepServer(st http.Handler) (ks KeepServer) {
        // bind to 0.0.0.0 or [::] which is not a valid address for Dial()
        ks.listener, err = net.ListenTCP("tcp", &net.TCPAddr{IP: []byte{127, 0, 0, 1}, Port: 0})
        if err != nil {
-               panic(fmt.Sprintf("Could not listen on any port"))
+               panic("Could not listen on any port")
        }
        ks.url = fmt.Sprintf("http://%s", ks.listener.Addr().String())
        go http.Serve(ks.listener, st)
@@ -240,28 +252,107 @@ func (s *StandaloneSuite) TestUploadWithStorageClasses(c *C) {
        }
 }
 
-func (s *StandaloneSuite) TestPutWithStorageClasses(c *C) {
+func (s *StandaloneSuite) TestPutWithoutStorageClassesClusterSupport(c *C) {
        nServers := 5
        for _, trial := range []struct {
                replicas      int
                clientClasses []string
-               putClasses    []string // putClasses takes precedence over clientClasses
+               putClasses    []string
                minRequests   int
                maxRequests   int
                success       bool
        }{
+               // Talking to an older cluster (no default storage classes exported
+               // config) and no other additional storage classes requirements.
+               {1, nil, nil, 1, 1, true},
+               {2, nil, nil, 2, 2, true},
+               {3, nil, nil, 3, 3, true},
+               {nServers*2 + 1, nil, nil, nServers, nServers, false},
+
                {1, []string{"class1"}, nil, 1, 1, true},
-               {2, []string{"class1"}, nil, 1, 2, true},
-               {3, []string{"class1"}, nil, 2, 3, true},
+               {2, []string{"class1"}, nil, 2, 2, true},
+               {3, []string{"class1"}, nil, 3, 3, true},
                {1, []string{"class1", "class2"}, nil, 1, 1, true},
-               {3, nil, []string{"class1"}, 2, 3, true},
-               {1, nil, []string{"class1", "class2"}, 1, 1, true},
-               {1, []string{"class404"}, []string{"class1", "class2"}, 1, 1, true},
-               {1, []string{"class1"}, []string{"class404", "class2"}, nServers, nServers, false},
                {nServers*2 + 1, []string{"class1"}, nil, nServers, nServers, false},
-               {1, []string{"class404"}, nil, nServers, nServers, false},
-               {1, []string{"class1", "class404"}, nil, nServers, nServers, false},
-               {1, nil, []string{"class1", "class404"}, nServers, nServers, false},
+
+               {1, nil, []string{"class1"}, 1, 1, true},
+               {2, nil, []string{"class1"}, 2, 2, true},
+               {3, nil, []string{"class1"}, 3, 3, true},
+               {1, nil, []string{"class1", "class2"}, 1, 1, true},
+               {nServers*2 + 1, nil, []string{"class1"}, nServers, nServers, false},
+       } {
+               c.Logf("%+v", trial)
+               st := &StubPutHandler{
+                       c:                    c,
+                       expectPath:           "acbd18db4cc2f85cedef654fccc4a4d8",
+                       expectAPIToken:       "abc123",
+                       expectBody:           "foo",
+                       expectStorageClass:   "*",
+                       returnStorageClasses: "", // Simulate old cluster without SC keep support
+                       handled:              make(chan string, 100),
+               }
+               ks := RunSomeFakeKeepServers(st, nServers)
+               arv, _ := arvadosclient.MakeArvadosClient()
+               kc, _ := MakeKeepClient(arv)
+               kc.Want_replicas = trial.replicas
+               kc.StorageClasses = trial.clientClasses
+               kc.DefaultStorageClasses = nil // Simulate an old cluster without SC defaults
+               arv.ApiToken = "abc123"
+               localRoots := make(map[string]string)
+               writableLocalRoots := make(map[string]string)
+               for i, k := range ks {
+                       localRoots[fmt.Sprintf("zzzzz-bi6l4-fakefakefake%03d", i)] = k.url
+                       writableLocalRoots[fmt.Sprintf("zzzzz-bi6l4-fakefakefake%03d", i)] = k.url
+                       defer k.listener.Close()
+               }
+               kc.SetServiceRoots(localRoots, writableLocalRoots, nil)
+
+               _, err := kc.BlockWrite(context.Background(), arvados.BlockWriteOptions{
+                       Data:           []byte("foo"),
+                       StorageClasses: trial.putClasses,
+               })
+               if trial.success {
+                       c.Check(err, IsNil)
+               } else {
+                       c.Check(err, NotNil)
+               }
+               c.Check(len(st.handled) >= trial.minRequests, Equals, true, Commentf("len(st.handled)==%d, trial.minRequests==%d", len(st.handled), trial.minRequests))
+               c.Check(len(st.handled) <= trial.maxRequests, Equals, true, Commentf("len(st.handled)==%d, trial.maxRequests==%d", len(st.handled), trial.maxRequests))
+               if trial.clientClasses == nil && trial.putClasses == nil {
+                       c.Check(st.requests[0].Header.Get("X-Keep-Storage-Classes"), Equals, "")
+               }
+       }
+}
+
+func (s *StandaloneSuite) TestPutWithStorageClasses(c *C) {
+       nServers := 5
+       for _, trial := range []struct {
+               replicas       int
+               defaultClasses []string
+               clientClasses  []string // clientClasses takes precedence over defaultClasses
+               putClasses     []string // putClasses takes precedence over clientClasses
+               minRequests    int
+               maxRequests    int
+               success        bool
+       }{
+               {1, []string{"class1"}, nil, nil, 1, 1, true},
+               {2, []string{"class1"}, nil, nil, 1, 2, true},
+               {3, []string{"class1"}, nil, nil, 2, 3, true},
+               {1, []string{"class1", "class2"}, nil, nil, 1, 1, true},
+
+               // defaultClasses doesn't matter when any of the others is specified.
+               {1, []string{"class1"}, []string{"class1"}, nil, 1, 1, true},
+               {2, []string{"class1"}, []string{"class1"}, nil, 1, 2, true},
+               {3, []string{"class1"}, []string{"class1"}, nil, 2, 3, true},
+               {1, []string{"class1"}, []string{"class1", "class2"}, nil, 1, 1, true},
+               {3, []string{"class1"}, nil, []string{"class1"}, 2, 3, true},
+               {1, []string{"class1"}, nil, []string{"class1", "class2"}, 1, 1, true},
+               {1, []string{"class1"}, []string{"class404"}, []string{"class1", "class2"}, 1, 1, true},
+               {1, []string{"class1"}, []string{"class1"}, []string{"class404", "class2"}, nServers, nServers, false},
+               {nServers*2 + 1, []string{}, []string{"class1"}, nil, nServers, nServers, false},
+               {1, []string{"class1"}, []string{"class404"}, nil, nServers, nServers, false},
+               {1, []string{"class1"}, []string{"class1", "class404"}, nil, nServers, nServers, false},
+               {1, []string{"class1"}, nil, []string{"class1", "class404"}, nServers, nServers, false},
        } {
                c.Logf("%+v", trial)
                st := &StubPutHandler{
@@ -278,6 +369,7 @@ func (s *StandaloneSuite) TestPutWithStorageClasses(c *C) {
                kc, _ := MakeKeepClient(arv)
                kc.Want_replicas = trial.replicas
                kc.StorageClasses = trial.clientClasses
+               kc.DefaultStorageClasses = trial.defaultClasses
                arv.ApiToken = "abc123"
                localRoots := make(map[string]string)
                writableLocalRoots := make(map[string]string)
@@ -293,17 +385,17 @@ func (s *StandaloneSuite) TestPutWithStorageClasses(c *C) {
                        StorageClasses: trial.putClasses,
                })
                if trial.success {
-                       c.Check(err, check.IsNil)
+                       c.Check(err, IsNil)
                } else {
-                       c.Check(err, check.NotNil)
+                       c.Check(err, NotNil)
                }
-               c.Check(len(st.handled) >= trial.minRequests, check.Equals, true, check.Commentf("len(st.handled)==%d, trial.minRequests==%d", len(st.handled), trial.minRequests))
-               c.Check(len(st.handled) <= trial.maxRequests, check.Equals, true, check.Commentf("len(st.handled)==%d, trial.maxRequests==%d", len(st.handled), trial.maxRequests))
-               if !trial.success && trial.replicas == 1 && c.Check(len(st.requests) >= 2, check.Equals, true) {
+               c.Check(len(st.handled) >= trial.minRequests, Equals, true, Commentf("len(st.handled)==%d, trial.minRequests==%d", len(st.handled), trial.minRequests))
+               c.Check(len(st.handled) <= trial.maxRequests, Equals, true, Commentf("len(st.handled)==%d, trial.maxRequests==%d", len(st.handled), trial.maxRequests))
+               if !trial.success && trial.replicas == 1 && c.Check(len(st.requests) >= 2, Equals, true) {
                        // Max concurrency should be 1. First request
                        // should have succeeded for class1. Second
                        // request should only ask for class404.
-                       c.Check(st.requests[1].Header.Get("X-Keep-Storage-Classes"), check.Equals, "class404")
+                       c.Check(st.requests[1].Header.Get("X-Keep-Storage-Classes"), Equals, "class404")
                }
        }
 }
@@ -390,7 +482,7 @@ func (s *StandaloneSuite) TestPutB(c *C) {
                expectPath:           hash,
                expectAPIToken:       "abc123",
                expectBody:           "foo",
-               expectStorageClass:   "",
+               expectStorageClass:   "default",
                returnStorageClasses: "",
                handled:              make(chan string, 5),
        }
@@ -434,7 +526,7 @@ func (s *StandaloneSuite) TestPutHR(c *C) {
                expectPath:           hash,
                expectAPIToken:       "abc123",
                expectBody:           "foo",
-               expectStorageClass:   "",
+               expectStorageClass:   "default",
                returnStorageClasses: "",
                handled:              make(chan string, 5),
        }
@@ -485,7 +577,7 @@ func (s *StandaloneSuite) TestPutWithFail(c *C) {
                expectPath:           hash,
                expectAPIToken:       "abc123",
                expectBody:           "foo",
-               expectStorageClass:   "",
+               expectStorageClass:   "default",
                returnStorageClasses: "",
                handled:              make(chan string, 4),
        }
@@ -547,7 +639,7 @@ func (s *StandaloneSuite) TestPutWithTooManyFail(c *C) {
                expectPath:           hash,
                expectAPIToken:       "abc123",
                expectBody:           "foo",
-               expectStorageClass:   "",
+               expectStorageClass:   "default",
                returnStorageClasses: "",
                handled:              make(chan string, 1),
        }
@@ -1157,7 +1249,7 @@ func (s *StandaloneSuite) TestPutBWant2ReplicasWithOnlyOneWritableLocalRoot(c *C
                expectPath:           hash,
                expectAPIToken:       "abc123",
                expectBody:           "foo",
-               expectStorageClass:   "",
+               expectStorageClass:   "default",
                returnStorageClasses: "",
                handled:              make(chan string, 5),
        }
@@ -1376,7 +1468,7 @@ func (s *StandaloneSuite) TestPutBRetry(c *C) {
                        expectPath:           Md5String("foo"),
                        expectAPIToken:       "abc123",
                        expectBody:           "foo",
-                       expectStorageClass:   "",
+                       expectStorageClass:   "default",
                        returnStorageClasses: "",
                        handled:              make(chan string, 5),
                },
index 633ec1896858bd484d6740b8e9dea074c12d82c9..8d299815b2dbd1d0bd52d60b9f5936904811a0b9 100644 (file)
@@ -164,7 +164,11 @@ func (kc *KeepClient) BlockWrite(ctx context.Context, req arvados.BlockWriteOpti
                req.Hash = fmt.Sprintf("%x", m.Sum(nil))
        }
        if req.StorageClasses == nil {
-               req.StorageClasses = kc.StorageClasses
+               if len(kc.StorageClasses) > 0 {
+                       req.StorageClasses = kc.StorageClasses
+               } else {
+                       req.StorageClasses = kc.DefaultStorageClasses
+               }
        }
        if req.Replicas == 0 {
                req.Replicas = kc.Want_replicas
index f4d42edf6c1891e69e644d4a0d0c86cd952a0aa1..54db521768592742dd9c4406ff987f0d7c7ee496 100644 (file)
@@ -10,7 +10,7 @@ class Arvados::V1::UsersController < ApplicationController
     [:activate, :current, :system, :setup, :merge, :batch_update]
   skip_before_action :render_404_if_no_object, only:
     [:activate, :current, :system, :setup, :merge, :batch_update]
-  before_action :admin_required, only: [:setup, :unsetup, :update_uuid, :batch_update]
+  before_action :admin_required, only: [:setup, :unsetup, :batch_update]
 
   # Internal API used by controller to update local cache of user
   # records from LoginCluster.
@@ -29,7 +29,23 @@ class Arvados::V1::UsersController < ApplicationController
         end
       end
       if needupdate.length > 0
-        u.update_attributes!(needupdate)
+        begin
+          u.update_attributes!(needupdate)
+        rescue ActiveRecord::RecordInvalid
+          loginCluster = Rails.configuration.Login.LoginCluster
+          if u.uuid[0..4] == loginCluster && !needupdate[:username].nil?
+            local_user = User.find_by_username(needupdate[:username])
+            # A cached user record from the LoginCluster is stale, reset its username
+            # and retry the update operation.
+            if local_user.andand.uuid[0..4] == loginCluster && local_user.uuid != u.uuid
+              new_username = "#{needupdate[:username]}conflict#{rand(99999999)}"
+              Rails.logger.warn("cached username '#{needupdate[:username]}' collision with user '#{local_user.uuid}' - renaming to '#{new_username}' before retrying")
+              local_user.update_attributes!({username: new_username})
+              retry
+            end
+          end
+          raise # Not the issue we're handling above
+        end
       end
       @objects << u
     end
@@ -145,13 +161,6 @@ class Arvados::V1::UsersController < ApplicationController
     show
   end
 
-  # Change UUID to a new (unused) uuid and transfer all owned/linked
-  # objects accordingly.
-  def update_uuid
-    @object.update_uuid(new_uuid: params[:new_uuid])
-    show
-  end
-
   def merge
     if (params[:old_user_uuid] || params[:new_user_uuid])
       if !current_user.andand.is_admin
@@ -261,14 +270,6 @@ class Arvados::V1::UsersController < ApplicationController
     })
   end
 
-  def self._update_uuid_requires_parameters
-    {
-      new_uuid: {
-        type: 'string', required: true,
-      },
-    }
-  end
-
   def apply_filters(model_class=nil)
     return super if @read_users.any?(&:is_admin)
     if params[:uuid] != current_user.andand.uuid
index da7e7b310d5716abfe225625831398e477594474..2e862d3ae6ba047584f7650af29fa4a44d1af107 100644 (file)
@@ -362,37 +362,6 @@ SELECT target_uuid, perm_level
     end
   end
 
-  def update_uuid(new_uuid:)
-    if !current_user.andand.is_admin
-      raise PermissionDeniedError
-    end
-    if uuid == system_user_uuid || uuid == anonymous_user_uuid
-      raise "update_uuid cannot update system accounts"
-    end
-    if self.class != self.class.resource_class_for_uuid(new_uuid)
-      raise "invalid new_uuid #{new_uuid.inspect}"
-    end
-    transaction(requires_new: true) do
-      reload
-      old_uuid = self.uuid
-      self.uuid = new_uuid
-      save!(validate: false)
-      change_all_uuid_refs(old_uuid: old_uuid, new_uuid: new_uuid)
-    ActiveRecord::Base.connection.exec_update %{
-update #{PERMISSION_VIEW} set user_uuid=$1 where user_uuid = $2
-},
-                                             'User.update_uuid.update_permissions_user_uuid',
-                                             [[nil, new_uuid],
-                                              [nil, old_uuid]]
-      ActiveRecord::Base.connection.exec_update %{
-update #{PERMISSION_VIEW} set target_uuid=$1 where target_uuid = $2
-},
-                                            'User.update_uuid.update_permissions_target_uuid',
-                                             [[nil, new_uuid],
-                                              [nil, old_uuid]]
-    end
-  end
-
   # Move this user's (i.e., self's) owned items to new_owner_uuid and
   # new_user_uuid (for things normally owned directly by the user).
   #
index 69758580356ba771ac05a70e022735fe092962d5..738426b1d8b06e007f2c62dbf0d91ba6311c8672 100644 (file)
@@ -81,7 +81,6 @@ Rails.application.routes.draw do
         post 'activate', on: :member
         post 'setup', on: :collection
         post 'unsetup', on: :member
-        post 'update_uuid', on: :member
         post 'merge', on: :collection
         patch 'batch_update', on: :collection
       end
index e0f7b8970dfd34f2a161a75336ef4a3bc964acd1..c807a7d6cb5ec6f3f4d92ceb18fb519629a3d1fb 100644 (file)
@@ -800,27 +800,6 @@ The Arvados team.
                     "user's writable_by should include its owner_uuid")
   end
 
-  [
-    [:admin, true],
-    [:active, false],
-  ].each do |auth_user, expect_success|
-    test "update_uuid as #{auth_user}" do
-      authorize_with auth_user
-      orig_uuid = users(:active).uuid
-      post :update_uuid, params: {
-             id: orig_uuid,
-             new_uuid: 'zbbbb-tpzed-abcde12345abcde',
-           }
-      if expect_success
-        assert_response :success
-        assert_empty User.where(uuid: orig_uuid)
-      else
-        assert_response 403
-        assert_not_empty User.where(uuid: orig_uuid)
-      end
-    end
-  end
-
   test "merge with redirect_to_user_uuid=false" do
     authorize_with :project_viewer_trustedclient
     tok = api_client_authorizations(:project_viewer).api_token
index e356f4d9fa19806e9fc48f3f41f16bb90e200608..aa0ac5f361154b55e90e46932b0839793bbd62f8 100644 (file)
@@ -92,12 +92,8 @@ class OwnerTest < ActiveSupport::TestCase
              "new #{o_class} should really be in DB")
       old_uuid = o.uuid
       new_uuid = o.uuid.sub(/..........$/, rand(2**256).to_s(36)[0..9])
-      if o.respond_to? :update_uuid
-        o.update_uuid(new_uuid: new_uuid)
-      else
-        assert(o.update_attributes(uuid: new_uuid),
-               "should change #{o_class} uuid from #{old_uuid} to #{new_uuid}")
-      end
+      assert(o.update_attributes(uuid: new_uuid),
+              "should change #{o_class} uuid from #{old_uuid} to #{new_uuid}")
       assert_equal(false, o_class.where(uuid: old_uuid).any?,
                    "#{old_uuid} should disappear when renamed to #{new_uuid}")
     end
@@ -142,21 +138,4 @@ class OwnerTest < ActiveSupport::TestCase
     check_permissions_against_full_refresh
   end
 
-  test "change uuid of User that owns self" do
-    o = User.create!
-    assert User.where(uuid: o.uuid).any?, "new User should really be in DB"
-    assert_equal(true, o.update_attributes(owner_uuid: o.uuid),
-                 "setting owner to self should work")
-    old_uuid = o.uuid
-    new_uuid = o.uuid.sub(/..........$/, rand(2**256).to_s(36)[0..9])
-    o.update_uuid(new_uuid: new_uuid)
-    o = User.find_by_uuid(new_uuid)
-    assert_equal(false, User.where(uuid: old_uuid).any?,
-                 "#{old_uuid} should not be in DB after deleting")
-    assert_equal(true, User.where(uuid: new_uuid).any?,
-                 "#{new_uuid} should be in DB after renaming")
-    assert_equal(new_uuid, User.where(uuid: new_uuid).first.owner_uuid,
-                 "#{new_uuid} should be its own owner in DB after renaming")
-  end
-
 end
index f973c6ba1fa39337125716b76c6bd7cb928b2a18..c00164c0a36235254248ece8fef06fed3f59e4be 100644 (file)
@@ -686,72 +686,6 @@ class UserTest < ActiveSupport::TestCase
     end
   end
 
-  [
-    [:active, 'zzzzz-borkd-abcde12345abcde'],
-    [:active, 'zzzzz-j7d0g-abcde12345abcde'],
-    [:active, 'zzzzz-tpzed-borkd'],
-    [:system_user, 'zzzzz-tpzed-abcde12345abcde'],
-    [:anonymous, 'zzzzz-tpzed-abcde12345abcde'],
-  ].each do |fixture, new_uuid|
-    test "disallow update_uuid #{fixture} -> #{new_uuid}" do
-      u = users(fixture)
-      orig_uuid = u.uuid
-      act_as_system_user do
-        assert_raises do
-          u.update_uuid(new_uuid: new_uuid)
-        end
-      end
-      # "Successfully aborted orig->new" outcome looks the same as
-      # "successfully updated new->orig".
-      assert_update_success(old_uuid: new_uuid,
-                            new_uuid: orig_uuid,
-                            expect_owned_objects: fixture == :active)
-    end
-  end
-
-  [:active, :spectator, :admin].each do |target|
-    test "update_uuid on #{target} as non-admin user" do
-      act_as_user users(:active) do
-        assert_raises(ArvadosModel::PermissionDeniedError) do
-          users(target).update_uuid(new_uuid: 'zzzzz-tpzed-abcde12345abcde')
-        end
-      end
-    end
-  end
-
-  test "update_uuid to existing uuid" do
-    u = users(:active)
-    orig_uuid = u.uuid
-    new_uuid = users(:admin).uuid
-    act_as_system_user do
-      assert_raises do
-        u.update_uuid(new_uuid: new_uuid)
-      end
-    end
-    u.reload
-    assert_equal u.uuid, orig_uuid
-    assert_not_empty Collection.where(owner_uuid: orig_uuid)
-    assert_not_empty Group.where(owner_uuid: orig_uuid)
-  end
-
-  [
-    [:active, 'zbbbb-tpzed-abcde12345abcde'],
-    [:active, 'zzzzz-tpzed-abcde12345abcde'],
-    [:admin, 'zbbbb-tpzed-abcde12345abcde'],
-    [:admin, 'zzzzz-tpzed-abcde12345abcde'],
-  ].each do |fixture, new_uuid|
-    test "update_uuid #{fixture} to unused uuid #{new_uuid}" do
-      u = users(fixture)
-      orig_uuid = u.uuid
-      act_as_system_user do
-        u.update_uuid(new_uuid: new_uuid)
-      end
-      assert_update_success(old_uuid: orig_uuid,
-                            new_uuid: new_uuid,
-                            expect_owned_objects: fixture == :active)
-    end
-  end
-
   def assert_update_success(old_uuid:, new_uuid:, expect_owned_objects: true)
     [[User, :uuid],
      [Link, :head_uuid],
index af01cde38e0c1659f5032dc39e67a5968bb018fb..b7d0d0f363b3003c06f08569e30887b8cb722ca6 100644 (file)
@@ -58,7 +58,8 @@ wait_for_apt_locks && $SUDO DEBIAN_FRONTEND=noninteractive apt-get -qq --yes ins
   libcurl4-openssl-dev \
   lvm2 \
   cryptsetup \
-  xfsprogs
+  xfsprogs \
+  squashfs-tools
 
 # Install the Arvados packages we need
 wait_for_apt_locks && $SUDO DEBIAN_FRONTEND=noninteractive apt-get -qq --yes install \
@@ -67,6 +68,30 @@ wait_for_apt_locks && $SUDO DEBIAN_FRONTEND=noninteractive apt-get -qq --yes ins
   arvados-docker-cleaner \
   docker.io
 
+# Get Go and build singularity
+goversion=1.16.3
+mkdir -p /var/lib/arvados
+rm -rf /var/lib/arvados/go/
+curl -s https://storage.googleapis.com/golang/go${goversion}.linux-amd64.tar.gz | tar -C /var/lib/arvados -xzf -
+ln -sf /var/lib/arvados/go/bin/* /usr/local/bin/
+
+singularityversion=3.7.4
+curl -Ls https://github.com/sylabs/singularity/archive/refs/tags/v${singularityversion}.tar.gz | tar -C /var/lib/arvados -xzf -
+cd /var/lib/arvados/singularity-${singularityversion}
+
+# build dependencies for singularity
+wait_for_apt_locks && $SUDO DEBIAN_FRONTEND=noninteractive apt-get -qq --yes install \
+  make build-essential libssl-dev uuid-dev cryptsetup
+
+echo $singularityversion > VERSION
+./mconfig --prefix=/var/lib/arvados
+make -C ./builddir
+make -C ./builddir install
+ln -sf /var/lib/arvados/bin/* /usr/local/bin/
+
+# Print singularity version installed
+singularity --version
+
 # Remove unattended-upgrades if it is installed
 wait_for_apt_locks && $SUDO DEBIAN_FRONTEND=noninteractive apt-get -qq --yes remove unattended-upgrades --purge