diff --git a/internal/vault/types_settings.go b/internal/vault/types_settings.go index bb6946a3..8f83423f 100644 --- a/internal/vault/types_settings.go +++ b/internal/vault/types_settings.go @@ -19,6 +19,7 @@ package vault import ( "math/rand" + "runtime" "github.com/ProtonMail/proton-bridge/v3/internal/updater" ) @@ -44,11 +45,29 @@ type Settings struct { FirstStart bool MaxSyncMemory uint64 + + // **WARNING**: These entry can't be removed until they vault has proper migration support. + SyncWorkers int + SyncAttPool int } const DefaultMaxSyncMemory = 2 * 1024 * uint64(1024*1024) +func GetDefaultSyncWorkerCount() int { + const minSyncWorkers = 16 + + syncWorkers := runtime.NumCPU() * 4 + + if syncWorkers < minSyncWorkers { + syncWorkers = minSyncWorkers + } + + return syncWorkers +} + func newDefaultSettings(gluonDir string) Settings { + syncWorkers := GetDefaultSyncWorkerCount() + return Settings{ GluonDir: gluonDir, @@ -70,5 +89,7 @@ func newDefaultSettings(gluonDir string) Settings { FirstStart: true, MaxSyncMemory: DefaultMaxSyncMemory, + SyncWorkers: syncWorkers, + SyncAttPool: syncWorkers, } } diff --git a/internal/vault/types_user.go b/internal/vault/types_user.go index af1958e3..a41085fb 100644 --- a/internal/vault/types_user.go +++ b/internal/vault/types_user.go @@ -17,6 +17,8 @@ package vault +import "github.com/ProtonMail/gluon/imap" + // UserData holds information about a single bridge user. // The user may or may not be logged in. type UserData struct { @@ -35,6 +37,9 @@ type UserData struct { SyncStatus SyncStatus EventID string + + // **WARNING**: This value can't be removed until we have vault migration support. + UIDValidity map[string]imap.UID } type AddressMode int @@ -76,6 +81,7 @@ func newDefaultUser(userID, username, primaryEmail, authUID, authRef string, key GluonKey: newRandomToken(32), GluonIDs: make(map[string]string), + UIDValidity: make(map[string]imap.UID), BridgePass: newRandomToken(16), AddressMode: CombinedMode,