15922: Preserve etag in responses.
authorTom Clegg <tom@tomclegg.ca>
Tue, 10 Dec 2019 15:31:38 +0000 (10:31 -0500)
committerTom Clegg <tom@tomclegg.ca>
Thu, 12 Dec 2019 14:59:58 +0000 (09:59 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@tomclegg.ca>

lib/controller/router/response.go
lib/controller/router/router_test.go
sdk/go/arvados/container.go
sdk/go/arvados/user.go

index 7f6e06844fe0a9d6ccb350aa260279be5d172bb3..543e25d0ce44f73c6cd87cc221aaace564f41a2c 100644 (file)
@@ -46,7 +46,7 @@ func applySelectParam(selectParam []string, orig map[string]interface{}) map[str
                }
        }
        // Some keys are always preserved, even if not requested
-       for _, k := range []string{"kind", "writable_by"} {
+       for _, k := range []string{"etag", "kind", "writable_by"} {
                if v, ok := orig[k]; ok {
                        selected[k] = v
                }
index a17bd3bd8b8f43daf6cf52dc61d3cf00ca132f2a..5700f01e2ff8c158e7f997623ccd0d40b417d777 100644 (file)
@@ -321,6 +321,8 @@ func (s *RouterIntegrationSuite) TestSelectParam(c *check.C) {
                c.Check(rr.Code, check.Equals, http.StatusOK)
 
                c.Check(resp["kind"], check.Equals, "arvados#container")
+               c.Check(resp["etag"], check.FitsTypeOf, "")
+               c.Check(resp["etag"], check.Not(check.Equals), "")
                c.Check(resp["uuid"], check.HasLen, 27)
                c.Check(resp["command"], check.HasLen, 2)
                c.Check(resp["mounts"], check.IsNil)
index 1d3b0962f7da1ff93d386f067195b977ef02de10..653312d86cbe52cc31ab36e025ef4c6e0d53af41 100644 (file)
@@ -9,6 +9,7 @@ import "time"
 // Container is an arvados#container resource.
 type Container struct {
        UUID                 string                 `json:"uuid"`
+       Etag                 string                 `json:"etag"`
        CreatedAt            time.Time              `json:"created_at"`
        ModifiedByClientUUID string                 `json:"modified_by_client_uuid"`
        ModifiedByUserUUID   string                 `json:"modified_by_user_uuid"`
index 950b2ff4e2799c2e44f33d85e74155d7bc26aa3c..68960144a8a3dae092c604bfa4a256efcc8a669b 100644 (file)
@@ -9,6 +9,7 @@ import "time"
 // User is an arvados#user record
 type User struct {
        UUID                 string                 `json:"uuid"`
+       Etag                 string                 `json:"etag"`
        IsActive             bool                   `json:"is_active"`
        IsAdmin              bool                   `json:"is_admin"`
        Username             string                 `json:"username"`