X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6fab045dba4714e9c748337ef974ef257df37353..6c0bf267d795a3ca49c3258c9490714c9e18d333:/sdk/go/keepclient/discover.go diff --git a/sdk/go/keepclient/discover.go b/sdk/go/keepclient/discover.go index 650c2b5f61..2892031817 100644 --- a/sdk/go/keepclient/discover.go +++ b/sdk/go/keepclient/discover.go @@ -12,16 +12,32 @@ import ( "time" ) -// DiscoverKeepServers gets list of available keep services from api server +// DiscoverKeepServers gets list of available keep services from the +// API server. +// +// If a list of services is provided in the arvadosclient (e.g., from +// an environment variable or local config), that list is used +// instead. func (this *KeepClient) DiscoverKeepServers() error { - var list svcList + if this.Arvados.KeepServiceURIs != nil { + this.foundNonDiskSvc = true + this.replicasPerService = 0 + this.setClientSettingsNonDisk() + roots := make(map[string]string) + for i, uri := range this.Arvados.KeepServiceURIs { + roots[fmt.Sprintf("00000-bi6l4-%015d", i)] = uri + } + this.SetServiceRoots(roots, roots, roots) + return nil + } - // Get keep services from api server + // ArvadosClient did not provide a services list. Ask API + // server for a list of accessible services. + var list svcList err := this.Arvados.Call("GET", "keep_services", "", "accessible", nil, &list) if err != nil { return err } - return this.loadKeepServers(list) } @@ -57,14 +73,14 @@ func (kc *KeepClient) RefreshServices(interval, errInterval time.Duration) { timer.Reset(interval) if err := kc.DiscoverKeepServers(); err != nil { - log.Println("Error retrieving services list: %v (retrying in %v)", err, errInterval) + log.Printf("WARNING: Error retrieving services list: %v (retrying in %v)", err, errInterval) timer.Reset(errInterval) continue } newRoots := []map[string]string{kc.LocalRoots(), kc.GatewayRoots()} if !reflect.DeepEqual(previousRoots, newRoots) { - log.Printf("Updated services list: locals %v gateways %v", newRoots[0], newRoots[1]) + DebugPrintf("DEBUG: Updated services list: locals %v gateways %v", newRoots[0], newRoots[1]) previousRoots = newRoots } @@ -84,7 +100,6 @@ func (this *KeepClient) loadKeepServers(list svcList) error { // replicasPerService is 1 for disks; unknown or unlimited otherwise this.replicasPerService = 1 - this.Using_proxy = false for _, service := range list.Items { scheme := "http" @@ -100,10 +115,6 @@ func (this *KeepClient) loadKeepServers(list svcList) error { listed[url] = true localRoots[service.Uuid] = url - if service.SvcType == "proxy" { - this.Using_proxy = true - } - if service.ReadOnly == false { writableLocalRoots[service.Uuid] = url if service.SvcType != "disk" { @@ -111,6 +122,10 @@ func (this *KeepClient) loadKeepServers(list svcList) error { } } + if service.SvcType != "disk" { + this.foundNonDiskSvc = true + } + // Gateway services are only used when specified by // UUID, so there's nothing to gain by filtering them // by service type. Including all accessible services @@ -119,8 +134,8 @@ func (this *KeepClient) loadKeepServers(list svcList) error { gatewayRoots[service.Uuid] = url } - if this.Using_proxy { - this.setClientSettingsProxy() + if this.foundNonDiskSvc { + this.setClientSettingsNonDisk() } else { this.setClientSettingsDisk() }