* WIP * Added rebuild channels index functionality * Added rough logic to send message to all sysadmins * WIP * WIP * WIP * Cleanup * i18n fix * reading through all pages of system admins * Fixed webapp style * i18n fix * Added help text * i18n fix * i18n update * Updated system console button action * Updated snapshots * some cleanup * Updated snapshot * Update server/channels/app/server.go Co-authored-by: Daniel Espino García <larkox@gmail.com> * fixed typo * Refactoring to improve readibility * moved index check to API later during config update * Added some docs * Updated get system bot --------- Co-authored-by: Daniel Espino García <larkox@gmail.com>
37 строки
1.1 KiB
Go
37 строки
1.1 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package utils
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
var shortBackoffTimeouts = []time.Duration{50 * time.Millisecond, 100 * time.Millisecond, 200 * time.Millisecond, 200 * time.Millisecond, 400 * time.Millisecond, 400 * time.Millisecond}
|
|
|
|
var longBackoffTimeouts = []time.Duration{500 * time.Millisecond, 1 * time.Second, 2 * time.Second, 5 * time.Second, 8 * time.Second, 10 * time.Second}
|
|
|
|
// ProgressiveRetry executes a BackoffOperation and waits an increasing time before retrying the operation.
|
|
func ProgressiveRetry(operation func() error) error {
|
|
return CustomProgressiveRetry(operation, shortBackoffTimeouts)
|
|
}
|
|
|
|
func LongProgressiveRetry(operation func() error) error {
|
|
return CustomProgressiveRetry(operation, longBackoffTimeouts)
|
|
}
|
|
|
|
func CustomProgressiveRetry(operation func() error, backoffTimeouts []time.Duration) error {
|
|
var err error
|
|
|
|
for attempts := 0; attempts < len(backoffTimeouts); attempts++ {
|
|
err = operation()
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
|
|
time.Sleep(backoffTimeouts[attempts])
|
|
}
|
|
|
|
return err
|
|
}
|