projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '14196-api-v2-tokens' refs #14196
[arvados.git]
/
sdk
/
go
/
keepclient
/
keepclient.go
diff --git
a/sdk/go/keepclient/keepclient.go
b/sdk/go/keepclient/keepclient.go
index 620bdbec4eaa64a7809bbbc539bf59d0c6ea2275..169f1457e2e06e6e3424856809c92fc5dc74d4f9 100644
(file)
--- a/
sdk/go/keepclient/keepclient.go
+++ b/
sdk/go/keepclient/keepclient.go
@@
-22,6
+22,7
@@
import (
"git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"git.curoverse.com/arvados.git/sdk/go/asyncbuf"
"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.
)
// A Keep "block" is 64MB.
@@
-99,6
+100,8
@@
type KeepClient struct {
HTTPClient HTTPClient
Retries int
BlockCache *BlockCache
HTTPClient HTTPClient
Retries int
BlockCache *BlockCache
+ RequestID string
+ StorageClasses []string
// set to 1 if all writable services are of disk type, otherwise 0
replicasPerService int
// set to 1 if all writable services are of disk type, otherwise 0
replicasPerService int
@@
-200,6
+203,8
@@
func (kc *KeepClient) getOrHead(method string, locator string) (io.ReadCloser, i
return ioutil.NopCloser(bytes.NewReader(nil)), 0, "", nil
}
return ioutil.NopCloser(bytes.NewReader(nil)), 0, "", nil
}
+ reqid := kc.getRequestID()
+
var expectLength int64
if parts := strings.SplitN(locator, "+", 3); len(parts) < 2 {
expectLength = -1
var expectLength int64
if parts := strings.SplitN(locator, "+", 3); len(parts) < 2 {
expectLength = -1
@@
-232,7
+237,8
@@
func (kc *KeepClient) getOrHead(method string, locator string) (io.ReadCloser, i
errs = append(errs, fmt.Sprintf("%s: %v", url, err))
continue
}
errs = append(errs, fmt.Sprintf("%s: %v", url, err))
continue
}
- req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", kc.Arvados.ApiToken))
+ req.Header.Add("Authorization", "OAuth2 "+kc.Arvados.ApiToken)
+ req.Header.Add("X-Request-Id", reqid)
resp, err := kc.httpClient().Do(req)
if err != nil {
// Probably a network error, may be transient,
resp, err := kc.httpClient().Do(req)
if err != nil {
// Probably a network error, may be transient,
@@
-350,7
+356,8
@@
func (kc *KeepClient) GetIndex(keepServiceUUID, prefix string) (io.Reader, error
return nil, err
}
return nil, err
}
- req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", kc.Arvados.ApiToken))
+ req.Header.Add("Authorization", "OAuth2 "+kc.Arvados.ApiToken)
+ req.Header.Set("X-Request-Id", kc.getRequestID())
resp, err := kc.httpClient().Do(req)
if err != nil {
return nil, err
resp, err := kc.httpClient().Do(req)
if err != nil {
return nil, err
@@
-539,6
+546,16
@@
func (kc *KeepClient) httpClient() HTTPClient {
return c
}
return c
}
+var reqIDGen = httpserver.IDGenerator{Prefix: "req-"}
+
+func (kc *KeepClient) getRequestID() string {
+ if kc.RequestID != "" {
+ return kc.RequestID
+ } else {
+ return reqIDGen.Next()
+ }
+}
+
type Locator struct {
Hash string
Size int // -1 if data size is not known
type Locator struct {
Hash string
Size int // -1 if data size is not known