fix: task length did not match range length (#2787)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2023-10-10 18:28:59 +08:00 committed by GitHub
parent 47c6cdd8cc
commit 61f63e2e8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 8 deletions

View File

@ -259,10 +259,14 @@ func (o *objectStorage) getObject(ctx *gin.Context) {
bucketName = params.ID bucketName = params.ID
objectKey = strings.TrimPrefix(params.ObjectKey, string(os.PathSeparator)) objectKey = strings.TrimPrefix(params.ObjectKey, string(os.PathSeparator))
filter = query.Filter filter = query.Filter
rg *nethttp.Range
err error err error
) )
// Initialize request of the stream task.
req := &peer.StreamTaskRequest{
PeerID: o.peerIDGenerator.PeerID(),
}
// Initialize filter field. // Initialize filter field.
urlMeta := &commonv1.UrlMeta{Filter: o.config.ObjectStorage.Filter} urlMeta := &commonv1.UrlMeta{Filter: o.config.ObjectStorage.Filter}
if filter != "" { if filter != "" {
@ -290,7 +294,7 @@ func (o *objectStorage) getObject(ctx *gin.Context) {
ctx.JSON(http.StatusRequestedRangeNotSatisfiable, gin.H{"errors": err.Error()}) ctx.JSON(http.StatusRequestedRangeNotSatisfiable, gin.H{"errors": err.Error()})
return return
} }
rg = &rangeValue req.Range = &rangeValue
// Range header in dragonfly is without "bytes=". // Range header in dragonfly is without "bytes=".
urlMeta.Range = strings.TrimPrefix(rangeHeader, "bytes=") urlMeta.Range = strings.TrimPrefix(rangeHeader, "bytes=")
@ -299,23 +303,20 @@ func (o *objectStorage) getObject(ctx *gin.Context) {
// there is no need to calculate md5, set this value to empty. // there is no need to calculate md5, set this value to empty.
urlMeta.Digest = "" urlMeta.Digest = ""
} }
req.URLMeta = urlMeta
signURL, err := o.objectStorageClient.GetSignURL(ctx, bucketName, objectKey, objectstorage.MethodGet, defaultSignExpireTime) signURL, err := o.objectStorageClient.GetSignURL(ctx, bucketName, objectKey, objectstorage.MethodGet, defaultSignExpireTime)
if err != nil { if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{"errors": err.Error()}) ctx.JSON(http.StatusInternalServerError, gin.H{"errors": err.Error()})
return return
} }
req.URL = signURL
taskID := idgen.TaskIDV1(signURL, urlMeta) taskID := idgen.TaskIDV1(signURL, urlMeta)
log := logger.WithTaskID(taskID) log := logger.WithTaskID(taskID)
log.Infof("get object %s meta: %s %#v", objectKey, signURL, urlMeta) log.Infof("get object %s meta: %s %#v", objectKey, signURL, urlMeta)
reader, attr, err := o.peerTaskManager.StartStreamTask(ctx, &peer.StreamTaskRequest{ reader, attr, err := o.peerTaskManager.StartStreamTask(ctx, req)
URL: signURL,
URLMeta: urlMeta,
Range: rg,
PeerID: o.peerIDGenerator.PeerID(),
})
if err != nil { if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{"errors": err.Error()}) ctx.JSON(http.StatusInternalServerError, gin.H{"errors": err.Error()})
return return