19428: Avoid locking entire filesystem for MemorySize.
[arvados.git] / sdk / go / arvados / fs_users.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package arvados
6
7 import (
8         "os"
9 )
10
11 func (fs *customFileSystem) usersLoadOne(parent inode, name string) (inode, error) {
12         var resp UserList
13         err := fs.RequestAndDecode(&resp, "GET", "arvados/v1/users", nil, ResourceListParams{
14                 Count:   "none",
15                 Filters: []Filter{{"username", "=", name}},
16         })
17         if err != nil {
18                 return nil, err
19         } else if len(resp.Items) == 0 {
20                 return nil, os.ErrNotExist
21         }
22         user := resp.Items[0]
23         return fs.newProjectNode(parent, user.Username, user.UUID, nil), nil
24 }
25
26 func (fs *customFileSystem) usersLoadAll(parent inode) ([]inode, error) {
27         params := ResourceListParams{
28                 Count: "none",
29                 Order: "uuid",
30         }
31         var inodes []inode
32         for {
33                 var resp UserList
34                 err := fs.RequestAndDecode(&resp, "GET", "arvados/v1/users", nil, params)
35                 if err != nil {
36                         return nil, err
37                 } else if len(resp.Items) == 0 {
38                         return inodes, nil
39                 }
40                 for _, user := range resp.Items {
41                         if user.Username == "" {
42                                 continue
43                         }
44                         inodes = append(inodes, fs.newProjectNode(parent, user.Username, user.UUID, nil))
45                 }
46                 params.Filters = []Filter{{"uuid", ">", resp.Items[len(resp.Items)-1].UUID}}
47         }
48 }