"git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"git.curoverse.com/arvados.git/sdk/go/asyncbuf"
+ "git.curoverse.com/arvados.git/sdk/go/httpserver"
)
// A Keep "block" is 64MB.
HTTPClient HTTPClient
Retries int
BlockCache *BlockCache
+ RequestID string
// set to 1 if all writable services are of disk type, otherwise 0
replicasPerService int
errs = append(errs, fmt.Sprintf("%s: %v", url, err))
continue
}
- req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", kc.Arvados.ApiToken))
+ kc.setRequestHeaders(req)
resp, err := kc.httpClient().Do(req)
if err != nil {
// Probably a network error, may be transient,
return nil, err
}
- req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", kc.Arvados.ApiToken))
+ kc.setRequestHeaders(req)
resp, err := kc.httpClient().Do(req)
if err != nil {
return nil, err
return c
}
+var reqIDGen = httpserver.IDGenerator{Prefix: "req-"}
+
+func (kc *KeepClient) setRequestHeaders(req *http.Request) {
+ req.Header.Add("Authorization", "OAuth2 "+kc.Arvados.ApiToken)
+ if kc.RequestID != "" {
+ req.Header.Set("X-Request-Id", kc.RequestID)
+ } else {
+ req.Header.Set("X-Request-Id", reqIDGen.Next())
+ }
+}
+
type Locator struct {
Hash string
Size int // -1 if data size is not known
// to be empty, so don't set req.Body.
}
- req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", this.Arvados.ApiToken))
+ this.setRequestHeaders(req)
req.Header.Add("Content-Type", "application/octet-stream")
req.Header.Add(X_Keep_Desired_Replicas, fmt.Sprint(this.Want_replicas))
statusCode, statusText = http.StatusInternalServerError, err.Error()
return
}
+ kc.RequestID = r.Header.Get("X-Request-Id")
var basename string
if len(targetPath) > 0 {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
+ kc.RequestID = r.Header.Get("X-Request-Id")
client := (&arvados.Client{
APIHost: arv.ApiServer,
AuthToken: arv.ApiToken,
func (pc *proxyClient) Do(req *http.Request) (*http.Response, error) {
req.Header.Add("Via", pc.proto+" "+viaAlias)
- req.Header.Add("X-Request-Id", pc.requestID)
+ req.Header.Set("X-Request-Id", pc.requestID)
return pc.client.Do(req)
}