Fix S3 list objects marker adjustment for delimiters (#7938)
This commit is contained in:
@@ -55,7 +55,7 @@ func (s3a *S3ApiServer) ListObjectsV2Handler(w http.ResponseWriter, r *http.Requ
|
|||||||
bucket, _ := s3_constants.GetBucketAndObject(r)
|
bucket, _ := s3_constants.GetBucketAndObject(r)
|
||||||
originalPrefix, startAfter, delimiter, continuationToken, encodingTypeUrl, fetchOwner, maxKeys, allowUnordered, errCode := getListObjectsV2Args(r.URL.Query())
|
originalPrefix, startAfter, delimiter, continuationToken, encodingTypeUrl, fetchOwner, maxKeys, allowUnordered, errCode := getListObjectsV2Args(r.URL.Query())
|
||||||
|
|
||||||
glog.V(2).Infof("ListObjectsV2Handler bucket=%s prefix=%s", bucket, originalPrefix)
|
glog.V(2).Infof("ListObjectsV2Handler bucket=%s prefix=%s marker=%s", bucket, originalPrefix, continuationToken.string)
|
||||||
|
|
||||||
if errCode != s3err.ErrNone {
|
if errCode != s3err.ErrNone {
|
||||||
s3err.WriteErrorResponse(w, r, errCode)
|
s3err.WriteErrorResponse(w, r, errCode)
|
||||||
@@ -120,7 +120,7 @@ func (s3a *S3ApiServer) ListObjectsV1Handler(w http.ResponseWriter, r *http.Requ
|
|||||||
bucket, _ := s3_constants.GetBucketAndObject(r)
|
bucket, _ := s3_constants.GetBucketAndObject(r)
|
||||||
originalPrefix, marker, delimiter, encodingTypeUrl, maxKeys, allowUnordered, errCode := getListObjectsV1Args(r.URL.Query())
|
originalPrefix, marker, delimiter, encodingTypeUrl, maxKeys, allowUnordered, errCode := getListObjectsV1Args(r.URL.Query())
|
||||||
|
|
||||||
glog.V(2).Infof("ListObjectsV1Handler bucket=%s prefix=%s delimiter=%s maxKeys=%d", bucket, originalPrefix, delimiter, maxKeys)
|
glog.V(2).Infof("ListObjectsV1Handler bucket=%s prefix=%s marker=%s delimiter=%s maxKeys=%d", bucket, originalPrefix, marker, delimiter, maxKeys)
|
||||||
|
|
||||||
if errCode != s3err.ErrNone {
|
if errCode != s3err.ErrNone {
|
||||||
s3err.WriteErrorResponse(w, r, errCode)
|
s3err.WriteErrorResponse(w, r, errCode)
|
||||||
@@ -742,7 +742,7 @@ func adjustMarkerForDelimiter(marker, delimiter string) string {
|
|||||||
return marker
|
return marker
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the trailing delimiter and append a high ASCII character
|
// Remove the trailing delimiter
|
||||||
// This ensures we skip all entries under the prefix but don't skip
|
// This ensures we skip all entries under the prefix but don't skip
|
||||||
// potential directory entries that start with a similar prefix
|
// potential directory entries that start with a similar prefix
|
||||||
prefix := strings.TrimSuffix(marker, delimiter)
|
prefix := strings.TrimSuffix(marker, delimiter)
|
||||||
@@ -750,7 +750,5 @@ func adjustMarkerForDelimiter(marker, delimiter string) string {
|
|||||||
return marker
|
return marker
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use tilde (~) which has ASCII value 126, higher than most printable characters
|
return prefix
|
||||||
// This skips "prefix/*" entries but still finds "prefix" + any higher character
|
|
||||||
return prefix + "~"
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user