1 /* Deals with getting Keep Server blocks from API Server and Keep Servers. */
6 //"git.curoverse.com/arvados.git/sdk/go/keepclient"
7 "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
8 "git.curoverse.com/arvados.git/sdk/go/util"
12 type ServerAddress struct {
13 Host string `json:"service_host"`
14 Port int `json:"service_port"`
17 type ServerContents struct {
18 BlockDigestToSize map[string]int
21 type ReadServers struct {
23 AddressToContents map[ServerAddress]ServerContents
26 type GetKeepServersParams struct {
27 Client arvadosclient.ArvadosClient
31 type KeepServiceList struct {
32 ItemsAvailable int `json:"items_available"`
33 Items []ServerAddress `json:"items"`
36 // Methods to implement util.SdkListResponse Interface
37 func (k KeepServiceList) NumItemsAvailable() (numAvailable int, err error) {
38 return k.ItemsAvailable, nil
41 func (k KeepServiceList) NumItemsContained() (numContained int, err error) {
42 return len(k.Items), nil
46 // TODO(misha): Send Keep requests in parallel
47 func GetKeepServers(params GetKeepServersParams) (results ReadServers) {
48 if ¶ms.Client == nil {
49 log.Fatalf("params.Client passed to GetKeepServers() should " +
50 "contain a valid ArvadosClient, but instead it is nil.")
53 sdkParams := arvadosclient.Dict{}
55 sdkParams["limit"] = params.Limit
58 var sdkResponse KeepServiceList
59 err := params.Client.List("keep_services", sdkParams, &sdkResponse)
61 log.Fatalf("Error requesting keep disks from API server: %v", err)
64 log.Printf("Received keep services list: %v", sdkResponse)
67 var numReceived, numAvailable int
68 results.ReadAllServers, numReceived, numAvailable =
69 util.ContainsAllAvailableItems(sdkResponse)
71 if (!results.ReadAllServers) {
72 log.Printf("ERROR: Did not receive all keep server addresses.")
74 log.Printf("Received %d of %d available keep server addresses.",