[ARVADOS] created: 1.3.0-3180-ga3eefdae6

Git user git at public.arvados.org
Fri Sep 18 17:45:50 UTC 2020


        at  a3eefdae693e4195ca4f46b7873f3055f4a0d377 (commit)


commit a3eefdae693e4195ca4f46b7873f3055f4a0d377
Author: Tom Clegg <tom at tomclegg.ca>
Date:   Fri Sep 18 13:45:09 2020 -0400

    16850: Add KeyCount field to S3 ListObjects response.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at tomclegg.ca>

diff --git a/services/keep-web/s3.go b/services/keep-web/s3.go
index 52cfede46..7cd1b1a89 100644
--- a/services/keep-web/s3.go
+++ b/services/keep-web/s3.go
@@ -363,6 +363,8 @@ func (h *handler) s3list(w http.ResponseWriter, r *http.Request, fs arvados.Cust
 		// github.com/aws/aws-sdk-net never terminates its
 		// paging loop).
 		NextMarker string `xml:"NextMarker,omitempty"`
+		// ListObjectsV2 has a KeyCount response field.
+		KeyCount int
 	}
 	resp := listResp{
 		ListResp: s3.ListResp{
@@ -459,6 +461,7 @@ func (h *handler) s3list(w http.ResponseWriter, r *http.Request, fs arvados.Cust
 		}
 		sort.Slice(resp.CommonPrefixes, func(i, j int) bool { return resp.CommonPrefixes[i].Prefix < resp.CommonPrefixes[j].Prefix })
 	}
+	resp.KeyCount = len(resp.Contents)
 	w.Header().Set("Content-Type", "application/xml")
 	io.WriteString(w, xml.Header)
 	if err := xml.NewEncoder(w).Encode(resp); err != nil {
diff --git a/services/keep-web/s3_test.go b/services/keep-web/s3_test.go
index 66f046b13..33e978c3b 100644
--- a/services/keep-web/s3_test.go
+++ b/services/keep-web/s3_test.go
@@ -432,6 +432,22 @@ func (s *IntegrationSuite) TestS3ListNoNextMarker(c *check.C) {
 	}
 }
 
+// List response should include KeyCount field.
+func (s *IntegrationSuite) TestS3ListKeyCount(c *check.C) {
+	stage := s.s3setup(c)
+	defer stage.teardown(c)
+
+	req, err := http.NewRequest("GET", stage.collbucket.URL("/"), nil)
+	c.Assert(err, check.IsNil)
+	req.Header.Set("Authorization", "AWS "+arvadostest.ActiveTokenV2+":none")
+	req.URL.RawQuery = "prefix=&delimiter=/"
+	resp, err := http.DefaultClient.Do(req)
+	c.Assert(err, check.IsNil)
+	buf, err := ioutil.ReadAll(resp.Body)
+	c.Assert(err, check.IsNil)
+	c.Check(string(buf), check.Matches, `(?ms).*<KeyCount>2</KeyCount>.*`)
+}
+
 func (s *IntegrationSuite) TestS3CollectionList(c *check.C) {
 	stage := s.s3setup(c)
 	defer stage.teardown(c)

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list