forked from TrueCloudLab/frostfs-s3-gw
[#451] Don't skip [Next]PartNumberMarker in response
In ListParts response we should always keep PartNumberMarker (even if it's zero) and NextPartNumberMarker (even if response isn't truncated) Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
c34680d157
commit
69e77aecc9
3 changed files with 10 additions and 4 deletions
|
@ -54,11 +54,11 @@ type (
|
||||||
Initiator Initiator `xml:"Initiator"`
|
Initiator Initiator `xml:"Initiator"`
|
||||||
IsTruncated bool `xml:"IsTruncated"`
|
IsTruncated bool `xml:"IsTruncated"`
|
||||||
Key string `xml:"Key"`
|
Key string `xml:"Key"`
|
||||||
MaxParts int `xml:"MaxParts,omitempty"`
|
MaxParts int `xml:"MaxParts"`
|
||||||
NextPartNumberMarker int `xml:"NextPartNumberMarker,omitempty"`
|
NextPartNumberMarker int `xml:"NextPartNumberMarker"`
|
||||||
Owner Owner `xml:"Owner"`
|
Owner Owner `xml:"Owner"`
|
||||||
Parts []*layer.Part `xml:"Part"`
|
Parts []*layer.Part `xml:"Part"`
|
||||||
PartNumberMarker int `xml:"PartNumberMarker,omitempty"`
|
PartNumberMarker int `xml:"PartNumberMarker"`
|
||||||
StorageClass string `xml:"StorageClass"`
|
StorageClass string `xml:"StorageClass"`
|
||||||
UploadID string `xml:"UploadId"`
|
UploadID string `xml:"UploadId"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,13 +292,19 @@ func TestListParts(t *testing.T) {
|
||||||
require.Len(t, list.Parts, 2)
|
require.Len(t, list.Parts, 2)
|
||||||
require.Equal(t, etag1, list.Parts[0].ETag)
|
require.Equal(t, etag1, list.Parts[0].ETag)
|
||||||
require.Equal(t, etag2, list.Parts[1].ETag)
|
require.Equal(t, etag2, list.Parts[1].ETag)
|
||||||
|
require.Zero(t, list.PartNumberMarker)
|
||||||
|
require.Equal(t, 2, list.NextPartNumberMarker)
|
||||||
|
|
||||||
list = listParts(hc, bktName, objName, uploadInfo.UploadID, "1", http.StatusOK)
|
list = listParts(hc, bktName, objName, uploadInfo.UploadID, "1", http.StatusOK)
|
||||||
require.Len(t, list.Parts, 1)
|
require.Len(t, list.Parts, 1)
|
||||||
require.Equal(t, etag2, list.Parts[0].ETag)
|
require.Equal(t, etag2, list.Parts[0].ETag)
|
||||||
|
require.Equal(t, 1, list.PartNumberMarker)
|
||||||
|
require.Equal(t, 2, list.NextPartNumberMarker)
|
||||||
|
|
||||||
list = listParts(hc, bktName, objName, uploadInfo.UploadID, "2", http.StatusOK)
|
list = listParts(hc, bktName, objName, uploadInfo.UploadID, "2", http.StatusOK)
|
||||||
require.Len(t, list.Parts, 0)
|
require.Len(t, list.Parts, 0)
|
||||||
|
require.Equal(t, 2, list.PartNumberMarker)
|
||||||
|
require.Equal(t, 0, list.NextPartNumberMarker)
|
||||||
|
|
||||||
list = listParts(hc, bktName, objName, uploadInfo.UploadID, "7", http.StatusOK)
|
list = listParts(hc, bktName, objName, uploadInfo.UploadID, "7", http.StatusOK)
|
||||||
require.Len(t, list.Parts, 0)
|
require.Len(t, list.Parts, 0)
|
||||||
|
|
|
@ -603,10 +603,10 @@ func (n *Layer) ListParts(ctx context.Context, p *ListPartsParams) (*ListPartsIn
|
||||||
|
|
||||||
if len(parts) > p.MaxParts {
|
if len(parts) > p.MaxParts {
|
||||||
res.IsTruncated = true
|
res.IsTruncated = true
|
||||||
res.NextPartNumberMarker = parts[p.MaxParts-1].PartNumber
|
|
||||||
parts = parts[:p.MaxParts]
|
parts = parts[:p.MaxParts]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res.NextPartNumberMarker = parts[len(parts)-1].PartNumber
|
||||||
res.Parts = parts
|
res.Parts = parts
|
||||||
|
|
||||||
return &res, nil
|
return &res, nil
|
||||||
|
|
Loading…
Reference in a new issue