X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6bd5bd9b48ef7bb256242b3bd735da4048a984a5..8a27fe370239ecb8e50d53f46b45ed61203a35ca:/services/keepstore/proxy_remote.go diff --git a/services/keepstore/proxy_remote.go b/services/keepstore/proxy_remote.go index 1f82f3f4fc..526bc25299 100644 --- a/services/keepstore/proxy_remote.go +++ b/services/keepstore/proxy_remote.go @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -package main +package keepstore import ( "context" @@ -14,10 +14,10 @@ import ( "sync" "time" - "git.curoverse.com/arvados.git/sdk/go/arvados" - "git.curoverse.com/arvados.git/sdk/go/arvadosclient" - "git.curoverse.com/arvados.git/sdk/go/auth" - "git.curoverse.com/arvados.git/sdk/go/keepclient" + "git.arvados.org/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/arvadosclient" + "git.arvados.org/arvados.git/sdk/go/auth" + "git.arvados.org/arvados.git/sdk/go/keepclient" ) type remoteProxy struct { @@ -25,7 +25,7 @@ type remoteProxy struct { mtx sync.Mutex } -func (rp *remoteProxy) Get(ctx context.Context, w http.ResponseWriter, r *http.Request, cluster *arvados.Cluster) { +func (rp *remoteProxy) Get(ctx context.Context, w http.ResponseWriter, r *http.Request, cluster *arvados.Cluster, volmgr *RRVolumeManager) { // Intervening proxies must not return a cached GET response // to a prior request if a X-Keep-Signature request header has // been added or changed. @@ -49,6 +49,8 @@ func (rp *remoteProxy) Get(ctx context.Context, w http.ResponseWriter, r *http.R Buffer: buf[:0], ResponseWriter: w, Context: ctx, + Cluster: cluster, + VolumeManager: volmgr, } defer rrc.Close() w = rrc @@ -145,10 +147,12 @@ var localOrRemoteSignature = regexp.MustCompile(`\+[AR][^\+]*`) // local volume, adds a response header with a locally-signed locator, // and finally writes the data through. type remoteResponseCacher struct { - Locator string - Token string - Buffer []byte - Context context.Context + Locator string + Token string + Buffer []byte + Context context.Context + Cluster *arvados.Cluster + VolumeManager *RRVolumeManager http.ResponseWriter statusCode int } @@ -173,7 +177,7 @@ func (rrc *remoteResponseCacher) Close() error { rrc.ResponseWriter.Write(rrc.Buffer) return nil } - _, err := PutBlock(rrc.Context, rrc.Buffer, rrc.Locator[:32]) + _, err := PutBlock(rrc.Context, rrc.VolumeManager, rrc.Buffer, rrc.Locator[:32], nil) if rrc.Context.Err() != nil { // If caller hung up, log that instead of subsequent/misleading errors. http.Error(rrc.ResponseWriter, rrc.Context.Err().Error(), http.StatusGatewayTimeout) @@ -193,7 +197,8 @@ func (rrc *remoteResponseCacher) Close() error { } unsigned := localOrRemoteSignature.ReplaceAllLiteralString(rrc.Locator, "") - signed := SignLocator(unsigned, rrc.Token, time.Now().Add(theConfig.BlobSignatureTTL.Duration())) + expiry := time.Now().Add(rrc.Cluster.Collections.BlobSigningTTL.Duration()) + signed := SignLocator(rrc.Cluster, unsigned, rrc.Token, expiry) if signed == unsigned { err = errors.New("could not sign locator") http.Error(rrc.ResponseWriter, err.Error(), http.StatusInternalServerError)