21285: Send all SSH and tunnel endpoints to tunnel queue.
[arvados.git] / lib / controller / rpc / conn.go
index 6195b79da13794cee9dcfd2143cf05e3321a4a5e..a8ecc57bbaa4512e0a0becc81e25f61f2b60316f 100644 (file)
@@ -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 {
@@ -194,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
@@ -203,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
 }