mirror of
https://github.com/kopia/kopia.git
synced 2025-12-23 22:57:50 -05:00
Supported are:
```
$ kopia throttle set \
--download-bytes-per-second=N | unlimited
--upload-bytes-per-second=N | unlimited
--read-requests-per-second=N | unlimited
--write-requests-per-second=N | unlimited
--list-requests-per-second=N | unlimited
--concurrent-reads=N | unlimited
--concurrent-writes=N | unlimited
```
To change parameters of a running server use:
```
$ kopia server throttle set \
--address=<server-url> \
--server-control-password=<password> \
--download-bytes-per-second=N | unlimited
--upload-bytes-per-second=N | unlimited
--read-requests-per-second=N | unlimited
--write-requests-per-second=N | unlimited
--list-requests-per-second=N | unlimited
--concurrent-reads=N | unlimited
--concurrent-writes=N | unlimited
```
82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/kopia/kopia/internal/testutil"
|
|
"github.com/kopia/kopia/repo/blob/throttling"
|
|
"github.com/kopia/kopia/tests/testenv"
|
|
)
|
|
|
|
func TestRepoThrottle(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
env := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
|
|
|
|
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
|
|
defer env.RunAndExpectSuccess(t, "repo", "disconnect")
|
|
|
|
require.Equal(t, []string{
|
|
"Max Download Speed: (unlimited)",
|
|
"Max Upload Speed: (unlimited)",
|
|
"Max Read Requests Per Second: (unlimited)",
|
|
"Max Write Requests Per Second: (unlimited)",
|
|
"Max List Requests Per Second: (unlimited)",
|
|
"Max Concurrent Reads: (unlimited)",
|
|
"Max Concurrent Writes: (unlimited)",
|
|
}, env.RunAndExpectSuccess(t, "repo", "throttle", "get"))
|
|
|
|
env.RunAndExpectSuccess(t, "repo", "throttle", "set",
|
|
"--download-bytes-per-second=1000000000",
|
|
"--upload-bytes-per-second=2000000000",
|
|
"--read-requests-per-second=300",
|
|
"--write-requests-per-second=400",
|
|
"--list-requests-per-second=500",
|
|
"--concurrent-reads=300",
|
|
"--concurrent-writes=400",
|
|
)
|
|
|
|
env.RunAndExpectFailure(t, "repo", "throttle", "set", "--download-bytes-per-second=-30")
|
|
env.RunAndExpectFailure(t, "repo", "throttle", "set", "--concurrent-reads=-3")
|
|
|
|
require.Equal(t, []string{
|
|
"Max Download Speed: 1 GB/s",
|
|
"Max Upload Speed: 2 GB/s",
|
|
"Max Read Requests Per Second: 300",
|
|
"Max Write Requests Per Second: 400",
|
|
"Max List Requests Per Second: 500",
|
|
"Max Concurrent Reads: 300",
|
|
"Max Concurrent Writes: 400",
|
|
}, env.RunAndExpectSuccess(t, "repo", "throttle", "get"))
|
|
|
|
env.RunAndExpectSuccess(t, "repo", "throttle", "set",
|
|
"--upload-bytes-per-second=unlimited",
|
|
"--write-requests-per-second=unlimited",
|
|
)
|
|
|
|
require.Equal(t, []string{
|
|
"Max Download Speed: 1 GB/s",
|
|
"Max Upload Speed: (unlimited)",
|
|
"Max Read Requests Per Second: 300",
|
|
"Max Write Requests Per Second: (unlimited)",
|
|
"Max List Requests Per Second: 500",
|
|
"Max Concurrent Reads: 300",
|
|
"Max Concurrent Writes: 400",
|
|
}, env.RunAndExpectSuccess(t, "repo", "throttle", "get"))
|
|
|
|
var limits throttling.Limits
|
|
|
|
testutil.MustParseJSONLines(t, env.RunAndExpectSuccess(t, "repo", "throttle", "get", "--json"), &limits)
|
|
require.Equal(t, throttling.Limits{
|
|
ReadsPerSecond: 300,
|
|
WritesPerSecond: 0,
|
|
ListsPerSecond: 500,
|
|
UploadBytesPerSecond: 0,
|
|
DownloadBytesPerSecond: 1e+09,
|
|
ConcurrentReads: 300,
|
|
ConcurrentWrites: 400,
|
|
}, limits)
|
|
}
|