From a2fb515b74637f8c814dee640ae07fb0886629d3 Mon Sep 17 00:00:00 2001 From: fyears <1142836+fyears@users.noreply.github.com> Date: Mon, 14 Mar 2022 23:42:18 +0800 Subject: [PATCH] add parts concurrency s3 --- src/baseTypes.ts | 1 + src/main.ts | 3 +++ src/remoteForS3.ts | 3 ++- src/settings.ts | 24 ++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/baseTypes.ts b/src/baseTypes.ts index c263ef7..d58801b 100644 --- a/src/baseTypes.ts +++ b/src/baseTypes.ts @@ -12,6 +12,7 @@ export interface S3Config { s3SecretAccessKey: string; s3BucketName: string; bypassCorsLocally?: boolean; + partsConcurrency?: number; } export interface DropboxConfig { diff --git a/src/main.ts b/src/main.ts index 20f98e9..19fff24 100644 --- a/src/main.ts +++ b/src/main.ts @@ -585,6 +585,9 @@ export default class RemotelySavePlugin extends Plugin { if (this.settings.webdav.depth === undefined) { this.settings.webdav.depth = "auto_unknown"; } + if (this.settings.s3.partsConcurrency === undefined) { + this.settings.s3.partsConcurrency = 20; + } } async saveSettings() { diff --git a/src/remoteForS3.ts b/src/remoteForS3.ts index f864289..e07a3ba 100644 --- a/src/remoteForS3.ts +++ b/src/remoteForS3.ts @@ -154,6 +154,7 @@ export const DEFAULT_S3_CONFIG = { s3SecretAccessKey: "", s3BucketName: "", bypassCorsLocally: true, + partsConcurrency: 20, }; export type S3ObjectType = _Object; @@ -291,7 +292,7 @@ export const uploadToRemote = async ( const body = new Uint8Array(remoteContent); const upload = new Upload({ client: s3Client, - queueSize: 20, // concurrency + queueSize: s3Config.partsConcurrency, // concurrency partSize: bytesIn5MB, // minimal 5MB by default leavePartsOnError: false, params: { diff --git a/src/settings.ts b/src/settings.ts index 9cdb097..e1114e1 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -754,6 +754,30 @@ export class RemotelySaveSettingTab extends PluginSettingTab { }); } + const partsConcurrencyDiv = s3Div.createEl("div"); + new Setting(partsConcurrencyDiv) + .setName("Parts Concurrency") + .setDesc( + "Large files are split into small parts to upload in S3. How many parts do you want to upload in parallel at most?" + ) + .addDropdown((dropdown) => { + dropdown.addOption("1", "1"); + dropdown.addOption("2", "2"); + dropdown.addOption("3", "3"); + dropdown.addOption("5", "5"); + dropdown.addOption("10", "10"); + dropdown.addOption("15", "15"); + dropdown.addOption("20", "20 (default)"); + + dropdown + .setValue(`${this.plugin.settings.s3.partsConcurrency}`) + .onChange(async (val) => { + const realVal = parseInt(val); + this.plugin.settings.s3.partsConcurrency = realVal; + await this.plugin.saveSettings(); + }); + }); + new Setting(s3Div) .setName("check connectivity") .setDesc("check connectivity")