perf(123pan): optimize rate limiting (#6859)

- eliminating fixed 200 ms delay in getFiles to prevent thread starvation
- allowing cancellation via context to mitigate potential DoS attacks by immediately cancelling excessive requests
This commit is contained in:
seiuneko
2024-07-25 20:08:59 +08:00
committed by GitHub
parent d4e3355f56
commit 5fa70e4010
4 changed files with 23 additions and 24 deletions

View File

@ -1,6 +1,7 @@
package _123
import (
"context"
"errors"
"fmt"
"hash/crc32"
@ -14,7 +15,7 @@ import (
"github.com/alist-org/alist/v3/drivers/base"
"github.com/alist-org/alist/v3/pkg/utils"
resty "github.com/go-resty/resty/v2"
"github.com/go-resty/resty/v2"
jsoniter "github.com/json-iterator/go"
log "github.com/sirupsen/logrus"
)
@ -233,15 +234,14 @@ func (d *Pan123) request(url string, method string, callback base.ReqCallback, r
return body, nil
}
func (d *Pan123) getFiles(parentId string, name string) ([]File, error) {
func (d *Pan123) getFiles(ctx context.Context, parentId string, name string) ([]File, error) {
page := 1
total := 0
res := make([]File, 0)
// 2024-02-06 fix concurrency by 123pan
for {
if !d.APIRateLimit(FileList) {
time.Sleep(time.Millisecond * 200)
continue
if err := d.APIRateLimit(ctx, FileList); err != nil {
return nil, err
}
var resp Files
query := map[string]string{