X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d3229c7f727f40436cad66fba5f3345e0b3eede5..659a8c75c837ec30e2f9fb6f1a1859b625626c3e:/sdk/go/keepclient/keepclient.go diff --git a/sdk/go/keepclient/keepclient.go b/sdk/go/keepclient/keepclient.go index 326c2a06ae..5d791948dc 100644 --- a/sdk/go/keepclient/keepclient.go +++ b/sdk/go/keepclient/keepclient.go @@ -2,19 +2,22 @@ package keepclient import ( - "git.curoverse.com/arvados.git/sdk/go/streamer" - "git.curoverse.com/arvados.git/sdk/go/arvadosclient" "crypto/md5" + "crypto/tls" "errors" "fmt" + "git.curoverse.com/arvados.git/sdk/go/arvadosclient" + "git.curoverse.com/arvados.git/sdk/go/streamer" "io" "io/ioutil" "log" "net/http" + "os" "regexp" "strings" "sync" "sync/atomic" + "time" "unsafe" ) @@ -43,13 +46,16 @@ type KeepClient struct { // Create a new KeepClient. This will contact the API server to discover Keep // servers. func MakeKeepClient(arv *arvadosclient.ArvadosClient) (kc KeepClient, err error) { + var matchTrue = regexp.MustCompile("^(?i:1|yes|true)$") + insecure := matchTrue.MatchString(os.Getenv("ARVADOS_API_HOST_INSECURE")) kc = KeepClient{ Arvados: arv, Want_replicas: 2, Using_proxy: false, - Client: &http.Client{Transport: &http.Transport{}}} - - err = (&kc).DiscoverKeepServers() + Client: &http.Client{Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure}}}, + } + _, err = (&kc).DiscoverKeepServers() return kc, err } @@ -131,6 +137,10 @@ func (this KeepClient) AuthorizedGet(hash string, timestamp string) (reader io.ReadCloser, contentLength int64, url string, err error) { + // Take the hash of locator and timestamp in order to identify this + // specific transaction in log statements. + requestId := fmt.Sprintf("%x", md5.Sum([]byte(hash+time.Now().String())))[0:8] + // Calculate the ordering for asking servers sv := NewRootSorter(this.ServiceRoots(), hash).GetSortedRoots() @@ -150,12 +160,26 @@ func (this KeepClient) AuthorizedGet(hash string, req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", this.Arvados.ApiToken)) + log.Printf("[%v] Begin download %s", requestId, url) + var resp *http.Response - if resp, err = this.Client.Do(req); err != nil { + if resp, err = this.Client.Do(req); err != nil || resp.StatusCode != http.StatusOK { + statusCode := -1 + var respbody []byte + if resp != nil { + statusCode = resp.StatusCode + if resp.Body != nil { + respbody, _ = ioutil.ReadAll(&io.LimitedReader{resp.Body, 4096}) + } + } + response := strings.TrimSpace(string(respbody)) + log.Printf("[%v] Download %v status code: %v error: \"%v\" response: \"%v\"", + requestId, url, statusCode, err, response) continue } if resp.StatusCode == http.StatusOK { + log.Printf("[%v] Download %v status code: %v", requestId, url, resp.StatusCode) return HashCheckingReader{resp.Body, md5.New(), hash}, resp.ContentLength, url, nil } }