From 13c1784231f2337de875cf3d786c0628991d53b2 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Fri, 4 Mar 2022 12:03:42 +0100 Subject: [PATCH] add etag to spaces response --- changelog/unreleased/spaces-etags.md | 5 +++++ pkg/storage/utils/decomposedfs/spaces.go | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 changelog/unreleased/spaces-etags.md diff --git a/changelog/unreleased/spaces-etags.md b/changelog/unreleased/spaces-etags.md new file mode 100644 index 0000000000..bb15b4b50e --- /dev/null +++ b/changelog/unreleased/spaces-etags.md @@ -0,0 +1,5 @@ +Enhancement: add etag to spaces response + +Added the spaces etag to the response when listing spaces. + +https://github.com/cs3org/reva/pull/2616 diff --git a/pkg/storage/utils/decomposedfs/spaces.go b/pkg/storage/utils/decomposedfs/spaces.go index 25396ffb11..651c758798 100644 --- a/pkg/storage/utils/decomposedfs/spaces.go +++ b/pkg/storage/utils/decomposedfs/spaces.go @@ -648,7 +648,9 @@ func (fs *Decomposedfs) storageSpaceFromNode(ctx context.Context, n *node.Node, // we set the space mtime to the root item mtime // override the stat mtime with a tmtime if it is present + var tmtime time.Time if tmt, err := n.GetTMTime(); err == nil { + tmtime = tmt un := tmt.UnixNano() space.Mtime = &types.Timestamp{ Seconds: uint64(un / 1000000000), @@ -656,6 +658,7 @@ func (fs *Decomposedfs) storageSpaceFromNode(ctx context.Context, n *node.Node, } } else if fi, err := os.Stat(nodePath); err == nil { // fall back to stat mtime + tmtime = fi.ModTime() un := fi.ModTime().UnixNano() space.Mtime = &types.Timestamp{ Seconds: uint64(un / 1000000000), @@ -663,6 +666,15 @@ func (fs *Decomposedfs) storageSpaceFromNode(ctx context.Context, n *node.Node, } } + etag, err := node.CalculateEtag(n.ID, tmtime) + if err != nil { + return nil, err + } + space.Opaque.Map["etag"] = &types.OpaqueEntry{ + Decoder: "plain", + Value: []byte(etag), + } + spaceAttributes, err := xattrs.All(nodePath) if err != nil { return nil, err