fix URL expired issue #208

This commit is contained in:
tickstep 2022-12-26 21:24:07 +08:00
parent 97a22812a2
commit 0acd6a43d6
5 changed files with 14 additions and 16 deletions

View File

@ -18,6 +18,7 @@ import (
"github.com/tickstep/aliyunpan-api/aliyunpan" "github.com/tickstep/aliyunpan-api/aliyunpan"
"github.com/tickstep/aliyunpan/internal/utils" "github.com/tickstep/aliyunpan/internal/utils"
"github.com/tickstep/library-go/converter" "github.com/tickstep/library-go/converter"
"github.com/tickstep/library-go/logger"
"github.com/tickstep/library-go/requester" "github.com/tickstep/library-go/requester"
"github.com/tickstep/library-go/requester/rio" "github.com/tickstep/library-go/requester/rio"
"github.com/tickstep/library-go/requester/rio/speeds" "github.com/tickstep/library-go/requester/rio/speeds"
@ -136,13 +137,13 @@ func (muer *MultiUploader) Execute() error {
// 分配任务 // 分配任务
if muer.instanceState != nil { if muer.instanceState != nil {
muer.workers = muer.getWorkerListByInstanceState(muer.instanceState) muer.workers = muer.getWorkerListByInstanceState(muer.instanceState)
uploaderVerbose.Infof("upload task CREATED from instance state\n") logger.Verboseln("upload task CREATED from instance state\n")
} else { } else {
muer.workers = muer.getWorkerListByInstanceState(&InstanceState{ muer.workers = muer.getWorkerListByInstanceState(&InstanceState{
BlockList: SplitBlock(muer.file.Len(), muer.config.BlockSize), BlockList: SplitBlock(muer.file.Len(), muer.config.BlockSize),
}) })
uploaderVerbose.Infof("upload task CREATED: block size: %d, num: %d\n", muer.config.BlockSize, len(muer.workers)) logger.Verboseln("upload task CREATED: block size: %d, num: %d\n", muer.config.BlockSize, len(muer.workers))
} }
// 开始上传 // 开始上传

View File

@ -17,6 +17,7 @@ import (
"context" "context"
"github.com/oleiade/lane" "github.com/oleiade/lane"
"github.com/tickstep/aliyunpan/internal/waitgroup" "github.com/tickstep/aliyunpan/internal/waitgroup"
"github.com/tickstep/library-go/logger"
"github.com/tickstep/library-go/requester" "github.com/tickstep/library-go/requester"
"os" "os"
"strconv" "strconv"
@ -88,7 +89,7 @@ func (muer *MultiUploader) upload() (uperr error) {
) )
go func() { go func() {
if !wer.uploadDone { if !wer.uploadDone {
uploaderVerbose.Info("begin to upload part: " + strconv.Itoa(wer.id)) logger.Verboseln("begin to upload part: " + strconv.Itoa(wer.id))
uploadDone, terr = muer.multiUpload.UploadFile(ctx, int(wer.id), wer.partOffset, wer.splitUnit.Range().End, wer.splitUnit, uploadClient) uploadDone, terr = muer.multiUpload.UploadFile(ctx, int(wer.id), wer.partOffset, wer.splitUnit.Range().End, wer.splitUnit, uploadClient)
} else { } else {
uploadDone = true uploadDone = true
@ -101,10 +102,11 @@ func (muer *MultiUploader) upload() (uperr error) {
return return
case <-doneChan: case <-doneChan:
// continue // continue
uploaderVerbose.Info("multiUpload worker upload file done") logger.Verboseln("multiUpload worker upload file done")
} }
cancel() cancel()
if terr != nil { if terr != nil {
logger.Verboseln("upload file part err: %+v", terr)
if me, ok := terr.(*MultiError); ok { if me, ok := terr.(*MultiError); ok {
if me.Terminated { // 终止 if me.Terminated { // 终止
muer.closeCanceledOnce.Do(func() { // 只关闭一次 muer.closeCanceledOnce.Do(func() { // 只关闭一次
@ -113,7 +115,7 @@ func (muer *MultiUploader) upload() (uperr error) {
uperr = me.Err uperr = me.Err
return return
} else if me.NeedStartOver { } else if me.NeedStartOver {
uploaderVerbose.Warnf("upload start over: %d\n", wer.id) logger.Verboseln("upload start over: %d\n", wer.id)
// 从头开始上传 // 从头开始上传
muer.closeCanceledOnce.Do(func() { // 只关闭一次 muer.closeCanceledOnce.Do(func() { // 只关闭一次
close(muer.canceled) close(muer.canceled)
@ -123,9 +125,9 @@ func (muer *MultiUploader) upload() (uperr error) {
} }
} }
uploaderVerbose.Warnf("upload err: %s, id: %d\n", terr, wer.id) logger.Verboseln("upload err: %s, id: %d\n", terr, wer.id)
wer.splitUnit.Seek(0, os.SEEK_SET) wer.splitUnit.Seek(0, os.SEEK_SET)
uploadDeque.Append(wer) uploadDeque.Prepend(wer) // 放回上传队列首位
return return
} }
wer.uploadDone = uploadDone wer.uploadDone = uploadDone
@ -169,11 +171,11 @@ func (muer *MultiUploader) upload() (uperr error) {
if allSuccess { if allSuccess {
e := muer.multiUpload.CommitFile() e := muer.multiUpload.CommitFile()
if e != nil { if e != nil {
uploaderVerbose.Warn("upload file commit failed: " + e.Error()) logger.Verboseln("upload file commit failed: " + e.Error())
return e return e
} }
} else { } else {
uploaderVerbose.Warn("upload file not all success: " + muer.UploadOpEntity.FileId) logger.Verboseln("upload file not all success: " + muer.UploadOpEntity.FileId)
} }
return return

View File

@ -14,10 +14,8 @@
package uploader package uploader
import ( import (
"github.com/tickstep/aliyunpan/internal/config"
"github.com/tickstep/aliyunpan/internal/utils" "github.com/tickstep/aliyunpan/internal/utils"
"github.com/tickstep/library-go/converter" "github.com/tickstep/library-go/converter"
"github.com/tickstep/library-go/logger"
"github.com/tickstep/library-go/requester" "github.com/tickstep/library-go/requester"
"github.com/tickstep/library-go/requester/rio" "github.com/tickstep/library-go/requester/rio"
"net/http" "net/http"
@ -51,10 +49,6 @@ type (
} }
) )
var (
uploaderVerbose = logger.New("UPLOADER", config.EnvVerbose)
)
// NewUploader 返回 uploader 对象, url: 上传地址, readerlen64: 实现 rio.ReaderLen64 接口的对象, 例如文件 // NewUploader 返回 uploader 对象, url: 上传地址, readerlen64: 实现 rio.ReaderLen64 接口的对象, 例如文件
func NewUploader(url string, readerlen64 rio.ReaderLen64) (uploader *Uploader) { func NewUploader(url string, readerlen64 rio.ReaderLen64) (uploader *Uploader) {
uploader = &Uploader{ uploader = &Uploader{

View File

@ -96,6 +96,7 @@ func (pu *PanUpload) UploadFile(ctx context.Context, partseq int, partOffset int
} }
newUploadInfo, err := pu.panClient.GetUploadUrl(refreshUploadParam) newUploadInfo, err := pu.panClient.GetUploadUrl(refreshUploadParam)
if err != nil { if err != nil {
logger.Verboseln(err)
return false, &uploader.MultiError{ return false, &uploader.MultiError{
Err: uploader.UploadUrlExpired, Err: uploader.UploadUrlExpired,
Terminated: false, Terminated: false,

View File

@ -55,7 +55,7 @@ func IsUrlExpired(urlStr string) bool {
} }
expiredTimeSecStr := u.Query().Get("x-oss-expires") expiredTimeSecStr := u.Query().Get("x-oss-expires")
expiredTimeSec, _ := strconv.ParseInt(expiredTimeSecStr, 10, 64) expiredTimeSec, _ := strconv.ParseInt(expiredTimeSecStr, 10, 64)
if (time.Now().Unix() - 10) >= expiredTimeSec { if (expiredTimeSec - time.Now().Unix()) <= 10 { // 小于10秒
// expired // expired
return true return true
} }