20726: Fix unreleased session in s3 handler. 20726-s3-session-release
authorTom Clegg <tom@curii.com>
Thu, 20 Jul 2023 15:26:51 +0000 (11:26 -0400)
committerTom Clegg <tom@curii.com>
Thu, 20 Jul 2023 15:26:51 +0000 (11:26 -0400)
Caused subsequent requests with the same token to hang after reaching
expiry time.

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keep-web/s3.go
services/keep-web/s3_test.go

index 8615ceaf08602822bea4d67d054e609eae2409c8..3e60f3006db843ee108bb17effe9392e0142c0e5 100644 (file)
@@ -335,6 +335,7 @@ func (h *handler) serveS3(w http.ResponseWriter, r *http.Request) bool {
                s3ErrorResponse(w, InternalError, err.Error(), r.URL.Path, http.StatusInternalServerError)
                return true
        }
+       defer sess.Release()
        readfs := fs
        if writeMethod[r.Method] {
                // Create a FileSystem for this request, to avoid
index 9f8650b8ede8a831df79ada8588be10e979a966a..0e821696b76be45a82c6ce033b50d2b69d8c022c 100644 (file)
@@ -325,6 +325,11 @@ func (s *IntegrationSuite) TestS3ProjectPutObjectSuccess(c *check.C) {
        s.testS3PutObjectSuccess(c, stage.projbucket, stage.coll.Name+"/", stage.coll.UUID)
 }
 func (s *IntegrationSuite) testS3PutObjectSuccess(c *check.C, bucket *s3.Bucket, prefix string, collUUID string) {
+       // We insert a delay between test cases to ensure we exercise
+       // rollover of expired sessions.
+       sleep := time.Second / 100
+       s.handler.Cluster.Collections.WebDAVCache.TTL = arvados.Duration(sleep * 3)
+
        for _, trial := range []struct {
                path        string
                size        int
@@ -360,6 +365,7 @@ func (s *IntegrationSuite) testS3PutObjectSuccess(c *check.C, bucket *s3.Bucket,
                        contentType: "application/x-directory",
                },
        } {
+               time.Sleep(sleep)
                c.Logf("=== %v", trial)
 
                objname := prefix + trial.path