1
mirror of https://github.com/rclone/rclone synced 2025-04-02 19:45:30 +02:00

drive: set default pacer to 100ms for 10 tps - fixes

This commit is contained in:
Nick Craig-Wood 2018-12-30 18:05:34 +00:00
parent 6a832b7173
commit 144daec800

@ -54,7 +54,7 @@ const (
driveFolderType = "application/vnd.google-apps.folder" driveFolderType = "application/vnd.google-apps.folder"
timeFormatIn = time.RFC3339 timeFormatIn = time.RFC3339
timeFormatOut = "2006-01-02T15:04:05.000000000Z07:00" timeFormatOut = "2006-01-02T15:04:05.000000000Z07:00"
minSleep = 10 * time.Millisecond defaultMinSleep = fs.Duration(100 * time.Millisecond)
defaultExportExtensions = "docx,xlsx,pptx,svg" defaultExportExtensions = "docx,xlsx,pptx,svg"
scopePrefix = "https://www.googleapis.com/auth/" scopePrefix = "https://www.googleapis.com/auth/"
defaultScope = "drive" defaultScope = "drive"
@ -356,6 +356,11 @@ will download it anyway.`,
Default: fs.SizeSuffix(-1), Default: fs.SizeSuffix(-1),
Help: "If Object's are greater, use drive v2 API to download.", Help: "If Object's are greater, use drive v2 API to download.",
Advanced: true, Advanced: true,
}, {
Name: "pacer_min_sleep",
Default: defaultMinSleep,
Help: "Minimum time to sleep between API calls.",
Advanced: true,
}}, }},
}) })
@ -398,6 +403,7 @@ type Options struct {
AcknowledgeAbuse bool `config:"acknowledge_abuse"` AcknowledgeAbuse bool `config:"acknowledge_abuse"`
KeepRevisionForever bool `config:"keep_revision_forever"` KeepRevisionForever bool `config:"keep_revision_forever"`
V2DownloadMinSize fs.SizeSuffix `config:"v2_download_min_size"` V2DownloadMinSize fs.SizeSuffix `config:"v2_download_min_size"`
PacerMinSleep fs.Duration `config:"pacer_min_sleep"`
} }
// Fs represents a remote drive server // Fs represents a remote drive server
@ -744,7 +750,7 @@ func configTeamDrive(opt *Options, m configmap.Mapper, name string) error {
listFailed := false listFailed := false
for { for {
var teamDrives *drive.TeamDriveList var teamDrives *drive.TeamDriveList
err = newPacer().Call(func() (bool, error) { err = newPacer(opt).Call(func() (bool, error) {
teamDrives, err = listTeamDrives.Do() teamDrives, err = listTeamDrives.Do()
return shouldRetry(err) return shouldRetry(err)
}) })
@ -774,8 +780,8 @@ func configTeamDrive(opt *Options, m configmap.Mapper, name string) error {
} }
// newPacer makes a pacer configured for drive // newPacer makes a pacer configured for drive
func newPacer() *pacer.Pacer { func newPacer(opt *Options) *pacer.Pacer {
return pacer.New().SetMinSleep(minSleep).SetPacer(pacer.GoogleDrivePacer) return pacer.New().SetMinSleep(time.Duration(opt.PacerMinSleep)).SetPacer(pacer.GoogleDrivePacer)
} }
func getServiceAccountClient(opt *Options, credentialsData []byte) (*http.Client, error) { func getServiceAccountClient(opt *Options, credentialsData []byte) (*http.Client, error) {
@ -879,7 +885,7 @@ func NewFs(name, path string, m configmap.Mapper) (fs.Fs, error) {
name: name, name: name,
root: root, root: root,
opt: *opt, opt: *opt,
pacer: newPacer(), pacer: newPacer(opt),
} }
f.isTeamDrive = opt.TeamDriveID != "" f.isTeamDrive = opt.TeamDriveID != ""
f.features = (&fs.Features{ f.features = (&fs.Features{