[full-ci][bump reva] fixed the response code when the role/permission is empty on the share update
This commit is contained in:
Generated
Vendored
+3
@@ -859,6 +859,9 @@ func (h *Handler) updateShare(w http.ResponseWriter, r *http.Request, share *col
|
||||
case rpc.Code_CODE_LOCKED:
|
||||
response.WriteOCSError(w, r, response.MetaLocked.StatusCode, uRes.GetStatus().GetMessage(), nil)
|
||||
return
|
||||
case rpc.Code_CODE_INVALID_ARGUMENT, rpc.Code_CODE_FAILED_PRECONDITION:
|
||||
response.WriteOCSError(w, r, response.MetaBadRequest.StatusCode, uRes.GetStatus().GetMessage(), nil)
|
||||
return
|
||||
}
|
||||
response.WriteOCSError(w, r, response.MetaServerError.StatusCode, "grpc update share request failed", err)
|
||||
return
|
||||
|
||||
+22
-26
@@ -98,7 +98,21 @@ func (lu *Lookup) GetCachedID(ctx context.Context, spaceID, nodeID string) (stri
|
||||
func (lu *Lookup) WarmupIDCache(root string) error {
|
||||
spaceID := []byte("")
|
||||
|
||||
var gid int
|
||||
scopeSpace := func(spaceCandidate string) error {
|
||||
if !lu.Options.UseSpaceGroups {
|
||||
return nil
|
||||
}
|
||||
|
||||
// set the uid and gid for the space
|
||||
fi, err := os.Stat(spaceCandidate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sys := fi.Sys().(*syscall.Stat_t)
|
||||
gid := int(sys.Gid)
|
||||
_, err = lu.userMapper.ScopeUserByIds(-1, gid)
|
||||
return err
|
||||
}
|
||||
|
||||
return filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
@@ -107,41 +121,23 @@ func (lu *Lookup) WarmupIDCache(root string) error {
|
||||
|
||||
attribs, err := lu.metadataBackend.All(context.Background(), path)
|
||||
if err == nil {
|
||||
nodeSpaceID, ok := attribs[prefixes.SpaceIDAttr]
|
||||
if ok {
|
||||
nodeSpaceID := attribs[prefixes.SpaceIDAttr]
|
||||
if len(nodeSpaceID) > 0 {
|
||||
spaceID = nodeSpaceID
|
||||
|
||||
// set the uid and gid for the space
|
||||
fi, err := os.Stat(path)
|
||||
err = scopeSpace(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sys := fi.Sys().(*syscall.Stat_t)
|
||||
gid = int(sys.Gid)
|
||||
_, err = lu.userMapper.ScopeUserByIds(-1, gid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if len(spaceID) == 0 {
|
||||
} else {
|
||||
// try to find space
|
||||
spaceCandidate := path
|
||||
for strings.HasPrefix(spaceCandidate, lu.Options.Root) {
|
||||
spaceID, err = lu.MetadataBackend().Get(context.Background(), spaceCandidate, prefixes.SpaceIDAttr)
|
||||
if err == nil {
|
||||
if lu.Options.UseSpaceGroups {
|
||||
// set the uid and gid for the space
|
||||
fi, err := os.Stat(spaceCandidate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sys := fi.Sys().(*syscall.Stat_t)
|
||||
gid := int(sys.Gid)
|
||||
_, err = lu.userMapper.ScopeUserByIds(-1, gid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = scopeSpace(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ func (c *StoreIDCache) Set(_ context.Context, spaceID, nodeID, val string) error
|
||||
// Get returns the value for a given key
|
||||
func (c *StoreIDCache) Get(_ context.Context, spaceID, nodeID string) (string, bool) {
|
||||
records, err := c.cache.Read(cacheKey(spaceID, nodeID))
|
||||
if err != nil {
|
||||
if err != nil || len(records) == 0 {
|
||||
return "", false
|
||||
}
|
||||
return string(records[0].Value), true
|
||||
|
||||
+8
-4
@@ -217,15 +217,19 @@ assimilate:
|
||||
return nil, errors.Wrap(err, "failed to stat item")
|
||||
}
|
||||
|
||||
previousAttribs, err := t.lookup.MetadataBackend().All(context.Background(), path)
|
||||
attrs, err := t.lookup.MetadataBackend().All(context.Background(), path)
|
||||
if err != nil && !metadata.IsAttrUnset(err) {
|
||||
return nil, errors.Wrap(err, "failed to get item attribs")
|
||||
}
|
||||
previousAttribs := node.Attributes(attrs)
|
||||
|
||||
attributes := node.Attributes{
|
||||
prefixes.IDAttr: []byte(id),
|
||||
prefixes.NameAttr: []byte(filepath.Base(path)),
|
||||
prefixes.MTimeAttr: []byte(fi.ModTime().Format(time.RFC3339)),
|
||||
prefixes.IDAttr: []byte(id),
|
||||
prefixes.NameAttr: []byte(filepath.Base(path)),
|
||||
}
|
||||
prevMtime, err := previousAttribs.Time(prefixes.MTimeAttr)
|
||||
if err != nil || prevMtime.Before(fi.ModTime()) {
|
||||
attributes[prefixes.MTimeAttr] = []byte(fi.ModTime().Format(time.RFC3339Nano))
|
||||
}
|
||||
if len(parentID) > 0 {
|
||||
attributes[prefixes.ParentidAttr] = []byte(parentID)
|
||||
|
||||
+6
@@ -22,6 +22,7 @@ import (
|
||||
"context"
|
||||
"io"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/xattr"
|
||||
)
|
||||
@@ -59,6 +60,11 @@ func (md Attributes) SetUInt64(key string, val uint64) {
|
||||
md[key] = []byte(strconv.FormatUint(val, 10))
|
||||
}
|
||||
|
||||
// Time reads a time value
|
||||
func (md Attributes) Time(key string) (time.Time, error) {
|
||||
return time.Parse(time.RFC3339Nano, string(md[key]))
|
||||
}
|
||||
|
||||
// SetXattrs sets multiple extended attributes on the write-through cache/node
|
||||
func (n *Node) SetXattrsWithContext(ctx context.Context, attribs map[string][]byte, acquireLock bool) (err error) {
|
||||
if n.xattrsCache != nil {
|
||||
|
||||
+2
-1
@@ -325,7 +325,8 @@ func (fs *Decomposedfs) ListStorageSpaces(ctx context.Context, filter []*provide
|
||||
|
||||
if requestedUserID != nil {
|
||||
allMatches, err = fs.userSpaceIndex.Load(requestedUserID.GetOpaqueId())
|
||||
if err != nil {
|
||||
// do not return an error if the user has no spaces
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return nil, errors.Wrap(err, "error reading user index")
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -24,7 +24,6 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
@@ -181,12 +180,10 @@ func (fs *Decomposedfs) InitiateUpload(ctx context.Context, ref *provider.Refere
|
||||
session.SetStorageValue("SpaceRoot", n.SpaceRoot.ID) // TODO SpaceRoot -> SpaceID
|
||||
session.SetStorageValue("SpaceOwnerOrManager", n.SpaceOwnerOrManager(ctx).GetOpaqueId()) // TODO needed for what?
|
||||
|
||||
// remember the gid of the space
|
||||
fi, err := os.Stat(n.SpaceRoot.InternalPath())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
spaceGID, ok := ctx.Value(CtxKeySpaceGID).(uint32)
|
||||
if ok {
|
||||
session.SetStorageValue("SpaceGid", fmt.Sprintf("%d", spaceGID))
|
||||
}
|
||||
session.SetStorageValue("SpaceGid", fmt.Sprintf("%d", (fi.Sys().(*syscall.Stat_t).Gid)))
|
||||
|
||||
iid, _ := ctxpkg.ContextGetInitiator(ctx)
|
||||
session.SetMetadata("initiatorid", iid)
|
||||
|
||||
Reference in New Issue
Block a user