Skip to content

Commit

Permalink
Merge pull request #130 from dvonthenen/feature/gotestbenchmark
Browse files Browse the repository at this point in the history
Key/Value Store Benchmarks
  • Loading branch information
cantbewong committed Aug 19, 2016
2 parents 6042232 + 7c3cb87 commit b14719a
Show file tree
Hide file tree
Showing 3 changed files with 176 additions and 14 deletions.
4 changes: 4 additions & 0 deletions build-linux.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#! /usr/bin/env bash

make deps GOARCH=amd64 GOOS=linux
make GOARCH=amd64 GOOS=linux
183 changes: 169 additions & 14 deletions core/store/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ package store

import (
"bytes"

log "github.com/Sirupsen/logrus"
"os"
"strconv"
"testing"

log "github.com/Sirupsen/logrus"

gofig "github.com/akutz/gofig"
lstypes "github.com/emccode/libstorage/api/types"
"github.com/emccode/polly/api/types"
Expand All @@ -15,18 +16,31 @@ import (
)

const (
libStorageConfigBaseBolt = `
libStorageConfigBaseTestBolt = `
polly:
store:
type: boltdb
endpoints: /tmp/boltdb
endpoints: /tmp/boltdb-test
bucket: MyBoltDb_test
server:
services:
vfs:
libstorage:
storage:
driver: vfs
`
libStorageConfigBaseBenchBolt = `
polly:
store:
type: boltdb
endpoints: /tmp/boltdb-bench
bucket: MyBoltDb_bench
server:
services:
vfs:
libstorage:
storage:
driver: vfs
`
libStorageConfigBaseConsul = `
polly:
Expand All @@ -47,31 +61,28 @@ func newVolume(service, volumeID string) *types.Volume {
}

func TestMain(m *testing.M) {
log.SetLevel(log.DebugLevel)
log.SetLevel(log.ErrorLevel)
os.Setenv("POLLY_DEBUG", "true")
config := gofig.New()

configYamlBuf := []byte(libStorageConfigBaseBolt)
configYamlBuf := []byte(libStorageConfigBaseTestBolt)
if err := config.ReadConfig(bytes.NewReader(configYamlBuf)); err != nil {
panic(err)
}

os.Remove("/tmp/boltdb-test")
os.Remove("/tmp/boltdb-bench")

var err error
ps, err = NewWithConfig(config)
if err != nil {
log.WithError(err).Fatal("Failed to create PollyStore")
}

vol := newVolume("pollytestpkg1", "testid1")
_ = ps.RemoveVolumeMetadata(vol)

if err := ps.EraseStore(); err != nil {
log.Fatal("Could not clear polly store")
}

m.Run()
}

//Testing
func TestGenerateRootKey(t *testing.T) {
key, err := ps.GenerateRootKey(VolumeInternalLabelsType)
assert.NoError(t, err)
Expand Down Expand Up @@ -230,7 +241,7 @@ func TestRemoveVolumeMetadata(t *testing.T) {
func TestEraseStore(t *testing.T) {
myConfig := gofig.New()

configYamlBuf := []byte(libStorageConfigBaseBolt)
configYamlBuf := []byte(libStorageConfigBaseTestBolt)
if err := myConfig.ReadConfig(bytes.NewReader(configYamlBuf)); err != nil {
panic(err)
}
Expand All @@ -257,3 +268,147 @@ func TestEraseStore(t *testing.T) {

assert.Len(t, ids, 0)
}

//Benchmarks
func BenchmarkGetVolumeIDNotExist(b *testing.B) {
myConfig := gofig.New()

configYamlBuf := []byte(libStorageConfigBaseBenchBolt)
if err := myConfig.ReadConfig(bytes.NewReader(configYamlBuf)); err != nil {
log.WithError(err).Fatal("Failed to create PollyStore")
}

psBench, err := NewWithConfig(myConfig.Scope("polly.store"))
if err != nil {
log.Fatal("Failed to create PollyStore")
}

err = psBench.EraseStore()
if err != nil {
log.WithError(err).Fatal("Failed to reset PollyStore")
}

volume := newVolume("pollytestpkg2", "testiddoesntexist")

b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
psBench.Exists(volume)
}
})
}

func BenchmarkGetVolumeIDs(b *testing.B) {
myConfig := gofig.New()

configYamlBuf := []byte(libStorageConfigBaseBenchBolt)
if err := myConfig.ReadConfig(bytes.NewReader(configYamlBuf)); err != nil {
log.WithError(err).Fatal("Failed to create PollyStore")
}

psBench, err := NewWithConfig(myConfig.Scope("polly.store"))
if err != nil {
log.Fatal("Failed to create PollyStore")
}

err = psBench.EraseStore()
if err != nil {
log.WithError(err).Fatal("Failed to reset PollyStore")
}

volume := newVolume("pollytestpkg1", "testid1")

err = psBench.SaveVolumeMetadata(volume)
if err != nil {
log.WithError(err).Fatal("Failed to SaveVolumeMetadata")
}

b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
psBench.GetVolumeIds()
}
})
}

func BenchmarkNewVolumeMetadata(b *testing.B) {
myConfig := gofig.New()

configYamlBuf := []byte(libStorageConfigBaseBenchBolt)
if err := myConfig.ReadConfig(bytes.NewReader(configYamlBuf)); err != nil {
log.WithError(err).Fatal("Failed to create PollyStore")
}

psBench, err := NewWithConfig(myConfig.Scope("polly.store"))
if err != nil {
log.Fatal("Failed to create PollyStore")
}

err = psBench.EraseStore()
if err != nil {
log.WithError(err).Fatal("Failed to reset PollyStore")
}

volume := newVolume("pollytestpkg1", "testid1")
volume.Schedulers = []string{"testScheduler"}

err = psBench.SaveVolumeMetadata(volume)
if err != nil {
log.WithError(err).Fatal("Failed to SaveVolumeMetadata")
}

volume = newVolume("pollytestpkg1", "testid1")
_, err = psBench.SetVolumeMetadata(volume)
if err != nil {
log.WithError(err).Fatal("Failed to SaveVolumeMetadata")
}

volume.Labels = make(map[string]string)

b.ResetTimer()
for i := 0; i < b.N; i++ {
volume.Labels["testkey"+strconv.Itoa(i)] = "testval"
psBench.SaveVolumeMetadata(volume)
}
}

func BenchmarkUpdateVolumeMetadata(b *testing.B) {
myConfig := gofig.New()

configYamlBuf := []byte(libStorageConfigBaseBenchBolt)
if err := myConfig.ReadConfig(bytes.NewReader(configYamlBuf)); err != nil {
log.WithError(err).Fatal("Failed to create PollyStore")
}

psBench, err := NewWithConfig(myConfig.Scope("polly.store"))
if err != nil {
log.Fatal("Failed to create PollyStore")
}

err = psBench.EraseStore()
if err != nil {
log.WithError(err).Fatal("Failed to reset PollyStore")
}

volume := newVolume("pollytestpkg1", "testid1")
volume.Schedulers = []string{"testScheduler"}

err = psBench.SaveVolumeMetadata(volume)
if err != nil {
log.WithError(err).Fatal("Failed to SaveVolumeMetadata")
}

volume = newVolume("pollytestpkg1", "testid1")
_, err = psBench.SetVolumeMetadata(volume)
if err != nil {
log.WithError(err).Fatal("Failed to SaveVolumeMetadata")
}

volume.Labels = make(map[string]string)

b.ResetTimer()
for i := 0; i < b.N; i++ {
volume.Labels["testkey1"] = "testval" + strconv.Itoa(i)
psBench.SaveVolumeMetadata(volume)
}
}
3 changes: 3 additions & 0 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ import:
version: v0.1.0
- package: github.com/akutz/golf
ref: v0.1.1
- package: github.com/akutz/go-bindata
ref: feature/md5checksum
vcs: git

- package: github.com/docker/libkv
- package: github.com/boltdb/bolt
Expand Down

0 comments on commit b14719a

Please sign in to comment.