storj/storage/testsuite/bench.go
Egon Elbre 00b2e1a7d7 all: enable staticcheck (#2849)
* by having megacheck in disable it also disabled staticcheck

* fix closing body

* keep interfacer disabled

* hide bodies

* don't use deprecated func

* fix dead code

* fix potential overrun

* keep stylecheck disabled

* don't pass nil as context

* fix infinite recursion

* remove extraneous return

* fix data race

* use correct func

* ignore unused var

* remove unused consts
2019-08-22 13:40:15 +02:00

88 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package testsuite
import (
"path"
"strconv"
"testing"
"golang.org/x/sync/errgroup"
"storj.io/storj/storage"
)
// RunBenchmarks runs common storage.KeyValueStore benchmarks
func RunBenchmarks(b *testing.B, store storage.KeyValueStore) {
var words = []string{
"alpha", "beta", "gamma", "delta", "iota", "kappa", "lambda", "mu",
"άλφα", "βήτα", "γάμμα", "δέλτα", "έψιλον", "ζήτα", "ήτα", "θήτα", "ιώτα", "κάππα", "λάμδα", "μυ",
"nu", "xi", "omicron", "pi", "rho", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega",
"νυ", "ξι", "όμικρον", "πι", "ρώ", "σίγμα", "ταυ", "ύψιλον", "φι", "χι", "ψι", "ωμέγα",
}
words = words[:20] // branching factor
var items storage.Items
k := 0
for _, a := range words {
for _, b := range words {
for _, c := range words {
items = append(items, storage.ListItem{
Key: storage.Key(path.Join(a, b, c)),
Value: storage.Value(strconv.Itoa(k)),
})
k++
}
}
}
defer cleanupItems(store, items)
b.Run("Put", func(b *testing.B) {
b.SetBytes(int64(len(items)))
for k := 0; k < b.N; k++ {
var group errgroup.Group
for _, item := range items {
key := item.Key
value := item.Value
group.Go(func() error {
return store.Put(ctx, key, value)
})
}
if err := group.Wait(); err != nil {
b.Fatalf("Put: %v", err)
}
}
})
b.Run("Get", func(b *testing.B) {
b.SetBytes(int64(len(items)))
for k := 0; k < b.N; k++ {
for _, item := range items {
_, err := store.Get(ctx, item.Key)
if err != nil {
b.Fatal(err)
}
}
}
})
b.Run("ListV2 5", func(b *testing.B) {
b.SetBytes(int64(len(items)))
for k := 0; k < b.N; k++ {
_, _, err := storage.ListV2(ctx, store, storage.ListOptions{
StartAfter: storage.Key("gamma"),
Limit: 5,
})
if err != nil {
b.Fatal(err)
}
}
})
}