[#197] Add a leading slash to the FilePath attribute
All checks were successful
All checks were successful
According to the frostfs api specification, the File Path attribute must start with a leading slash. More info: https://git.frostfs.info/TrueCloudLab/frostfs-api Signed-off-by: Roman Loginov <r.loginov@yadro.com>
This commit is contained in:
parent
cc6055bd27
commit
9cf2a4f0e0
2 changed files with 51 additions and 9 deletions
|
@ -253,9 +253,7 @@ func (h *Handler) byAttribute(c *fasthttp.RequestCtx, handler func(context.Conte
|
|||
return
|
||||
}
|
||||
|
||||
if key == attrFileName {
|
||||
val = prepareFileName(val)
|
||||
}
|
||||
val = prepareAtribute(key, val)
|
||||
|
||||
log = log.With(zap.String("cid", cidParam), zap.String("attr_key", key), zap.String("attr_val", val))
|
||||
|
||||
|
@ -298,7 +296,8 @@ func (h *Handler) findObjectByAttribute(ctx context.Context, log *zap.Logger, cn
|
|||
switch {
|
||||
case errors.Is(err, io.EOF) && h.needSearchByFileName(attrKey, attrVal):
|
||||
log.Debug(logs.ObjectNotFoundByFilePathTrySearchByFileName, logs.TagField(logs.TagExternalStorage))
|
||||
return h.findObjectByAttribute(ctx, log, cnrID, attrFileName, prepareFileName(attrVal))
|
||||
attrVal = prepareAtribute(attrFileName, attrVal)
|
||||
return h.findObjectByAttribute(ctx, log, cnrID, attrFileName, attrVal)
|
||||
case errors.Is(err, io.EOF):
|
||||
log.Error(logs.ObjectNotFound, zap.Error(err), logs.TagField(logs.TagExternalStorage))
|
||||
return oid.ID{}, fmt.Errorf("object not found: %w", err)
|
||||
|
@ -319,6 +318,18 @@ func (h *Handler) needSearchByFileName(key, val string) bool {
|
|||
return strings.HasPrefix(val, "/") && strings.Count(val, "/") == 1 || !strings.Contains(val, "/")
|
||||
}
|
||||
|
||||
func prepareAtribute(attrKey, attrVal string) string {
|
||||
if attrKey == attrFileName {
|
||||
return prepareFileName(attrVal)
|
||||
}
|
||||
|
||||
if attrKey == attrFilePath {
|
||||
return prepareFilePath(attrVal)
|
||||
}
|
||||
|
||||
return attrVal
|
||||
}
|
||||
|
||||
func prepareFileName(fileName string) string {
|
||||
if strings.HasPrefix(fileName, "/") {
|
||||
return fileName[1:]
|
||||
|
@ -327,6 +338,14 @@ func prepareFileName(fileName string) string {
|
|||
return fileName
|
||||
}
|
||||
|
||||
func prepareFilePath(filePath string) string {
|
||||
if !strings.HasPrefix(filePath, "/") {
|
||||
return "/" + filePath
|
||||
}
|
||||
|
||||
return filePath
|
||||
}
|
||||
|
||||
// resolveContainer decode container id, if it's not a valid container id
|
||||
// then trey to resolve name using provided resolver.
|
||||
func (h *Handler) resolveContainer(ctx context.Context, containerID string) (*cid.ID, error) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue