X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b2fe9103a8f42d393fdbb838106fa4d28ea9a25f..8090581c645f62fec8337b3a2b9f72448fc24431:/lib/controller/rpc/conn.go diff --git a/lib/controller/rpc/conn.go b/lib/controller/rpc/conn.go index beedf3b993..a8ecc57bba 100644 --- a/lib/controller/rpc/conn.go +++ b/lib/controller/rpc/conn.go @@ -20,6 +20,7 @@ import ( "net/url" "strconv" "strings" + "sync" "time" "git.arvados.org/arvados.git/sdk/go/arvados" @@ -44,11 +45,13 @@ type Conn struct { SendHeader http.Header RedactHostInErrors bool - clusterID string - httpClient http.Client - baseURL url.URL - tokenProvider TokenProvider - discoveryDocument *arvados.DiscoveryDocument + clusterID string + httpClient http.Client + baseURL url.URL + tokenProvider TokenProvider + discoveryDocument *arvados.DiscoveryDocument + discoveryDocumentMtx sync.Mutex + discoveryDocumentExpires time.Time } func NewConn(clusterID string, url *url.URL, insecure bool, tp TokenProvider) *Conn { @@ -147,10 +150,13 @@ func (conn *Conn) requestAndDecode(ctx context.Context, dst interface{}, ep arva } if len(tokens) > 1 { + if params == nil { + params = make(map[string]interface{}) + } params["reader_tokens"] = tokens[1:] } path := ep.Path - if strings.Contains(ep.Path, "/{uuid}") { + if strings.Contains(ep.Path, "/{uuid}") && params != nil { uuid, _ := params["uuid"].(string) path = strings.Replace(path, "/{uuid}", "/"+uuid, 1) delete(params, "uuid") @@ -191,7 +197,9 @@ func (conn *Conn) VocabularyGet(ctx context.Context) (arvados.Vocabulary, error) } func (conn *Conn) DiscoveryDocument(ctx context.Context) (arvados.DiscoveryDocument, error) { - if conn.discoveryDocument != nil { + conn.discoveryDocumentMtx.Lock() + defer conn.discoveryDocumentMtx.Unlock() + if conn.discoveryDocument != nil && time.Now().Before(conn.discoveryDocumentExpires) { return *conn.discoveryDocument, nil } var dd arvados.DiscoveryDocument @@ -200,6 +208,7 @@ func (conn *Conn) DiscoveryDocument(ctx context.Context) (arvados.DiscoveryDocum return dd, err } conn.discoveryDocument = &dd + conn.discoveryDocumentExpires = time.Now().Add(time.Hour) return *conn.discoveryDocument, nil }