Merge pull request #16 from coreos/plot

*: clean up analyze command
This commit is contained in:
Gyu-Ho Lee 2016-04-01 03:07:43 -07:00
commit acf7d8f5f8
52 changed files with 1736 additions and 1286 deletions

98
Godeps/Godeps.json generated
View File

@ -25,38 +25,38 @@
},
{
"ImportPath": "github.com/coreos/etcd/client",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/coreos/etcd/clientv3",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/coreos/etcd/pkg/pathutil",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/coreos/etcd/pkg/types",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/coreos/etcd/storage/storagepb",
"Comment": "v2.3.0-172-g93c3f92",
"Rev": "93c3f920ca5443089fab9b45eb470ffc46a5170c"
"Comment": "v2.3.0-191-g307cb51",
"Rev": "307cb5167c936f65714d30da33b22157c4d011e7"
},
{
"ImportPath": "github.com/dustin/go-humanize",
@ -99,7 +99,7 @@
},
{
"ImportPath": "github.com/golang/protobuf/proto",
"Rev": "8d92cf5fc15a4382f8964b08e1f42a75c0591aa3"
"Rev": "dda510ac0fd43b39770f22ac6260eb91d377bce3"
},
{
"ImportPath": "github.com/gonum/floats",
@ -213,7 +213,7 @@
},
{
"ImportPath": "github.com/spf13/cobra",
"Rev": "c678ff029ee250b65714e518f4f5c5cb934955de"
"Rev": "b0d571e7d5f7c0dca407fa86567e6297c4776564"
},
{
"ImportPath": "github.com/spf13/pflag",
@ -225,71 +225,71 @@
},
{
"ImportPath": "golang.org/x/image/draw",
"Rev": "f1e9747265419bad9a8f6c68d4094e911874346d"
"Rev": "00fe24ef7be9c01d8b3e59b7ccbdbc7a9b7ff4b6"
},
{
"ImportPath": "golang.org/x/image/font",
"Rev": "f1e9747265419bad9a8f6c68d4094e911874346d"
"Rev": "00fe24ef7be9c01d8b3e59b7ccbdbc7a9b7ff4b6"
},
{
"ImportPath": "golang.org/x/image/math/f64",
"Rev": "f1e9747265419bad9a8f6c68d4094e911874346d"
"Rev": "00fe24ef7be9c01d8b3e59b7ccbdbc7a9b7ff4b6"
},
{
"ImportPath": "golang.org/x/image/math/fixed",
"Rev": "f1e9747265419bad9a8f6c68d4094e911874346d"
"Rev": "00fe24ef7be9c01d8b3e59b7ccbdbc7a9b7ff4b6"
},
{
"ImportPath": "golang.org/x/image/tiff",
"Rev": "f1e9747265419bad9a8f6c68d4094e911874346d"
"Rev": "00fe24ef7be9c01d8b3e59b7ccbdbc7a9b7ff4b6"
},
{
"ImportPath": "golang.org/x/image/tiff/lzw",
"Rev": "f1e9747265419bad9a8f6c68d4094e911874346d"
"Rev": "00fe24ef7be9c01d8b3e59b7ccbdbc7a9b7ff4b6"
},
{
"ImportPath": "golang.org/x/net/context",
"Rev": "991d3e32f76f19ee6d9caadb3a22eae8d23315f7"
"Rev": "3e8a7b0329d536af18e227bb21b6da4d1dbbe180"
},
{
"ImportPath": "golang.org/x/net/context/ctxhttp",
"Rev": "991d3e32f76f19ee6d9caadb3a22eae8d23315f7"
"Rev": "3e8a7b0329d536af18e227bb21b6da4d1dbbe180"
},
{
"ImportPath": "golang.org/x/net/http2",
"Rev": "991d3e32f76f19ee6d9caadb3a22eae8d23315f7"
"Rev": "3e8a7b0329d536af18e227bb21b6da4d1dbbe180"
},
{
"ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "991d3e32f76f19ee6d9caadb3a22eae8d23315f7"
"Rev": "3e8a7b0329d536af18e227bb21b6da4d1dbbe180"
},
{
"ImportPath": "golang.org/x/net/internal/timeseries",
"Rev": "991d3e32f76f19ee6d9caadb3a22eae8d23315f7"
"Rev": "3e8a7b0329d536af18e227bb21b6da4d1dbbe180"
},
{
"ImportPath": "golang.org/x/net/trace",
"Rev": "991d3e32f76f19ee6d9caadb3a22eae8d23315f7"
"Rev": "3e8a7b0329d536af18e227bb21b6da4d1dbbe180"
},
{
"ImportPath": "golang.org/x/oauth2",
"Rev": "2897dcade18a126645f1368de827f1e613a60049"
"Rev": "33fa30fe45020622640e947917fd1fc4c81e3dce"
},
{
"ImportPath": "golang.org/x/oauth2/google",
"Rev": "2897dcade18a126645f1368de827f1e613a60049"
"Rev": "33fa30fe45020622640e947917fd1fc4c81e3dce"
},
{
"ImportPath": "golang.org/x/oauth2/internal",
"Rev": "2897dcade18a126645f1368de827f1e613a60049"
"Rev": "33fa30fe45020622640e947917fd1fc4c81e3dce"
},
{
"ImportPath": "golang.org/x/oauth2/jws",
"Rev": "2897dcade18a126645f1368de827f1e613a60049"
"Rev": "33fa30fe45020622640e947917fd1fc4c81e3dce"
},
{
"ImportPath": "golang.org/x/oauth2/jwt",
"Rev": "2897dcade18a126645f1368de827f1e613a60049"
"Rev": "33fa30fe45020622640e947917fd1fc4c81e3dce"
},
{
"ImportPath": "golang.org/x/sys/unix",
@ -345,67 +345,67 @@
},
{
"ImportPath": "google.golang.org/cloud",
"Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88"
"Rev": "8a7fce32d2cdf2d4e19068ecc53164b973b3e958"
},
{
"ImportPath": "google.golang.org/cloud/compute/metadata",
"Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88"
"Rev": "8a7fce32d2cdf2d4e19068ecc53164b973b3e958"
},
{
"ImportPath": "google.golang.org/cloud/internal",
"Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88"
"Rev": "8a7fce32d2cdf2d4e19068ecc53164b973b3e958"
},
{
"ImportPath": "google.golang.org/cloud/internal/opts",
"Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88"
"Rev": "8a7fce32d2cdf2d4e19068ecc53164b973b3e958"
},
{
"ImportPath": "google.golang.org/cloud/internal/transport",
"Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88"
"Rev": "8a7fce32d2cdf2d4e19068ecc53164b973b3e958"
},
{
"ImportPath": "google.golang.org/cloud/storage",
"Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88"
"Rev": "8a7fce32d2cdf2d4e19068ecc53164b973b3e958"
},
{
"ImportPath": "google.golang.org/grpc",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/codes",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/credentials",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/credentials/oauth",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/grpclog",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/internal",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/metadata",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/naming",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/peer",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "google.golang.org/grpc/transport",
"Rev": "9e3a674ceba65708273cf1cd8e71a1bdce68107b"
"Rev": "68dadb4d0004911b9148648839bd6f5ba0f5e15d"
},
{
"ImportPath": "gopkg.in/yaml.v2",

File diff suppressed because it is too large Load Diff

72
analyze/config.go Normal file
View File

@ -0,0 +1,72 @@
// Copyright 2016 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package analyze
import (
"io/ioutil"
"gopkg.in/yaml.v2"
)
type Config struct {
Step1 []struct {
DataPathList []string `yaml:"data_path_list"`
DataBenchmarkPath string `yaml:"data_benchmark_path"`
OutputPath string `yaml:"output_path"`
} `yaml:"step1"`
Step2 []struct {
DataList []struct {
Path string `yaml:"path"`
Name string `yaml:"name"`
} `yaml:"data_list"`
OutputPath string `yaml:"output_path"`
} `yaml:"step2"`
Step3 []struct {
DataPath string `yaml:"data_path"`
Title string `yaml:"title"`
PlotList []struct {
Lines []struct {
Column string `yaml:"column"`
Legend string `yaml:"legend"`
} `yaml:"lines"`
XAxis string `yaml:"x_axis"`
YAxis string `yaml:"y_axis"`
OutputPathList []string `yaml:"output_path_list"`
} `yaml:"plot_list"`
} `yaml:"step3"`
Step4 struct {
Preface string `yaml:"preface"`
Results []struct {
Title string `yaml:"title"`
Images []string `yaml:"images"`
} `yaml:"results"`
OutputPath string `yaml:"output_path"`
} `yaml:"step4"`
}
func ReadConfig(fpath string) (Config, error) {
bts, err := ioutil.ReadFile(fpath)
if err != nil {
return Config{}, err
}
rs := Config{}
if err := yaml.Unmarshal(bts, &rs); err != nil {
return Config{}, err
}
return rs, nil
}

45
analyze/config_test.go Normal file
View File

@ -0,0 +1,45 @@
// Copyright 2016 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package analyze
import "testing"
func TestReadConfig(t *testing.T) {
c, err := ReadConfig("test.yaml")
if err != nil {
t.Fatal(err)
}
if c.Step1[0].DataPathList[0] != "bench-20160330/bench-01-etcd-1-monitor.csv" {
t.Fatalf("unexpected %s", c.Step1[0].DataPathList[0])
}
if c.Step2[0].DataList[0].Path != "bench-20160330/bench-01-etcd-aggregated.csv" {
t.Fatalf("unexpected %s", c.Step2[0].DataList[0].Path)
}
if c.Step3[0].PlotList[0].Lines[0].Column != "avg_latency_ms_etcd_v3" {
t.Fatalf("unexpected %s", c.Step3[0].PlotList[0].Lines[0].Column)
}
if c.Step3[0].PlotList[0].YAxis != "Latency(millisecond)" {
t.Fatalf("unexpected %s", c.Step3[0].PlotList[0].YAxis)
}
if c.Step3[0].PlotList[0].OutputPathList[1] != "bench-20160330/bench-01-avg-latency-ms.png" {
t.Fatalf("unexpected %s", c.Step3[0].PlotList[0].OutputPathList[1])
}
if c.Step4.Results[0].Images[2] != "bench-20160330/bench-01-avg-cpu.png" {
t.Fatalf("unexpected %s", c.Step4.Results[0].Images[2])
}
if c.Step4.OutputPath != "bench-20160330/README.md" {
t.Fatalf("unexpected %s", c.Step4.OutputPath)
}
}

View File

@ -1,117 +0,0 @@
package analyze
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"sort"
"strings"
"github.com/spf13/cobra"
)
var (
ReadmeCommand = &cobra.Command{
Use: "readme",
Short: "Generates README markdown.",
RunE: ReadmeCommandFunc,
}
readmeDir string
readmePrefacePath string
)
func init() {
ReadmeCommand.PersistentFlags().StringVarP(&readmeDir, "readme-dir", "d", "", "Directory path to generate README.")
ReadmeCommand.PersistentFlags().StringVarP(&readmePrefacePath, "readme-preface", "t", "", "README template file to preface.")
}
func ReadmeCommandFunc(cmd *cobra.Command, args []string) error {
bts, err := ioutil.ReadFile(readmePrefacePath)
if err != nil {
return err
}
buf := new(bytes.Buffer)
buf.WriteString(string(bts))
buf.WriteString("\n\n\n")
buf.WriteString("<br><br><hr>\n##### Results")
buf.WriteString("\n\n")
paths, err := walkExt(readmeDir, ".png") // svg not working
if err != nil {
return err
}
for _, path := range paths {
buf.WriteString(fmt.Sprintf("![%s](./%s)\n\n", filepath.Base(path), filepath.Base(path)))
}
return toFile(buf.String(), filepath.Join(readmeDir, "README.md"))
}
// walkExt returns all FileInfos with specific extension.
func walkExt(targetDir, ext string) ([]string, error) {
rmap := make(map[string]struct{})
visit := func(path string, f os.FileInfo, err error) error {
if f != nil {
if !f.IsDir() {
if filepath.Ext(path) == ext {
if !filepath.HasPrefix(path, ".") && !strings.Contains(path, "/.") {
wd, err := os.Getwd()
if err != nil {
return err
}
thepath := filepath.Join(wd, strings.Replace(path, wd, "", -1))
rmap[thepath] = struct{}{}
}
}
}
}
return nil
}
err := filepath.Walk(targetDir, visit)
if err != nil {
return nil, err
}
rs := []string{}
for k := range rmap {
rs = append(rs, k)
}
sort.Strings(rs)
// ns := make([]string, len(rs))
// for i := range rs {
// // latency, throughput, cpu, memory
// if strings.Contains(rs[i], "latency") {
// nidx := i/4 + 0
// ns[nidx] = rs[i]
// } else if strings.Contains(rs[i], "throughput") {
// nidx := i/4 + 1
// ns[nidx] = rs[i]
// } else if strings.Contains(rs[i], "cpu") {
// nidx := i/4 + 2
// ns[nidx] = rs[i]
// } else if strings.Contains(rs[i], "memory") {
// nidx := i/4 + 3
// ns[nidx] = rs[i]
// }
// }
return rs, nil
}
func toFile(txt, fpath string) error {
f, err := os.OpenFile(fpath, os.O_RDWR|os.O_TRUNC, 0777)
if err != nil {
f, err = os.Create(fpath)
if err != nil {
return err
}
}
defer f.Close()
if _, err := f.WriteString(txt); err != nil {
return err
}
return nil
}

160
analyze/test.yaml Normal file
View File

@ -0,0 +1,160 @@
step1:
- data_path_list:
- bench-20160330/bench-01-etcd-1-monitor.csv
- bench-20160330/bench-01-etcd-2-monitor.csv
- bench-20160330/bench-01-etcd-3-monitor.csv
data_benchmark_path: bench-20160330/bench-01-etcd-timeseries.csv
output_path: bench-20160330/bench-01-etcd-aggregated.csv
- data_path_list:
- bench-20160330/bench-01-zk-1-monitor.csv
- bench-20160330/bench-01-zk-2-monitor.csv
- bench-20160330/bench-01-zk-3-monitor.csv
data_benchmark_path: bench-20160330/bench-01-zk-timeseries.csv
output_path: bench-20160330/bench-01-zk-aggregated.csv
- data_path_list:
- bench-20160330/bench-02-etcd-1-monitor.csv
- bench-20160330/bench-02-etcd-2-monitor.csv
- bench-20160330/bench-02-etcd-3-monitor.csv
data_benchmark_path: bench-20160330/bench-02-etcd-timeseries.csv
output_path: bench-20160330/bench-02-etcd-aggregated.csv
- data_path_list:
- bench-20160330/bench-02-zk-1-monitor.csv
- bench-20160330/bench-02-zk-2-monitor.csv
- bench-20160330/bench-02-zk-3-monitor.csv
data_benchmark_path: bench-20160330/bench-02-zk-timeseries.csv
output_path: bench-20160330/bench-02-zk-aggregated.csv
step2:
- data_list:
- path: bench-20160330/bench-01-etcd-aggregated.csv
name: etcd_v3
- path: bench-20160330/bench-01-zk-aggregated.csv
name: zookeeper_3.4.8
output_path: bench-20160330/bench-01-all-aggregated.csv
- data_list:
- path: bench-20160330/bench-02-etcd-aggregated.csv
name: etcd_v3
- path: bench-20160330/bench-02-zk-aggregated.csv
name: zookeeper_3.4.8
output_path: bench-20160330/bench-02-all-aggregated.csv
step3:
- data_path: bench-20160330/bench-01-all-aggregated.csv
title: Write 300K keys, 1 client, key 64 bytes, value 256 bytes
plot_list:
- lines:
- column: avg_latency_ms_etcd_v3
legend: etcd v3
- column: avg_latency_ms_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- bench-20160330/bench-01-avg-latency-ms.svg
- bench-20160330/bench-01-avg-latency-ms.png
- lines:
- column: throughput_etcd_v3
legend: etcd v3
- column: throughput_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Throughput
output_path_list:
- bench-20160330/bench-01-throughput.svg
- bench-20160330/bench-01-throughput.png
- lines:
- column: avg_cpu_etcd_v3
legend: etcd v3
- column: avg_cpu_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: CPU
output_path_list:
- bench-20160330/bench-01-avg-cpu.svg
- bench-20160330/bench-01-avg-cpu.png
- lines:
- column: avg_memory_mb_etcd_v3
legend: etcd v3
- column: avg_memory_mb_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- bench-20160330/bench-01-avg-memory.svg
- bench-20160330/bench-01-avg-memory.png
- data_path: bench-20160330/bench-02-all-aggregated.csv
title: Write 3M keys, 1K clients, key 64 bytes, value 256 bytes
plot_list:
- lines:
- column: avg_latency_ms_etcd_v3
legend: etcd v3
- column: avg_latency_ms_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- bench-20160330/bench-02-avg-latency-ms.svg
- bench-20160330/bench-02-avg-latency-ms.png
- lines:
- column: throughput_etcd_v3
legend: etcd v3
- column: throughput_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Throughput
output_path_list:
- bench-20160330/bench-02-throughput.svg
- bench-20160330/bench-02-throughput.png
- lines:
- column: avg_cpu_etcd_v3
legend: etcd v3
- column: avg_cpu_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: CPU
output_path_list:
- bench-20160330/bench-02-avg-cpu.svg
- bench-20160330/bench-02-avg-cpu.png
- lines:
- column: avg_memory_mb_etcd_v3
legend: etcd v3
- column: avg_memory_mb_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- bench-20160330/bench-02-avg-memory.svg
- bench-20160330/bench-02-avg-memory.png
step4:
preface: |
- Google Cloud Compute Engine
- 8 vCPUs + 16GB Memory + 375GB local SSD (SCSI)
- Ubuntu 15.10
- Go 1.6 with etcd master branch as of testing date
- Java 8 with Zookeeper 3.4.8(current)
- Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
- Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
results:
- title: Write 300K keys, 1 client, key 64 bytes, value 256 bytes
images:
- bench-20160330/bench-01-avg-latency-ms.png
- bench-20160330/bench-01-throughput.png
- bench-20160330/bench-01-avg-cpu.png
- bench-20160330/bench-01-avg-memory.png
- title: Write 3M keys, 1K clients, key 64 bytes, value 256 bytes
images:
- bench-20160330/bench-02-avg-latency-ms.png
- bench-20160330/bench-02-throughput.png
- bench-20160330/bench-02-avg-cpu.png
- bench-20160330/bench-02-avg-memory.png
output_path: bench-20160330/README.md

View File

@ -1,105 +0,0 @@
#!/usr/bin/env bash
gsutil -m cp -R gs://bench-20160325/ .
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160325/bench-01-consul-aggregated.csv --bench-file-path=bench-20160325/bench-01-consul-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-01-consul-1-monitor.csv,bench-20160325/bench-01-consul-2-monitor.csv,bench-20160325/bench-01-consul-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-01-etcd-aggregated.csv --bench-file-path=bench-20160325/bench-01-etcd-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-01-etcd-1-monitor.csv,bench-20160325/bench-01-etcd-2-monitor.csv,bench-20160325/bench-01-etcd-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-01-etcd2-aggregated.csv --bench-file-path=bench-20160325/bench-01-etcd2-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-01-etcd2-1-monitor.csv,bench-20160325/bench-01-etcd2-2-monitor.csv,bench-20160325/bench-01-etcd2-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-01-zk-aggregated.csv --bench-file-path=bench-20160325/bench-01-zk-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-01-zk-1-monitor.csv,bench-20160325/bench-01-zk-2-monitor.csv,bench-20160325/bench-01-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160325/bench-01-all-aggregated.csv --aggregated-file-paths=bench-20160325/bench-01-consul-aggregated.csv,bench-20160325/bench-01-etcd-aggregated.csv,bench-20160325/bench-01-etcd2-aggregated.csv,bench-20160325/bench-01-zk-aggregated.csv
# plot
IMAGE_TITLE="Write 300K keys, 1 client, key 64 bytes, value 256 bytes"
dbtester analyze --output=bench-20160325/bench-01-plot --image-format=png --file-to-plot=bench-20160325/bench-01-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160325/bench-01-plot --image-format=svg --file-to-plot=bench-20160325/bench-01-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160325/bench-02-consul-aggregated.csv --bench-file-path=bench-20160325/bench-02-consul-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-02-consul-1-monitor.csv,bench-20160325/bench-02-consul-2-monitor.csv,bench-20160325/bench-02-consul-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-02-etcd-aggregated.csv --bench-file-path=bench-20160325/bench-02-etcd-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-02-etcd-1-monitor.csv,bench-20160325/bench-02-etcd-2-monitor.csv,bench-20160325/bench-02-etcd-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-02-etcd2-aggregated.csv --bench-file-path=bench-20160325/bench-02-etcd2-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-02-etcd2-1-monitor.csv,bench-20160325/bench-02-etcd2-2-monitor.csv,bench-20160325/bench-02-etcd2-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-02-zk-aggregated.csv --bench-file-path=bench-20160325/bench-02-zk-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-02-zk-1-monitor.csv,bench-20160325/bench-02-zk-2-monitor.csv,bench-20160325/bench-02-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160325/bench-02-all-aggregated.csv --aggregated-file-paths=bench-20160325/bench-02-consul-aggregated.csv,bench-20160325/bench-02-etcd-aggregated.csv,bench-20160325/bench-02-etcd2-aggregated.csv,bench-20160325/bench-02-zk-aggregated.csv
# plot
IMAGE_TITLE="Write 1M keys, 10 clients, key 64 bytes, value 256 bytes"
dbtester analyze --output=bench-20160325/bench-02-plot --image-format=png --file-to-plot=bench-20160325/bench-02-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160325/bench-02-plot --image-format=svg --file-to-plot=bench-20160325/bench-02-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160325/bench-03-consul-aggregated.csv --bench-file-path=bench-20160325/bench-03-consul-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-03-consul-1-monitor.csv,bench-20160325/bench-03-consul-2-monitor.csv,bench-20160325/bench-03-consul-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-03-etcd-aggregated.csv --bench-file-path=bench-20160325/bench-03-etcd-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-03-etcd-1-monitor.csv,bench-20160325/bench-03-etcd-2-monitor.csv,bench-20160325/bench-03-etcd-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-03-etcd2-aggregated.csv --bench-file-path=bench-20160325/bench-03-etcd2-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-03-etcd2-1-monitor.csv,bench-20160325/bench-03-etcd2-2-monitor.csv,bench-20160325/bench-03-etcd2-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-03-zk-aggregated.csv --bench-file-path=bench-20160325/bench-03-zk-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-03-zk-1-monitor.csv,bench-20160325/bench-03-zk-2-monitor.csv,bench-20160325/bench-03-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160325/bench-03-all-aggregated.csv --aggregated-file-paths=bench-20160325/bench-03-consul-aggregated.csv,bench-20160325/bench-03-etcd-aggregated.csv,bench-20160325/bench-03-etcd2-aggregated.csv,bench-20160325/bench-03-zk-aggregated.csv
# plot
IMAGE_TITLE="Write 3M keys, 500 clients, key 64 bytes, value 256 bytes"
dbtester analyze --output=bench-20160325/bench-03-plot --image-format=png --file-to-plot=bench-20160325/bench-03-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160325/bench-03-plot --image-format=svg --file-to-plot=bench-20160325/bench-03-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160325/bench-04-consul-aggregated.csv --bench-file-path=bench-20160325/bench-04-consul-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-04-consul-1-monitor.csv,bench-20160325/bench-04-consul-2-monitor.csv,bench-20160325/bench-04-consul-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-04-etcd-aggregated.csv --bench-file-path=bench-20160325/bench-04-etcd-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-04-etcd-1-monitor.csv,bench-20160325/bench-04-etcd-2-monitor.csv,bench-20160325/bench-04-etcd-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-04-etcdmulti-aggregated.csv --bench-file-path=bench-20160325/bench-04-etcdmulti-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-04-etcdmulti-1-monitor.csv,bench-20160325/bench-04-etcdmulti-2-monitor.csv,bench-20160325/bench-04-etcdmulti-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-04-etcd2-aggregated.csv --bench-file-path=bench-20160325/bench-04-etcd2-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-04-etcd2-1-monitor.csv,bench-20160325/bench-04-etcd2-2-monitor.csv,bench-20160325/bench-04-etcd2-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-04-zk-aggregated.csv --bench-file-path=bench-20160325/bench-04-zk-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-04-zk-1-monitor.csv,bench-20160325/bench-04-zk-2-monitor.csv,bench-20160325/bench-04-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160325/bench-04-all-aggregated.csv --aggregated-file-paths=bench-20160325/bench-04-consul-aggregated.csv,bench-20160325/bench-04-etcd-aggregated.csv,bench-20160325/bench-04-etcdmulti-aggregated.csv,bench-20160325/bench-04-etcd2-aggregated.csv,bench-20160325/bench-04-zk-aggregated.csv
# plot
IMAGE_TITLE="Write 3M keys, 1000 clients, key 64 bytes, value 256 bytes"
MULTI_TAG_TITLE="100-conns-1k-clients"
dbtester analyze --output=bench-20160325/bench-04-plot --image-format=png --file-to-plot=bench-20160325/bench-04-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)" --multi-tag-title="$(echo $MULTI_TAG_TITLE)"
dbtester analyze --output=bench-20160325/bench-04-plot --image-format=svg --file-to-plot=bench-20160325/bench-04-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)" --multi-tag-title="$(echo $MULTI_TAG_TITLE)"
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160325/bench-05-consul-aggregated.csv --bench-file-path=bench-20160325/bench-05-consul-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-05-consul-1-monitor.csv,bench-20160325/bench-05-consul-2-monitor.csv,bench-20160325/bench-05-consul-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-05-etcd-aggregated.csv --bench-file-path=bench-20160325/bench-05-etcd-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-05-etcd-1-monitor.csv,bench-20160325/bench-05-etcd-2-monitor.csv,bench-20160325/bench-05-etcd-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-05-etcd2-aggregated.csv --bench-file-path=bench-20160325/bench-05-etcd2-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-05-etcd2-1-monitor.csv,bench-20160325/bench-05-etcd2-2-monitor.csv,bench-20160325/bench-05-etcd2-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-05-zk-aggregated.csv --bench-file-path=bench-20160325/bench-05-zk-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-05-zk-1-monitor.csv,bench-20160325/bench-05-zk-2-monitor.csv,bench-20160325/bench-05-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160325/bench-05-all-aggregated.csv --aggregated-file-paths=bench-20160325/bench-05-consul-aggregated.csv,bench-20160325/bench-05-etcd-aggregated.csv,bench-20160325/bench-05-etcd2-aggregated.csv,bench-20160325/bench-05-zk-aggregated.csv
# plot
IMAGE_TITLE="Read 1M keys, 1 client, key 64 bytes, value 1 kb"
dbtester analyze --output=bench-20160325/bench-05-plot --image-format=png --file-to-plot=bench-20160325/bench-05-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160325/bench-05-plot --image-format=svg --file-to-plot=bench-20160325/bench-05-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160325/bench-06-consul-aggregated.csv --bench-file-path=bench-20160325/bench-06-consul-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-06-consul-1-monitor.csv,bench-20160325/bench-06-consul-2-monitor.csv,bench-20160325/bench-06-consul-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-06-etcd-aggregated.csv --bench-file-path=bench-20160325/bench-06-etcd-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-06-etcd-1-monitor.csv,bench-20160325/bench-06-etcd-2-monitor.csv,bench-20160325/bench-06-etcd-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-06-etcd2-aggregated.csv --bench-file-path=bench-20160325/bench-06-etcd2-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-06-etcd2-1-monitor.csv,bench-20160325/bench-06-etcd2-2-monitor.csv,bench-20160325/bench-06-etcd2-3-monitor.csv
dbtester analyze --output=bench-20160325/bench-06-zk-aggregated.csv --bench-file-path=bench-20160325/bench-06-zk-timeseries.csv --monitor-data-file-paths=bench-20160325/bench-06-zk-1-monitor.csv,bench-20160325/bench-06-zk-2-monitor.csv,bench-20160325/bench-06-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160325/bench-06-all-aggregated.csv --aggregated-file-paths=bench-20160325/bench-06-consul-aggregated.csv,bench-20160325/bench-06-etcd-aggregated.csv,bench-20160325/bench-06-etcd2-aggregated.csv,bench-20160325/bench-06-zk-aggregated.csv
# plot
IMAGE_TITLE="Read 1M keys, 1000 clients, key 64 bytes, value 1 kb"
dbtester analyze --output=bench-20160325/bench-06-plot --image-format=png --file-to-plot=bench-20160325/bench-06-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160325/bench-06-plot --image-format=svg --file-to-plot=bench-20160325/bench-06-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# generate README
dbtester readme --readme-dir=bench-20160325 --readme-preface=README_template

View File

@ -1,20 +0,0 @@
#!/usr/bin/env bash
gsutil -m cp -R gs://bench-20160328/ .
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160328/bench-01-etcd-aggregated.csv --bench-file-path=bench-20160328/bench-01-etcd-timeseries.csv --monitor-data-file-paths=bench-20160328/bench-01-etcd-1-monitor.csv,bench-20160328/bench-01-etcd-2-monitor.csv,bench-20160328/bench-01-etcd-3-monitor.csv
dbtester analyze --output=bench-20160328/bench-02-etcd-aggregated.csv --bench-file-path=bench-20160328/bench-02-etcd-timeseries.csv --monitor-data-file-paths=bench-20160328/bench-02-etcd-1-monitor.csv,bench-20160328/bench-02-etcd-2-monitor.csv,bench-20160328/bench-02-etcd-3-monitor.csv
# create agg/agg
dbtester analyze --same-database --output=bench-20160328/bench-all-aggregated.csv --aggregated-file-paths=bench-20160328/bench-01-etcd-aggregated.csv,bench-20160328/bench-02-etcd-aggregated.csv
# plot
IMAGE_TITLE="Write 3M keys, 700 conns, 1500 clients, key 64 bytes, value 256 bytes"
dbtester analyze --same-database --output=bench-20160328/bench-plot --image-format=png --file-to-plot=bench-20160328/bench-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --same-database --output=bench-20160328/bench-plot --image-format=svg --file-to-plot=bench-20160328/bench-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# generate README
dbtester readme --readme-dir=bench-20160328 --readme-preface=README_template

View File

@ -1,33 +0,0 @@
#!/usr/bin/env bash
gsutil -m cp -R gs://bench-20160330/ .
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160330/bench-01-etcd-aggregated.csv --bench-file-path=bench-20160330/bench-01-etcd-timeseries.csv --monitor-data-file-paths=bench-20160330/bench-01-etcd-1-monitor.csv,bench-20160330/bench-01-etcd-2-monitor.csv,bench-20160330/bench-01-etcd-3-monitor.csv
dbtester analyze --output=bench-20160330/bench-01-zk-aggregated.csv --bench-file-path=bench-20160330/bench-01-zk-timeseries.csv --monitor-data-file-paths=bench-20160330/bench-01-zk-1-monitor.csv,bench-20160330/bench-01-zk-2-monitor.csv,bench-20160330/bench-01-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160330/bench-01-all-aggregated.csv --aggregated-file-paths=bench-20160330/bench-01-etcd-aggregated.csv,bench-20160330/bench-01-zk-aggregated.csv
# plot
IMAGE_TITLE="Write 300K keys, 1 client, key 64 bytes, value 256 bytes"
dbtester analyze --output=bench-20160330/bench-01-plot --image-format=png --file-to-plot=bench-20160330/bench-01-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160330/bench-01-plot --image-format=svg --file-to-plot=bench-20160330/bench-01-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# create aggregated csv files
dbtester analyze --output=bench-20160330/bench-02-etcd-aggregated.csv --bench-file-path=bench-20160330/bench-02-etcd-timeseries.csv --monitor-data-file-paths=bench-20160330/bench-02-etcd-1-monitor.csv,bench-20160330/bench-02-etcd-2-monitor.csv,bench-20160330/bench-02-etcd-3-monitor.csv
dbtester analyze --output=bench-20160330/bench-02-zk-aggregated.csv --bench-file-path=bench-20160330/bench-02-zk-timeseries.csv --monitor-data-file-paths=bench-20160330/bench-02-zk-1-monitor.csv,bench-20160330/bench-02-zk-2-monitor.csv,bench-20160330/bench-02-zk-3-monitor.csv
# create agg/agg
dbtester analyze --output=bench-20160330/bench-02-all-aggregated.csv --aggregated-file-paths=bench-20160330/bench-02-etcd-aggregated.csv,bench-20160330/bench-02-zk-aggregated.csv
# plot
IMAGE_TITLE="Write 3M keys, 1K clients, key 64 bytes, value 256 bytes"
dbtester analyze --output=bench-20160330/bench-02-plot --image-format=png --file-to-plot=bench-20160330/bench-02-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
dbtester analyze --output=bench-20160330/bench-02-plot --image-format=svg --file-to-plot=bench-20160330/bench-02-all-aggregated.csv --image-title="$(echo $IMAGE_TITLE)"
#######################################################################
# generate README
dbtester readme --readme-dir=bench-20160330 --readme-preface=README_template

View File

@ -0,0 +1,160 @@
step1:
- data_path_list:
- bench-20160330/bench-01-etcd-1-monitor.csv
- bench-20160330/bench-01-etcd-2-monitor.csv
- bench-20160330/bench-01-etcd-3-monitor.csv
data_benchmark_path: bench-20160330/bench-01-etcd-timeseries.csv
output_path: bench-20160330/bench-01-etcd-aggregated.csv
- data_path_list:
- bench-20160330/bench-01-zk-1-monitor.csv
- bench-20160330/bench-01-zk-2-monitor.csv
- bench-20160330/bench-01-zk-3-monitor.csv
data_benchmark_path: bench-20160330/bench-01-zk-timeseries.csv
output_path: bench-20160330/bench-01-zk-aggregated.csv
- data_path_list:
- bench-20160330/bench-02-etcd-1-monitor.csv
- bench-20160330/bench-02-etcd-2-monitor.csv
- bench-20160330/bench-02-etcd-3-monitor.csv
data_benchmark_path: bench-20160330/bench-02-etcd-timeseries.csv
output_path: bench-20160330/bench-02-etcd-aggregated.csv
- data_path_list:
- bench-20160330/bench-02-zk-1-monitor.csv
- bench-20160330/bench-02-zk-2-monitor.csv
- bench-20160330/bench-02-zk-3-monitor.csv
data_benchmark_path: bench-20160330/bench-02-zk-timeseries.csv
output_path: bench-20160330/bench-02-zk-aggregated.csv
step2:
- data_list:
- path: bench-20160330/bench-01-etcd-aggregated.csv
name: etcd_v3
- path: bench-20160330/bench-01-zk-aggregated.csv
name: zookeeper_3.4.8
output_path: bench-20160330/bench-01-all-aggregated.csv
- data_list:
- path: bench-20160330/bench-02-etcd-aggregated.csv
name: etcd_v3
- path: bench-20160330/bench-02-zk-aggregated.csv
name: zookeeper_3.4.8
output_path: bench-20160330/bench-02-all-aggregated.csv
step3:
- data_path: bench-20160330/bench-01-all-aggregated.csv
title: Write 300K keys, 1 client, key 64 bytes, value 256 bytes
plot_list:
- lines:
- column: avg_latency_ms_etcd_v3
legend: etcd v3
- column: avg_latency_ms_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- bench-20160330/bench-01-avg-latency-ms.svg
- bench-20160330/bench-01-avg-latency-ms.png
- lines:
- column: throughput_etcd_v3
legend: etcd v3
- column: throughput_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Throughput
output_path_list:
- bench-20160330/bench-01-throughput.svg
- bench-20160330/bench-01-throughput.png
- lines:
- column: avg_cpu_etcd_v3
legend: etcd v3
- column: avg_cpu_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: CPU
output_path_list:
- bench-20160330/bench-01-avg-cpu.svg
- bench-20160330/bench-01-avg-cpu.png
- lines:
- column: avg_memory_mb_etcd_v3
legend: etcd v3
- column: avg_memory_mb_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- bench-20160330/bench-01-avg-memory.svg
- bench-20160330/bench-01-avg-memory.png
- data_path: bench-20160330/bench-02-all-aggregated.csv
title: Write 3M keys, 1K clients, key 64 bytes, value 256 bytes
plot_list:
- lines:
- column: avg_latency_ms_etcd_v3
legend: etcd v3
- column: avg_latency_ms_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- bench-20160330/bench-02-avg-latency-ms.svg
- bench-20160330/bench-02-avg-latency-ms.png
- lines:
- column: throughput_etcd_v3
legend: etcd v3
- column: throughput_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Throughput
output_path_list:
- bench-20160330/bench-02-throughput.svg
- bench-20160330/bench-02-throughput.png
- lines:
- column: avg_cpu_etcd_v3
legend: etcd v3
- column: avg_cpu_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: CPU
output_path_list:
- bench-20160330/bench-02-avg-cpu.svg
- bench-20160330/bench-02-avg-cpu.png
- lines:
- column: avg_memory_mb_etcd_v3
legend: etcd v3
- column: avg_memory_mb_zookeeper_3.4.8
legend: Zookeeper 3.4.8
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- bench-20160330/bench-02-avg-memory.svg
- bench-20160330/bench-02-avg-memory.png
step4:
preface: |
- Google Cloud Compute Engine
- 8 vCPUs + 16GB Memory + 375GB local SSD (SCSI)
- Ubuntu 15.10
- Go 1.6 with etcd master branch as of testing date
- Java 8 with Zookeeper 3.4.8(current)
- Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
- Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
results:
- title: Write 300K keys, 1 client, key 64 bytes, value 256 bytes
images:
- bench-20160330/bench-01-avg-latency-ms.png
- bench-20160330/bench-01-throughput.png
- bench-20160330/bench-01-avg-cpu.png
- bench-20160330/bench-01-avg-memory.png
- title: Write 3M keys, 1K clients, key 64 bytes, value 256 bytes
images:
- bench-20160330/bench-02-avg-latency-ms.png
- bench-20160330/bench-02-throughput.png
- bench-20160330/bench-02-avg-cpu.png
- bench-20160330/bench-02-avg-memory.png
output_path: bench-20160330/README.md

View File

@ -1,31 +1,36 @@
#### Testing environment
- Google Cloud Compute Engine
- 8 vCPUs + 16GB Memory + 375GB local SSD (SCSI)
- Ubuntu 15.10
- Go 1.6 with etcd master branch as of testing date
- Java 8 with Zookeeper 3.4.8(current)
- Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
- Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
- Serialized read
- Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
- Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
<br><br><hr>
##### Results
##### Write 300K keys, 1 client, key 64 bytes, value 256 bytes
![bench-01-plot-avg-latency-ms.png](./bench-01-plot-avg-latency-ms.png)
![bench-01-avg-latency-ms.png](./bench-01-avg-latency-ms.png)
![bench-01-plot-throughput.png](./bench-01-plot-throughput.png)
![bench-01-throughput.png](./bench-01-throughput.png)
![bench-01-plot-avg-cpu.png](./bench-01-plot-avg-cpu.png)
![bench-01-avg-cpu.png](./bench-01-avg-cpu.png)
![bench-01-plot-avg-mem.png](./bench-01-plot-avg-mem.png)
![bench-01-avg-memory.png](./bench-01-avg-memory.png)
![bench-02-plot-avg-latency-ms.png](./bench-02-plot-avg-latency-ms.png)
![bench-02-plot-throughput.png](./bench-02-plot-throughput.png)
![bench-02-plot-avg-cpu.png](./bench-02-plot-avg-cpu.png)
<br><br><hr>
##### Write 3M keys, 1K clients, key 64 bytes, value 256 bytes
![bench-02-avg-latency-ms.png](./bench-02-avg-latency-ms.png)
![bench-02-throughput.png](./bench-02-throughput.png)
![bench-02-avg-cpu.png](./bench-02-avg-cpu.png)
![bench-02-avg-memory.png](./bench-02-avg-memory.png)
![bench-02-plot-avg-mem.png](./bench-02-plot-avg-mem.png)

View File

@ -1,4 +1,4 @@
second,avg_latency_ms_etcd3,throughput_etcd3,cumulative_throughput_etcd3,avg_cpu_etcd3,avg_memory_mb_etcd3,avg_latency_ms_zk,throughput_zk,cumulative_throughput_zk,avg_cpu_zk,avg_memory_mb_zk
second,avg_latency_ms_etcd_v3,throughput_etcd_v3,cumulative_throughput_etcd_v3,avg_cpu_etcd_v3,avg_memory_mb_etcd_v3,avg_latency_ms_zookeeper_3.4.8,throughput_zookeeper_3.4.8,cumulative_throughput_zookeeper_3.4.8,avg_cpu_zookeeper_3.4.8,avg_memory_mb_zookeeper_3.4.8
0,4.428145,31,31,2.60,27.51,7.196191,35,35,2.51,58.08
1,4.885625,204,235,3.35,30.21,4.818989,207,242,3.55,64.69
2,5.044722,198,433,4.03,33.57,4.591267,218,460,4.41,71.21

1 second avg_latency_ms_etcd3 avg_latency_ms_etcd_v3 throughput_etcd3 throughput_etcd_v3 cumulative_throughput_etcd3 cumulative_throughput_etcd_v3 avg_cpu_etcd3 avg_cpu_etcd_v3 avg_memory_mb_etcd3 avg_memory_mb_etcd_v3 avg_latency_ms_zk avg_latency_ms_zookeeper_3.4.8 throughput_zk throughput_zookeeper_3.4.8 cumulative_throughput_zk cumulative_throughput_zookeeper_3.4.8 avg_cpu_zk avg_cpu_zookeeper_3.4.8 avg_memory_mb_zk avg_memory_mb_zookeeper_3.4.8
2 0 4.428145 31 31 2.60 27.51 7.196191 35 35 2.51 58.08
3 1 4.885625 204 235 3.35 30.21 4.818989 207 242 3.55 64.69
4 2 5.044722 198 433 4.03 33.57 4.591267 218 460 4.41 71.21

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -1,4 +1,4 @@
second,avg_latency_ms_etcd3,throughput_etcd3,cumulative_throughput_etcd3,avg_cpu_etcd3,avg_memory_mb_etcd3,avg_latency_ms_zk,throughput_zk,cumulative_throughput_zk,avg_cpu_zk,avg_memory_mb_zk
second,avg_latency_ms_etcd_v3,throughput_etcd_v3,cumulative_throughput_etcd_v3,avg_cpu_etcd_v3,avg_memory_mb_etcd_v3,avg_latency_ms_zookeeper_3.4.8,throughput_zookeeper_3.4.8,cumulative_throughput_zookeeper_3.4.8,avg_cpu_zookeeper_3.4.8,avg_memory_mb_zookeeper_3.4.8
0,47.634867,1537,1537,1.97,35.31,248.768380,66,66,1.22,73.18
1,54.915332,18401,19938,3.24,105.82,40.160378,7435,7501,4.54,153.26
2,57.473158,17283,37221,6.09,126.43,164.553716,9811,17312,6.68,163.66

1 second avg_latency_ms_etcd3 avg_latency_ms_etcd_v3 throughput_etcd3 throughput_etcd_v3 cumulative_throughput_etcd3 cumulative_throughput_etcd_v3 avg_cpu_etcd3 avg_cpu_etcd_v3 avg_memory_mb_etcd3 avg_memory_mb_etcd_v3 avg_latency_ms_zk avg_latency_ms_zookeeper_3.4.8 throughput_zk throughput_zookeeper_3.4.8 cumulative_throughput_zk cumulative_throughput_zookeeper_3.4.8 avg_cpu_zk avg_cpu_zookeeper_3.4.8 avg_memory_mb_zk avg_memory_mb_zookeeper_3.4.8
2 0 47.634867 1537 1537 1.97 35.31 248.768380 66 66 1.22 73.18
3 1 54.915332 18401 19938 3.24 105.82 40.160378 7435 7501 4.54 153.26
4 2 57.473158 17283 37221 6.09 126.43 164.553716 9811 17312 6.68 163.66

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -0,0 +1,63 @@
<?xml version="1.0"?>
<!-- Generated by SVGo and Plotinum VG -->
<svg width="12in" height="8in"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="scale(1, -1) translate(0, -720)">
<path d="M0,0L1080,0L1080,720L0,720Z" style="fill:#FFFFFF" />
<text x="352.84" y="-706.41" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Write 3M keys, 1K clients, key 64 bytes, value 256 bytes</text>
<text x="544.64" y="-4.965" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Second</text>
<text x="56.662" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">0</text>
<text x="319.24" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">60</text>
<text x="581.81" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">120</text>
<text x="847.87" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">180</text>
<path d="M60.137,30.467L60.137,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M326.19,30.467L326.19,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M592.24,30.467L592.24,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M858.29,30.467L858.29,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M148.82,35.468L148.82,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M237.5,35.468L237.5,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M414.87,35.468L414.87,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M503.56,35.468L503.56,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M680.92,35.468L680.92,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M769.61,35.468L769.61,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M946.97,35.468L946.97,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M1035.7,35.468L1035.7,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M60.137,40.467L1080,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<g transform="rotate(90)">
<text x="358.4" y="13.59" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">CPU</text>
</g>
<text x="25.505" y="-228.84" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">60</text>
<text x="18.555" y="-419.9" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">120</text>
<text x="18.555" y="-610.96" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">180</text>
<path d="M42.88,234.21L52.88,234.21" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M42.88,425.27L52.88,425.27" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M42.88,616.33L52.88,616.33" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,106.83L52.88,106.83" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,170.52L52.88,170.52" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,297.89L52.88,297.89" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,361.58L52.88,361.58" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,488.95L52.88,488.95" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,552.64L52.88,552.64" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M47.88,680.01L52.88,680.01" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M52.88,47.03L52.88,701.44" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M60.137,49.418L64.572,53.462L69.006,62.538L73.44,71.327L77.874,79.383L82.308,88.649L86.743,97.279L91.177,105.91L95.611,114.63L100.05,122.91L104.48,130.24L108.91,138.07L113.35,146.1L117.78,153.93L122.22,161.28L126.65,167.53L131.08,175.07L135.52,182.46L139.95,189.88L144.39,195.99L148.82,203L153.26,208.57L157.69,214.78L162.12,221.53L166.56,227.77L170.99,233.82L175.43,240.45L179.86,245.77L184.29,251.85L188.73,257.64L193.16,263.69L197.6,269.84L202.03,275.28L206.47,279.9L210.9,285.6L215.33,291.27L219.77,297.1L224.2,301.87L228.64,306.65L233.07,311.46L237.5,316.78L241.94,321.17L246.37,326.52L250.81,330.63L255.24,334.54L259.68,339.51L264.11,343.78L268.54,348.68L272.98,352.85L277.41,356.61L281.85,359.64L286.28,364.16L290.72,368.39L295.15,372.37L299.58,376.42L304.02,380.65L308.45,383.81L312.89,387.5L317.32,391.32L321.75,394.73L326.19,398.33L330.62,401.8L335.06,404.54L339.49,408.36L343.93,411.92L348.36,415.3L352.79,418.64L357.23,421.86L361.66,424.53L366.1,427.56L370.53,430.74L374.96,433.83L379.4,436.86L383.83,440.07L388.27,443.54L392.7,446.03L397.14,448.89L401.57,451.22L406,453.8L410.44,456.66L414.87,459.5L419.31,462.08L423.74,464.75L428.17,467.33L432.61,469.34L437.04,472.27L441.48,475.17L445.91,477.97L450.35,479.81L454.78,482.23L459.21,485.16L463.65,487.62L468.08,490.61L472.52,492.2L476.95,494.27L481.39,497.26L485.82,499.68L490.25,501.12L494.69,503.73L499.12,506.53L503.56,508.86L507.99,510.89L512.42,513.6L516.86,516.5L521.29,518.7L525.73,520.7L530.16,522.55L534.6,524.55L539.03,526.37L543.46,529.24L547.9,530.89L552.33,532.61L556.77,535.32L561.2,536.72L565.63,538.6L570.07,541.5L574.5,543.53L578.94,545.09L583.37,547.58L587.81,548.21L592.24,550.28L596.67,552.42L601.11,554.01L605.54,556.18L609.98,557.26L614.41,559.23L618.84,560.86L623.28,562.35L627.71,564.87L632.15,565.47L636.58,568.21L641.02,569.39L645.45,571.3L649.88,573.31L654.32,574.68L658.75,577.32L663.19,578.91L667.62,580.5L672.05,581.3L676.49,583.24L680.92,584.93L685.36,586.94L689.79,588.43L694.23,589.87L698.66,591.2L703.09,592.54L707.53,594.71L711.96,595.44L716.4,598.24L720.83,598.62L725.27,601.01L729.7,601.39L734.13,603.88L738.57,604.77L743,607.03L747.44,607.98L751.87,609.86L756.3,610.6L760.74,612.47L765.17,613.37L769.61,615.18L774.04,616.07L778.48,617.92L782.91,618.52L787.34,619.67L791.78,621.39L796.21,622.47L800.65,624.13L805.08,624.99L809.51,626.71L813.95,627.03L818.38,629.32L822.82,629.86L827.25,631.84L831.69,632.76L836.12,634.54L840.55,635.62L844.99,636.48L849.42,638.39L853.86,639.03L858.29,641.04L862.72,641.74L867.16,642.63L871.59,644.41L876.03,644.7L880.46,646.87L884.9,647.22L889.33,648.78L893.76,649.73L898.2,650.08L902.63,652.34L907.07,652.47L911.5,655.05L915.94,655.4L920.37,657.02L924.8,658.2L929.24,658.55L933.67,660.34L938.11,661.64L942.54,663.36L946.97,664.73L951.41,665.18L955.84,666.16L960.28,667.95L964.71,668.55L969.15,670.17L973.58,671.74L978.01,672.15L982.45,674.12L986.88,675.24L991.32,675.59L995.75,678.17L1000.2,678.77L1004.6,679.73L1009.1,682.24L1013.5,682.12L1017.9,683.45L1022.4,685.49L1026.8,686L1031.2,689.03L1035.7,689.76L1040.1,689.92L1044.5,692.31L1049,693.26L1053.4,694.06L1057.8,695.94L1062.3,696.7L1066.7,697.31L1071.1,699.5L1075.6,700.3L1080,700.65" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<path d="M60.137,47.03L64.572,57.602L69.006,64.417L73.44,76.422L77.874,87.885L82.308,98.776L86.743,108.42L91.177,120.46L95.611,129.5L100.05,139.57L104.48,151.95L108.91,160.52L113.35,169.02L117.78,178.64L122.22,188.22L126.65,198.89L131.08,211.02L135.52,218.38L139.95,226.91L144.39,235.42L148.82,244.2L153.26,252.45L157.69,260.57L162.12,271.3L166.56,278.95L170.99,285.79L175.43,291.4L179.86,300.47L184.29,308.82L188.73,315.82L193.16,322.06L197.6,328.21L202.03,334.64L206.47,342.31L210.9,351.55L215.33,360.47L219.77,364.57L224.2,372.66L228.64,381.96L233.07,385.4L237.5,388.23L241.94,393.52L246.37,399.12L250.81,403.55L255.24,407.59L259.68,411.96L264.11,412.62L268.54,411.89L272.98,415.17L277.41,417.11L281.85,421.06L286.28,425.9L290.72,430.62L295.15,436.06L299.58,440.93L304.02,446.32L308.45,451.12L312.89,456.66L317.32,461.89L321.75,466.6L326.19,470.77L330.62,476.25L335.06,481.12L339.49,485.29L343.93,489.37L348.36,492.2L352.79,495.23L357.23,498.89L361.66,503.95L366.1,510.86L370.53,517.07L374.96,520.38L379.4,519.71L383.83,522.1L388.27,522.61L392.7,525.51L397.14,529.3L401.57,534.04L406,539.36L410.44,544.3L414.87,548.82L419.31,552.96L423.74,556.37L428.17,559.04L432.61,562.99L437.04,567.29L441.48,571.36L445.91,575.22L450.35,578.62L454.78,583.15L459.21,587.29L463.65,589.8L468.08,589.04L472.52,589.2L476.95,593.24L481.39,596.68L485.82,603.02L490.25,605.34L494.69,605.09L499.12,605.12L503.56,607.28L507.99,610.28L512.42,613.4L516.86,616.55L521.29,620.31L525.73,623.11L530.16,625.85L534.6,629.16L539.03,632.03L543.46,635.31L547.9,637.85L552.33,641.07L556.77,644.16L561.2,646.55L565.63,649.54L570.07,652.34L574.5,655.24L578.94,655.85L583.37,657.34L587.81,657.12L592.24,659.32L596.67,661.07L601.11,662.85L605.54,662.05L609.98,663.81L614.41,665.37L618.84,667.34L623.28,666.45L627.71,669.25L632.15,671.99L636.58,674.66L641.02,677.59L645.45,680.49L649.88,682.69L654.32,686.83L658.75,690.24L663.19,694.06L667.62,696.29L672.05,697.85L676.49,700.33L680.92,701.44" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<path d="M1055,694.3L1080,694.3" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<text x="1002.5" y="-687.85" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">etcd v3</text>
<path d="M1055,680L1080,680" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<text x="941.6" y="-673.56" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Zookeeper 3.4.8</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -0,0 +1,59 @@
<?xml version="1.0"?>
<!-- Generated by SVGo and Plotinum VG -->
<svg width="12in" height="8in"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="scale(1, -1) translate(0, -720)">
<path d="M0,0L1080,0L1080,720L0,720Z" style="fill:#FFFFFF" />
<text x="352.84" y="-706.41" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Write 3M keys, 1K clients, key 64 bytes, value 256 bytes</text>
<text x="548.11" y="-4.965" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Second</text>
<text x="63.613" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">0</text>
<text x="322.1" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">60</text>
<text x="580.58" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">120</text>
<text x="842.54" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">180</text>
<path d="M67.088,30.467L67.088,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M329.05,30.467L329.05,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M591.01,30.467L591.01,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M852.97,30.467L852.97,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M154.41,35.468L154.41,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M241.73,35.468L241.73,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M416.37,35.468L416.37,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M503.69,35.468L503.69,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M678.33,35.468L678.33,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M765.65,35.468L765.65,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M940.29,35.468L940.29,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M1027.6,35.468L1027.6,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M67.088,40.467L1080,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<g transform="rotate(90)">
<text x="305.89" y="13.59" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Latency(millisecond)</text>
</g>
<text x="25.505" y="-247.78" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">800</text>
<text x="18.555" y="-461.05" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">1600</text>
<text x="18.555" y="-674.32" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">2400</text>
<path d="M49.83,253.15L59.83,253.15" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M49.83,466.42L59.83,466.42" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M49.83,679.68L59.83,679.68" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,146.52L59.83,146.52" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,359.79L59.83,359.79" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,573.05L59.83,573.05" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M59.83,47.03L59.83,701.44" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M67.088,52.587L71.454,54.528L75.82,55.21L80.186,55.951L84.552,59.872L88.918,57.638L93.284,57.201L97.65,57.146L102.02,56.924L106.38,60.209L110.75,58.124L115.11,57.427L119.48,58.389L123.85,57.39L128.21,58.903L132.58,60.944L136.94,57.782L141.31,59.016L145.68,58.799L150.04,59.069L154.41,61.511L158.77,59.012L163.14,59.087L167.51,57.537L171.87,60.277L176.24,57.59L180.6,61.526L184.97,57.984L189.34,58.71L193.7,58.01L198.07,58.325L202.43,58.418L206.8,61.208L211.17,59.158L215.53,58.59L219.9,58.685L224.26,57.721L228.63,57.761L233,62.921L237.36,58.614L241.73,58.628L246.09,59.791L250.46,59.415L254.83,58.617L259.19,60.805L263.56,60.431L267.92,58.203L272.29,59.791L276.66,61.55L281.02,60.269L285.39,62.583L289.75,58.626L294.12,58.949L298.49,59.271L302.85,58.609L307.22,58.979L311.58,64.952L315.95,58.695L320.32,59.954L324.68,60.17L329.05,60.057L333.41,61.791L337.78,61.694L342.15,59.977L346.51,58.964L350.88,59.319L355.24,59.428L359.61,59.989L363.98,65.834L368.34,61.146L372.71,61.302L377.07,60.493L381.44,59.147L385.81,59.446L390.17,62.076L394.54,60.685L398.9,61.476L403.27,62.161L407.64,62.09L412,62.02L416.37,58.527L420.73,65.443L425.1,62.524L429.47,60.874L433.83,58.177L438.2,60.514L442.56,59.239L446.93,63.147L451.3,62.909L455.66,62.395L460.03,58.987L464.39,60.744L468.76,58.223L473.13,63.485L477.49,61.962L481.86,62.305L486.22,62.146L490.59,57.813L494.96,59.702L499.32,62.15L503.69,64.038L508.05,59.484L512.42,56.171L516.79,59.663L521.15,61.697L525.52,59.741L529.88,62.69L534.25,62.455L538.62,60.084L542.98,63.82L547.35,57.908L551.71,58.856L556.08,68.57L560.45,58.265L564.81,58.1L569.18,61.194L573.54,62.418L577.91,56.918L582.28,64.25L586.64,64.359L591.01,58.697L595.37,62.971L599.74,61.529L604.11,57.232L608.47,62.282L612.84,70.393L617.2,57.786L621.57,61.286L625.94,59.446L630.3,59.052L634.67,64.608L639.03,58.939L643.4,60.847L647.77,61.875L652.13,57.339L656.5,63.689L660.86,60.774L665.23,60.141L669.6,64.252L673.96,57.469L678.33,63.64L682.69,63.62L687.06,56.155L691.43,64.327L695.79,58.763L700.16,65.844L704.52,57.942L708.89,62.062L713.26,64.75L717.62,55.482L721.99,73.401L726.35,55.33L730.72,66.647L735.09,54.932L739.45,64.939L743.82,56.023L748.18,65.783L752.55,60.69L756.92,60.228L761.28,64.142L765.65,58.733L770.01,63.342L774.38,56.439L778.75,73.821L783.11,57.125L787.48,65.83L791.84,56.718L796.21,68.1L800.58,55.872L804.94,76.835L809.31,54.795L813.67,66.394L818.04,58.043L822.41,66.183L826.77,57.049L831.14,65.319L835.5,58.8L839.87,62.247L844.24,60.616L848.6,65.704L852.97,58.2L857.33,60.091L861.7,65.131L866.07,56.721L870.43,64.223L874.8,59.212L879.16,67.244L883.53,57.316L887.9,69.769L892.26,58.118L896.63,66.474L900.99,59.766L905.36,58.752L909.73,63.984L914.09,56.975L918.46,79.14L922.82,55.886L927.19,69.655L931.56,57.257L935.92,60.096L940.29,61.425L944.65,60.787L949.02,69.897L953.39,62.37L957.75,65.587L962.12,60.738L966.48,59.461L970.85,68.022L975.22,61.086L979.58,62.069L983.95,62.81L988.31,59.008L992.68,74.063L997.05,54.795L1001.4,67.05L1005.8,68.712L1010.1,54.659L1014.5,83.74L1018.9,55.209L1023.2,59.125L1027.6,64.233L1032,58.611L1036.3,72.251L1040.7,58.776L1045.1,56.574L1049.4,77.142L1053.8,58.223L1058.2,58.003L1062.5,70.671L1066.9,58.496L1071.3,70.497L1075.6,60.201L1080,58.439" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<path d="M67.088,106.21L71.454,50.594L75.82,83.755L80.186,48.464L84.552,49.014L88.918,48.663L93.284,47.71L97.65,48.419L102.02,48.358L106.38,48.739L110.75,53.764L115.11,53.987L119.48,49.193L123.85,48.533L128.21,48.596L132.58,48.065L136.94,57.011L141.31,78.168L145.68,47.908L150.04,48.69L154.41,48.885L158.77,48.296L163.14,48.11L167.51,48.001L171.87,52.158L176.24,48.074L180.6,56.839L184.97,48.214L189.34,52.546L193.7,48.565L198.07,48.983L202.43,50.997L206.8,48.167L211.17,48.969L215.53,48.003L219.9,47.03L224.26,59.261L228.63,47.628L233,47.881L237.36,254.06L241.73,55.217L246.09,50.424L250.46,49.272L254.83,49.364L259.19,50.818L263.56,49.985L267.92,77.219L272.29,130.83L276.66,53.748L281.02,56.479L285.39,49.43L289.75,51.617L294.12,49.151L298.49,52.355L302.85,49.201L307.22,50.695L311.58,50.312L315.95,48.713L320.32,50.155L324.68,49.851L329.05,49.459L333.41,50.725L337.78,49.587L342.15,50.257L346.51,78.925L350.88,57.3L355.24,50.261L359.61,61.044L363.98,50.416L368.34,66.585L372.71,63.681L377.07,60.994L381.44,74.54L385.81,61.032L390.17,51.052L394.54,50.865L398.9,50.81L403.27,49.962L407.64,49.293L412,49.792L416.37,49.843L420.73,51.371L425.1,49.987L429.47,50.132L433.83,51.094L438.2,50.929L442.56,49.284L446.93,701.44L451.3,366.53L455.66,51.838L460.03,50.569L464.39,49.004L468.76,54.687L473.13,192.8L477.49,121.61L481.86,56.514L486.22,52.564L490.59,49.629L494.96,50.167L499.32,48.961L503.69,49.938L508.05,51.837L512.42,48.764L516.79,49.993L521.15,50.184L525.52,50.978L529.88,51.097L534.25,50.719L538.62,53.746L542.98,50.684L547.35,51.558L551.71,52.31L556.08,53.862L560.45,51.687L564.81,53.69L569.18,57.82L573.54,76.255L577.91,212.98L582.28,128.3L586.64,118.49L591.01,59.193L595.37,50.404L599.74,49.935L604.11,49.549L608.47,49.456L612.84,48.643L617.2,49.859L621.57,47.931L625.94,49.086L630.3,47.871L634.67,55.206L639.03,54.07L643.4,55.216L647.77,50.921L652.13,51.532L656.5,54.027L660.86,51.017L665.23,56.08L669.6,57.876L673.96,49.009L678.33,70.514L682.69,54.114" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<path d="M1055,694.3L1080,694.3" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<text x="941.6" y="-687.85" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Zookeeper 3.4.8</text>
<path d="M1055,680L1080,680" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<text x="1002.5" y="-673.56" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">etcd v3</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!-- Generated by SVGo and Plotinum VG -->
<svg width="12in" height="8in"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="scale(1, -1) translate(0, -720)">
<path d="M0,0L1080,0L1080,720L0,720Z" style="fill:#FFFFFF" />
<text x="352.84" y="-706.41" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Write 3M keys, 1K clients, key 64 bytes, value 256 bytes</text>
<text x="548.11" y="-4.965" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Second</text>
<text x="63.613" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">0</text>
<text x="324.38" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">60</text>
<text x="585.14" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">120</text>
<text x="849.38" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">180</text>
<path d="M67.088,30.467L67.088,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M331.33,30.467L331.33,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M595.56,30.467L595.56,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M859.8,30.467L859.8,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M155.17,35.468L155.17,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M243.25,35.468L243.25,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M419.4,35.468L419.4,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M507.48,35.468L507.48,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M683.64,35.468L683.64,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M771.72,35.468L771.72,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M947.88,35.468L947.88,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M1036,35.468L1036,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M67.088,40.467L1080,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<g transform="rotate(90)">
<text x="330.91" y="13.59" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Memory(MB)</text>
</g>
<text x="18.555" y="-219.75" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">1000</text>
<text x="18.555" y="-404.36" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">2000</text>
<text x="18.555" y="-588.97" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">3000</text>
<path d="M49.83,225.12L59.83,225.12" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M49.83,409.73L59.83,409.73" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M49.83,594.34L59.83,594.34" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,132.82L59.83,132.82" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,317.42L59.83,317.42" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,502.03L59.83,502.03" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M54.83,686.64L59.83,686.64" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M59.83,47.03L59.83,701.44" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M67.088,47.03L71.491,60.047L75.895,63.851L80.299,65.349L84.703,66.322L89.107,67.512L93.511,69.325L97.915,70.736L102.32,72.011L106.72,72.785L111.13,74.208L115.53,75.179L119.94,76.715L124.34,77.634L128.74,78.709L133.15,79.955L137.55,81.541L141.95,82.589L146.36,83.793L150.76,84.865L155.17,86.2L159.57,87.867L163.97,88.567L168.38,89.523L172.78,90.679L177.19,92.067L181.59,93.738L185.99,94.559L190.4,95.833L194.8,96.99L199.21,98.235L203.61,99.034L208.01,100.85L212.42,101.44L216.82,102.8L221.23,104.2L225.63,105.5L230.03,106.27L234.44,107.74L238.84,109.07L243.25,110.99L247.65,111.29L252.05,112.84L256.46,113.63L260.86,115.19L265.27,116.51L269.67,117.02L274.07,119.06L278.48,120L282.88,120.83L287.29,122.31L291.69,123.15L296.09,124.02L300.5,125.3L304.9,126.22L309.31,127.37L313.71,128.52L318.11,129.75L322.52,130.93L326.92,132.63L331.33,133.36L335.73,134.39L340.13,135.08L344.54,136.45L348.94,138.22L353.35,138.84L357.75,140.19L362.15,141.35L366.56,142.5L370.96,143.63L375.37,144.93L379.77,146.06L384.17,148.16L388.58,149.07L392.98,150.69L397.39,152L401.79,153.13L406.19,154.34L410.6,154.77L415,155.84L419.4,157.6L423.81,158.64L428.21,160.02L432.62,160.92L437.02,161.77L441.42,163.42L445.83,164.34L450.23,165.61L454.64,166.82L459.04,167.96L463.44,169.6L467.85,170.57L472.25,172.06L476.66,172.7L481.06,173.35L485.46,174.33L489.87,175.34L494.27,176.21L498.68,177.23L503.08,178.36L507.48,179.7L511.89,180.29L516.29,181.89L520.7,183.7L525.1,184.48L529.5,185.08L533.91,185.64L538.31,187.13L542.72,188.02L547.12,190.33L551.52,191.04L555.93,192L560.33,193.34L564.74,194.39L569.14,194.91L573.54,196.05L577.95,197.31L582.35,198.45L586.76,199.39L591.16,200.12L595.56,201.35L599.97,202.76L604.37,203.5L608.78,204.9L613.18,205.59L617.58,207.56L621.99,208.54L626.39,209.6L630.8,211.49L635.2,211.84L639.6,212.91L644.01,214.18L648.41,215.22L652.82,216.7L657.22,217.18L661.62,218.45L666.03,219.36L670.43,220.81L674.83,221.5L679.24,222.61L683.64,223.88L688.05,225.36L692.45,226.58L696.85,227.86L701.26,228.87L705.66,230.4L710.07,231.69L714.47,232.1L718.87,234.27L723.28,235.5L727.68,237.98L732.09,238.18L736.49,238.62L740.89,239.4L745.3,240.73L749.7,241.44L754.11,242.58L758.51,243.33L762.91,244.91L767.32,246.13L771.72,246.89L776.13,248.18L780.53,250.06L784.93,250.47L789.34,251.27L793.74,252.56L798.15,253.15L802.55,255.22L806.95,255.83L811.36,256.93L815.76,257L820.17,259.03L824.57,259.65L828.97,261.34L833.38,261.79L837.78,263.33L842.19,263.87L846.59,264.68L850.99,265.78L855.4,267.02L859.8,269.42L864.21,270.14L868.61,271.27L873.01,272.7L877.42,273.38L881.82,275.52L886.23,276L890.63,276.8L895.03,277.27L899.44,277.96L903.84,279.37L908.25,279.47L912.65,281.76L917.05,282.22L921.46,283.7L925.86,284.91L930.27,285.08L934.67,286.33L939.07,287.02L943.48,288.77L947.88,289.69L952.28,290.61L956.69,291.87L961.09,293.34L965.5,294.02L969.9,295.13L974.3,296.42L978.71,296.79L983.11,297.9L987.52,298.88L991.92,299.35L996.32,301.4L1000.7,302.02L1005.1,302.38L1009.5,304.57L1013.9,304.86L1018.3,306.36L1022.7,307.28L1027.2,307.38L1031.6,309.38L1036,309.97L1040.4,310.63L1044.8,313.48L1049.2,314.11L1053.6,315.29L1058,316.47L1062.4,316.79L1066.8,317.77L1071.2,318.96L1075.6,319.5L1080,320.01" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<path d="M67.088,54.021L71.491,68.805L75.895,70.724L80.299,82.32L84.703,101.8L89.107,129.39L93.511,139.05L97.915,172.74L102.32,180.21L106.72,193.74L111.13,220.23L115.53,245.58L119.94,250.03L124.34,254.21L128.74,260.1L133.15,307.92L137.55,314.54L141.95,331.22L146.36,330.92L150.76,338.08L155.17,349.35L159.57,349.13L163.97,351.96L168.38,382.26L172.78,382.3L177.19,387.96L181.59,389.51L185.99,398.83L190.4,399.5L194.8,399.5L199.21,399.5L203.61,405.3L208.01,405.3L212.42,410.05L216.82,422.94L221.23,427.75L225.63,429.4L230.03,435.66L234.44,449.43L238.84,451.02L243.25,451.02L247.65,451.02L252.05,450.31L256.46,450.31L260.86,450.31L265.27,450.11L269.67,450.12L274.07,450.12L278.48,449.7L282.88,449.7L287.29,449.73L291.69,453.17L296.09,453.17L300.5,458.18L304.9,463.64L309.31,469.38L313.71,469.38L318.11,475.39L322.52,476.41L326.92,476.45L331.33,476.49L335.73,478.72L340.13,481.29L344.54,486.79L348.94,493L353.35,493.1L357.75,494.3L362.15,496.69L366.56,505.21L370.96,516.1L375.37,516.28L379.77,520.23L384.17,521.04L388.58,527.25L392.98,531.3L397.39,532.6L401.79,533.01L406.19,534.05L410.6,535.06L415,532.7L419.4,533.22L423.81,533.73L428.21,533.6L432.62,534L437.02,534.51L441.42,537.61L445.83,547.88L450.23,552.97L454.64,558.98L459.04,569.25L463.44,569.36L467.85,572.53L472.25,572.78L476.66,577.55L481.06,579.95L485.46,584.06L489.87,591.53L494.27,591.61L498.68,591.27L503.08,592.55L507.48,592.53L511.89,592.16L516.29,591.77L520.7,591.77L525.1,591.83L529.5,591.81L533.91,591.89L538.31,592.29L542.72,593.4L547.12,596.54L551.52,598.56L555.93,600.77L560.33,605.03L564.74,606.57L569.14,612.8L573.54,616.45L577.95,621.88L582.35,627.5L586.76,634.76L591.16,634.76L595.56,643.37L599.97,643.37L604.37,645.91L608.78,646.02L613.18,651.06L617.58,656.66L621.99,660.55L626.39,660.97L630.8,664.07L635.2,667.2L639.6,670.21L644.01,672.04L648.41,676.2L652.82,676.17L657.22,681.15L661.62,685.31L666.03,688.84L670.43,690.36L674.83,695.41L679.24,701.44L683.64,701.44" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<path d="M1055,694.3L1080,694.3" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<text x="1002.5" y="-687.85" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">etcd v3</text>
<path d="M1055,680L1080,680" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<text x="941.6" y="-673.56" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Zookeeper 3.4.8</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

View File

@ -0,0 +1,59 @@
<?xml version="1.0"?>
<!-- Generated by SVGo and Plotinum VG -->
<svg width="12in" height="8in"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="scale(1, -1) translate(0, -720)">
<path d="M0,0L1080,0L1080,720L0,720Z" style="fill:#FFFFFF" />
<text x="352.84" y="-706.41" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Write 3M keys, 1K clients, key 64 bytes, value 256 bytes</text>
<text x="551.76" y="-4.965" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Second</text>
<text x="70.912" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">0</text>
<text x="327.51" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">60</text>
<text x="584.11" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">120</text>
<text x="844.18" y="-19.142" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">180</text>
<path d="M74.388,30.467L74.388,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M334.46,30.467L334.46,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M594.53,30.467L594.53,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M854.6,30.467L854.6,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M161.08,35.468L161.08,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M247.77,35.468L247.77,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M421.15,35.468L421.15,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M507.84,35.468L507.84,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M681.22,35.468L681.22,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M767.91,35.468L767.91,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M941.29,35.468L941.29,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M1028,35.468L1028,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M74.388,40.467L1080,40.467" style="fill:none;stroke:#000000;stroke-width:0.625" />
<g transform="rotate(90)">
<text x="335.88" y="13.59" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Throughput</text>
</g>
<text x="18.555" y="-234.12" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">1e+04</text>
<text x="18.555" y="-427.86" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">2e+04</text>
<text x="18.555" y="-621.6" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:10pt">3e+04</text>
<path d="M57.13,239.49L67.13,239.49" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M57.13,433.23L67.13,433.23" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M57.13,626.97L67.13,626.97" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M62.13,142.62L67.13,142.62" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M62.13,336.36L67.13,336.36" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M62.13,530.1L67.13,530.1" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M67.13,47.03L67.13,701.44" style="fill:none;stroke:#000000;stroke-width:0.625" />
<path d="M74.388,75.529L78.722,402.25L83.057,380.59L87.391,358.29L91.726,312.67L96.06,328.36L100.39,349.13L104.73,341.22L109.06,354.05L113.4,291.49L117.73,334.06L122.07,330.72L126.4,334.89L130.74,342.37L135.07,295.04L139.41,309.35L143.74,329.58L148.07,318.34L152.41,318.67L156.74,315.3L161.08,277.23L165.41,313.87L169.75,321.42L174.08,337.14L178.42,303.64L182.75,326.46L187.09,289.81L191.42,328.4L195.75,314.64L200.09,334.02L204.42,319.12L208.76,320.69L213.09,300.35L217.43,301.37L221.76,333.28L226.1,321.99L230.43,324.23L234.77,310.79L239.1,296.14L243.43,316.77L247.77,321.27L252.1,302.63L256.44,296.39L260.77,296.57L265.11,310.98L269.44,317.51L273.78,313.38L278.11,305.91L282.45,292.79L286.78,288.14L291.11,283.1L295.45,320.86L299.78,290.1L304.12,334.52L308.45,325.2L312.79,275.18L317.12,282.37L321.46,313.98L325.79,292.85L330.13,304.86L334.46,300.98L338.79,290.25L343.13,281.28L347.46,300.62L351.8,318.07L356.13,311.39L360.47,309.02L364.8,302.19L369.14,244.82L373.47,287.33L377.81,284.05L382.14,299.18L386.47,288.37L390.81,313.05L395.14,297.71L399.48,291.55L403.81,283.2L408.15,281.88L412.48,276.26L416.82,277.62L421.15,302.84L425.48,262.55L429.82,273.4L434.15,290.89L438.49,279.81L442.82,323.46L447.16,326.73L451.49,268.34L455.83,269.39L460.16,277.35L464.5,308.7L468.83,290.56L473.16,316.97L477.5,239.39L481.83,314.53L486.17,283.1L490.5,277.5L494.84,320.49L499.17,310.96L503.51,282.62L507.84,256.79L512.18,308.21L516.51,332.39L520.84,332.64L525.18,285.87L529.51,285.68L533.85,250.63L538.18,311.97L542.52,291.34L546.85,268.63L551.19,309.12L555.52,317.84L559.86,240.48L564.19,272.21L568.52,373.29L572.86,293.33L577.19,270.84L581.53,302.19L585.86,272.16L590.2,266.15L594.53,330.49L598.87,273.98L603.2,286.12L607.54,321.99L611.87,277.39L616.2,222.85L620.54,334.27L624.87,288.26L629.21,246.66L633.54,359.4L637.88,269.77L642.21,285.47L646.55,319.43L650.88,247.96L655.22,370.67L659.55,272.06L663.88,289.71L668.22,304.01L672.55,257.3L676.89,327.16L681.22,261.97L685.56,274.38L689.89,331.6L694.23,274.44L698.56,292.73L702.9,260.03L707.23,317.3L711.56,291.98L715.9,253.83L720.23,368.48L724.57,202.8L728.9,372.44L733.24,243.15L737.57,348.63L741.91,279.27L746.24,269.66L750.58,301.39L754.91,261.46L759.24,328.92L763.58,264.43L767.91,318.38L772.25,262.97L776.58,331.5L780.92,211.03L785.25,335.64L789.59,252.01L793.92,349.81L798.26,229.28L802.59,351.76L806.92,193.48L811.26,374.64L815.59,223.35L819.93,369.47L824.26,230.35L828.6,363.72L832.93,246.1L837.27,320.26L841.6,229.94L845.94,340.91L850.27,244.04L854.6,320.98L858.94,229.13L863.27,318.09L867.61,291.01L871.94,276.03L876.28,337.97L880.61,234.45L884.95,327.12L889.28,229.38L893.61,297.71L897.95,208.73L902.28,371.08L906.62,265.2L910.95,303.83L915.29,331.65L919.62,182.43L923.96,367.13L928.29,222.79L932.63,340.29L936.96,233.91L941.29,331.38L945.63,307.55L949.96,197.68L954.3,307.24L958.63,215.58L962.97,321.39L967.3,313.07L971.64,232.36L975.97,280.87L980.31,234.28L984.64,309.78L988.97,292.98L993.31,216.71L997.64,353.37L1002,216.2L1006.3,259.8L1010.6,351.94L1015,179.06L1019.3,386.23L1023.7,259.14L1028,299.82L1032.3,319.22L1036.7,205.1L1041,318.07L1045.3,315.55L1049.7,192.32L1054,350.7L1058.3,212.97L1062.7,267.82L1067,347.58L1071.3,213.57L1075.7,270.99L1080,354.38" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<path d="M74.388,47.03L78.722,189.8L83.057,235.83L87.391,647.84L91.726,614.59L96.06,632.82L100.39,701.44L104.73,655.76L109.06,652.37L113.4,627.4L117.73,419.98L122.07,401.96L126.4,614.49L130.74,637.94L135.07,640.92L139.41,456.71L143.74,453.15L148.07,180.85L152.41,690.85L156.74,624.45L161.08,625.85L165.41,658.78L169.75,666.34L174.08,501.16L178.42,589.41L182.75,296.51L187.09,534.96L191.42,534.85L195.75,540.51L200.09,636.99L204.42,604.25L208.76,520.24L213.09,663.82L217.43,616.66L221.76,594.98L226.1,524.27L230.43,437.75L234.77,588.88L239.1,235.52L243.43,91.513L247.77,382.67L252.1,529.71L256.44,570.67L260.77,617.4L265.11,514.68L269.44,556.18L273.78,153.57L278.11,104.13L282.45,490.5L286.78,357.21L291.11,586.4L295.45,483.02L299.78,574.82L304.12,483.66L308.45,599.27L312.79,520.49L317.12,542.31L321.46,622.11L325.79,555.6L330.13,565.21L334.46,583.28L338.79,524.13L343.13,570.36L347.46,251.41L351.8,389.72L356.13,343.06L360.47,476.94L364.8,267.72L369.14,303.39L373.47,176.84L377.81,179.16L382.14,340.18L386.47,188.36L390.81,349.01L395.14,505.57L399.48,503.29L403.81,534.25L408.15,521.73L412.48,631.89L416.82,565.34L421.15,560.77L425.48,499.92L429.82,557.24L434.15,549.34L438.49,506.62L442.82,515.28L447.16,305.27L451.49,47.049L455.83,84.306L460.16,503.91L464.5,477.73L468.83,421.74L473.16,243.33L477.5,104.07L481.83,105.93L486.17,418.18L490.5,455.55L494.84,572.49L499.17,524.85L503.51,631.29L507.84,554.9L512.18,487.77L516.51,629.35L520.84,554.63L525.18,534.94L529.51,524.08L533.85,503.81L538.18,510.79L542.52,426.66L546.85,498.27L551.19,511.41L555.52,463.75L559.86,384.02L564.19,468.96L568.52,382.99L572.86,246.16L577.19,201.34L581.53,73.824L585.86,87.173L590.2,97.519L594.53,404.89L598.87,540.33L603.2,574.1L607.54,579.99L611.87,579.37L616.2,602.62L620.54,479.96L624.87,476.03L629.21,419.61L633.54,478.9L637.88,417.38L642.21,449.49L646.55,412.66L650.88,416.24L655.22,577.12L659.55,414.83L663.88,509.84L668.22,360.71L672.55,242.78L676.89,338.01L681.22,313.33L685.56,123.98" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<path d="M1055,694.3L1080,694.3" style="fill:none;stroke:#F15A60;stroke-width:1.875" />
<text x="1002.5" y="-687.85" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">etcd v3</text>
<path d="M1055,680L1080,680" style="fill:none;stroke:#7AC36A;stroke-width:1.875;stroke-dasharray:7.5,2.5" />
<text x="941.6" y="-673.56" transform="scale(1, -1)"
style="font-family:Helvetica;font-weight:normal;font-style:normal;font-size:12pt">Zookeeper 3.4.8</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -61,7 +61,6 @@ func init() {
func init() {
rootCommand.AddCommand(agent.Command)
rootCommand.AddCommand(analyze.Command)
rootCommand.AddCommand(analyze.ReadmeCommand)
rootCommand.AddCommand(bench.Command)
rootCommand.AddCommand(control.StartCommand)
rootCommand.AddCommand(control.StopCommand)

View File

@ -21,8 +21,10 @@ import (
)
type (
AuthEnableResponse pb.AuthEnableResponse
AuthUserAddResponse pb.AuthUserAddResponse
AuthEnableResponse pb.AuthEnableResponse
AuthUserAddResponse pb.AuthUserAddResponse
AuthUserDeleteResponse pb.AuthUserDeleteResponse
AuthUserChangePasswordResponse pb.AuthUserChangePasswordResponse
)
type Auth interface {
@ -31,6 +33,12 @@ type Auth interface {
// UserAdd adds a new user to an etcd cluster.
UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error)
// UserDelete deletes a user from an etcd cluster.
UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error)
// UserChangePassword changes a password of a user.
UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error)
}
type auth struct {
@ -58,3 +66,13 @@ func (auth *auth) UserAdd(ctx context.Context, name string, password string) (*A
resp, err := auth.remote.UserAdd(ctx, &pb.AuthUserAddRequest{Name: name, Password: password})
return (*AuthUserAddResponse)(resp), err
}
func (auth *auth) UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error) {
resp, err := auth.remote.UserDelete(ctx, &pb.AuthUserDeleteRequest{Name: name})
return (*AuthUserDeleteResponse)(resp), err
}
func (auth *auth) UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error) {
resp, err := auth.remote.UserChangePassword(ctx, &pb.AuthUserChangePasswordRequest{Name: name, Password: password})
return (*AuthUserChangePasswordResponse)(resp), err
}

View File

@ -38,4 +38,5 @@ var (
ErrRequestTooLarge = grpc.Errorf(codes.InvalidArgument, "etcdserver: request is too large")
ErrUserAlreadyExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: user name already exists")
ErrUserNotFound = grpc.Errorf(codes.FailedPrecondition, "etcdserver: user name not found")
)

View File

@ -22,18 +22,20 @@ var _ = math.Inf
// An InternalRaftRequest is the union of all requests which can be
// sent via raft.
type InternalRaftRequest struct {
ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
V2 *Request `protobuf:"bytes,2,opt,name=v2" json:"v2,omitempty"`
Range *RangeRequest `protobuf:"bytes,3,opt,name=range" json:"range,omitempty"`
Put *PutRequest `protobuf:"bytes,4,opt,name=put" json:"put,omitempty"`
DeleteRange *DeleteRangeRequest `protobuf:"bytes,5,opt,name=delete_range" json:"delete_range,omitempty"`
Txn *TxnRequest `protobuf:"bytes,6,opt,name=txn" json:"txn,omitempty"`
Compaction *CompactionRequest `protobuf:"bytes,7,opt,name=compaction" json:"compaction,omitempty"`
LeaseCreate *LeaseCreateRequest `protobuf:"bytes,8,opt,name=lease_create" json:"lease_create,omitempty"`
LeaseRevoke *LeaseRevokeRequest `protobuf:"bytes,9,opt,name=lease_revoke" json:"lease_revoke,omitempty"`
AuthEnable *AuthEnableRequest `protobuf:"bytes,10,opt,name=auth_enable" json:"auth_enable,omitempty"`
AuthUserAdd *AuthUserAddRequest `protobuf:"bytes,11,opt,name=auth_user_add" json:"auth_user_add,omitempty"`
Alarm *AlarmRequest `protobuf:"bytes,12,opt,name=alarm" json:"alarm,omitempty"`
ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
V2 *Request `protobuf:"bytes,2,opt,name=v2" json:"v2,omitempty"`
Range *RangeRequest `protobuf:"bytes,3,opt,name=range" json:"range,omitempty"`
Put *PutRequest `protobuf:"bytes,4,opt,name=put" json:"put,omitempty"`
DeleteRange *DeleteRangeRequest `protobuf:"bytes,5,opt,name=delete_range" json:"delete_range,omitempty"`
Txn *TxnRequest `protobuf:"bytes,6,opt,name=txn" json:"txn,omitempty"`
Compaction *CompactionRequest `protobuf:"bytes,7,opt,name=compaction" json:"compaction,omitempty"`
LeaseCreate *LeaseCreateRequest `protobuf:"bytes,8,opt,name=lease_create" json:"lease_create,omitempty"`
LeaseRevoke *LeaseRevokeRequest `protobuf:"bytes,9,opt,name=lease_revoke" json:"lease_revoke,omitempty"`
AuthEnable *AuthEnableRequest `protobuf:"bytes,10,opt,name=auth_enable" json:"auth_enable,omitempty"`
AuthUserAdd *AuthUserAddRequest `protobuf:"bytes,11,opt,name=auth_user_add" json:"auth_user_add,omitempty"`
AuthUserDelete *AuthUserDeleteRequest `protobuf:"bytes,12,opt,name=auth_user_delete" json:"auth_user_delete,omitempty"`
AuthUserChangePassword *AuthUserChangePasswordRequest `protobuf:"bytes,13,opt,name=auth_user_change_password" json:"auth_user_change_password,omitempty"`
Alarm *AlarmRequest `protobuf:"bytes,14,opt,name=alarm" json:"alarm,omitempty"`
}
func (m *InternalRaftRequest) Reset() { *m = InternalRaftRequest{} }
@ -171,16 +173,36 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) {
}
i += n10
}
if m.Alarm != nil {
if m.AuthUserDelete != nil {
data[i] = 0x62
i++
i = encodeVarintRaftInternal(data, i, uint64(m.Alarm.Size()))
n11, err := m.Alarm.MarshalTo(data[i:])
i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserDelete.Size()))
n11, err := m.AuthUserDelete.MarshalTo(data[i:])
if err != nil {
return 0, err
}
i += n11
}
if m.AuthUserChangePassword != nil {
data[i] = 0x6a
i++
i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserChangePassword.Size()))
n12, err := m.AuthUserChangePassword.MarshalTo(data[i:])
if err != nil {
return 0, err
}
i += n12
}
if m.Alarm != nil {
data[i] = 0x72
i++
i = encodeVarintRaftInternal(data, i, uint64(m.Alarm.Size()))
n13, err := m.Alarm.MarshalTo(data[i:])
if err != nil {
return 0, err
}
i += n13
}
return i, nil
}
@ -275,6 +297,14 @@ func (m *InternalRaftRequest) Size() (n int) {
l = m.AuthUserAdd.Size()
n += 1 + l + sovRaftInternal(uint64(l))
}
if m.AuthUserDelete != nil {
l = m.AuthUserDelete.Size()
n += 1 + l + sovRaftInternal(uint64(l))
}
if m.AuthUserChangePassword != nil {
l = m.AuthUserChangePassword.Size()
n += 1 + l + sovRaftInternal(uint64(l))
}
if m.Alarm != nil {
l = m.Alarm.Size()
n += 1 + l + sovRaftInternal(uint64(l))
@ -680,6 +710,72 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error {
}
iNdEx = postIndex
case 12:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AuthUserDelete", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRaftInternal
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthRaftInternal
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.AuthUserDelete == nil {
m.AuthUserDelete = &AuthUserDeleteRequest{}
}
if err := m.AuthUserDelete.Unmarshal(data[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 13:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AuthUserChangePassword", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRaftInternal
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthRaftInternal
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.AuthUserChangePassword == nil {
m.AuthUserChangePassword = &AuthUserChangePasswordRequest{}
}
if err := m.AuthUserChangePassword.Unmarshal(data[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 14:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType)
}

View File

@ -27,8 +27,10 @@ message InternalRaftRequest {
AuthEnableRequest auth_enable = 10;
AuthUserAddRequest auth_user_add = 11;
AuthUserDeleteRequest auth_user_delete = 12;
AuthUserChangePasswordRequest auth_user_change_password = 13;
AlarmRequest alarm = 12;
AlarmRequest alarm = 14;
}
message EmptyResponse {

View File

@ -1287,6 +1287,7 @@ func (m *AuthUserGetRequest) String() string { return proto.CompactTextString(m)
func (*AuthUserGetRequest) ProtoMessage() {}
type AuthUserDeleteRequest struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (m *AuthUserDeleteRequest) Reset() { *m = AuthUserDeleteRequest{} }
@ -1294,6 +1295,8 @@ func (m *AuthUserDeleteRequest) String() string { return proto.CompactTextString
func (*AuthUserDeleteRequest) ProtoMessage() {}
type AuthUserChangePasswordRequest struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
}
func (m *AuthUserChangePasswordRequest) Reset() { *m = AuthUserChangePasswordRequest{} }
@ -4465,6 +4468,12 @@ func (m *AuthUserDeleteRequest) MarshalTo(data []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.Name) > 0 {
data[i] = 0xa
i++
i = encodeVarintRpc(data, i, uint64(len(m.Name)))
i += copy(data[i:], m.Name)
}
return i, nil
}
@ -4483,6 +4492,18 @@ func (m *AuthUserChangePasswordRequest) MarshalTo(data []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.Name) > 0 {
data[i] = 0xa
i++
i = encodeVarintRpc(data, i, uint64(len(m.Name)))
i += copy(data[i:], m.Name)
}
if len(m.Password) > 0 {
data[i] = 0x12
i++
i = encodeVarintRpc(data, i, uint64(len(m.Password)))
i += copy(data[i:], m.Password)
}
return i, nil
}
@ -5751,12 +5772,24 @@ func (m *AuthUserGetRequest) Size() (n int) {
func (m *AuthUserDeleteRequest) Size() (n int) {
var l int
_ = l
l = len(m.Name)
if l > 0 {
n += 1 + l + sovRpc(uint64(l))
}
return n
}
func (m *AuthUserChangePasswordRequest) Size() (n int) {
var l int
_ = l
l = len(m.Name)
if l > 0 {
n += 1 + l + sovRpc(uint64(l))
}
l = len(m.Password)
if l > 0 {
n += 1 + l + sovRpc(uint64(l))
}
return n
}
@ -10706,6 +10739,35 @@ func (m *AuthUserDeleteRequest) Unmarshal(data []byte) error {
return fmt.Errorf("proto: AuthUserDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Name = string(data[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRpc(data[iNdEx:])
@ -10756,6 +10818,64 @@ func (m *AuthUserChangePasswordRequest) Unmarshal(data []byte) error {
return fmt.Errorf("proto: AuthUserChangePasswordRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Name = string(data[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Password = string(data[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRpc(data[iNdEx:])

View File

@ -489,9 +489,12 @@ message AuthUserGetRequest {
}
message AuthUserDeleteRequest {
string name = 1;
}
message AuthUserChangePasswordRequest {
string name = 1;
string password = 2;
}
message AuthUserGrantRequest {

View File

@ -29,7 +29,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// +build appengine
// +build appengine js
// This file contains an implementation of proto field accesses using package reflect.
// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can

View File

@ -29,7 +29,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// +build !appengine
// +build !appengine,!js
// This file contains the implementation of the proto field accesses using package unsafe.

View File

@ -26,7 +26,7 @@ import (
"unicode"
)
var templateFuncs template.FuncMap = template.FuncMap{
var templateFuncs = template.FuncMap{
"trim": strings.TrimSpace,
"trimRightSpace": trimRightSpace,
"appendIfNotPresent": appendIfNotPresent,
@ -39,7 +39,7 @@ var initializers []func()
// automatic prefix matching can be a dangerous thing to automatically enable in CLI tools.
// Set this to true to enable it
var EnablePrefixMatching bool = false
var EnablePrefixMatching = false
//AddTemplateFunc adds a template function that's available to Usage and Help
//template generation.

View File

@ -132,9 +132,8 @@ func (c *Command) getOut(def io.Writer) io.Writer {
if c.HasParent() {
return c.parent.Out()
} else {
return def
}
return def
}
func (c *Command) Out() io.Writer {
@ -194,14 +193,13 @@ func (c *Command) UsageFunc() (f func(*Command) error) {
if c.HasParent() {
return c.parent.UsageFunc()
} else {
return func(c *Command) error {
err := tmpl(c.Out(), c.UsageTemplate(), c)
if err != nil {
fmt.Print(err)
}
return err
}
return func(c *Command) error {
err := tmpl(c.Out(), c.UsageTemplate(), c)
if err != nil {
fmt.Print(err)
}
return err
}
}
@ -223,35 +221,32 @@ func (c *Command) HelpFunc() func(*Command, []string) {
}
}
var minUsagePadding int = 25
var minUsagePadding = 25
func (c *Command) UsagePadding() int {
if c.parent == nil || minUsagePadding > c.parent.commandsMaxUseLen {
return minUsagePadding
} else {
return c.parent.commandsMaxUseLen
}
return c.parent.commandsMaxUseLen
}
var minCommandPathPadding int = 11
var minCommandPathPadding = 11
//
func (c *Command) CommandPathPadding() int {
if c.parent == nil || minCommandPathPadding > c.parent.commandsMaxCommandPathLen {
return minCommandPathPadding
} else {
return c.parent.commandsMaxCommandPathLen
}
return c.parent.commandsMaxCommandPathLen
}
var minNamePadding int = 11
var minNamePadding = 11
func (c *Command) NamePadding() int {
if c.parent == nil || minNamePadding > c.parent.commandsMaxNameLen {
return minNamePadding
} else {
return c.parent.commandsMaxNameLen
}
return c.parent.commandsMaxNameLen
}
func (c *Command) UsageTemplate() string {
@ -261,8 +256,8 @@ func (c *Command) UsageTemplate() string {
if c.HasParent() {
return c.parent.UsageTemplate()
} else {
return `Usage:{{if .Runnable}}
}
return `Usage:{{if .Runnable}}
{{if .HasFlags}}{{appendIfNotPresent .UseLine "[flags]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasSubCommands}}
{{ .CommandPath}} [command]{{end}}{{if gt .Aliases 0}}
@ -287,7 +282,6 @@ Additional help topics:{{range .Commands}}{{if .IsHelpCommand}}
Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
`
}
}
func (c *Command) HelpTemplate() string {
@ -297,11 +291,10 @@ func (c *Command) HelpTemplate() string {
if c.HasParent() {
return c.parent.HelpTemplate()
} else {
return `{{with or .Long .Short }}{{. | trim}}
}
return `{{with or .Long .Short }}{{. | trim}}
{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`
}
}
// Really only used when casting a command to a commander
@ -603,9 +596,8 @@ func (c *Command) errorMsgFromParse() string {
if len(x) > 0 {
return x[0]
} else {
return ""
}
return ""
}
// Call execute to use the args (os.Args[1:] by default)
@ -786,18 +778,18 @@ main:
}
}
// Convenience method to Print to the defined output
// Print is a convenience method to Print to the defined output
func (c *Command) Print(i ...interface{}) {
fmt.Fprint(c.Out(), i...)
}
// Convenience method to Println to the defined output
// Println is a convenience method to Println to the defined output
func (c *Command) Println(i ...interface{}) {
str := fmt.Sprintln(i...)
c.Print(str)
}
// Convenience method to Printf to the defined output
// Printf is a convenience method to Printf to the defined output
func (c *Command) Printf(format string, i ...interface{}) {
str := fmt.Sprintf(format, i...)
c.Print(str)
@ -908,7 +900,7 @@ func (c *Command) Name() string {
return name
}
// Determine if a given string is an alias of the command.
// HasAlias determines if a given string is an alias of the command.
func (c *Command) HasAlias(s string) bool {
for _, a := range c.Aliases {
if a == s {
@ -926,12 +918,12 @@ func (c *Command) HasExample() bool {
return len(c.Example) > 0
}
// Determine if the command is itself runnable
// Runnable determines if the command is itself runnable
func (c *Command) Runnable() bool {
return c.Run != nil || c.RunE != nil
}
// Determine if the command has children commands
// HasSubCommands determines if the command has children commands
func (c *Command) HasSubCommands() bool {
return len(c.commands) > 0
}
@ -1123,7 +1115,7 @@ func (c *Command) HasInheritedFlags() bool {
return c.InheritedFlags().HasFlags()
}
// Climbs up the command tree looking for matching flag
// Flag climbs up the command tree looking for matching flag
func (c *Command) Flag(name string) (flag *flag.Flag) {
flag = c.Flags().Lookup(name)
@ -1146,13 +1138,14 @@ func (c *Command) persistentFlag(name string) (flag *flag.Flag) {
return
}
// Parses persistent flag tree & local flags
// ParseFlags parses persistent flag tree & local flags
func (c *Command) ParseFlags(args []string) (err error) {
c.mergePersistentFlags()
err = c.Flags().Parse(args)
return
}
// Parent returns a commands parent command
func (c *Command) Parent() *Command {
return c.parent
}

View File

@ -2,4 +2,4 @@
package cobra
var preExecHookFn func(*Command) = nil
var preExecHookFn func(*Command)

View File

@ -170,8 +170,9 @@ var (
// RFC 7230 says:
// header-field = field-name ":" OWS field-value OWS
// field-name = token
// token = 1*tchar
// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
// "^" / "_" / "
// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
// Further, http2 says:
// "Just as in HTTP/1.x, header field names are strings of ASCII
// characters that are compared in a case-insensitive

View File

@ -1616,9 +1616,13 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
Trailer: trailer,
}
if bodyOpen {
st.reqBuf = sc.getRequestBodyBuf()
// Disabled, per golang.org/issue/14960:
// st.reqBuf = sc.getRequestBodyBuf()
// TODO: remove this 64k of garbage per request (again, but without a data race):
buf := make([]byte, initialWindowSize)
body.pipe = &pipe{
b: &fixedBuffer{buf: st.reqBuf},
b: &fixedBuffer{buf: buf},
}
if vv, ok := header["Content-Length"]; ok {

View File

@ -92,6 +92,7 @@ func (e *expirationTime) UnmarshalJSON(b []byte) error {
var brokenAuthHeaderProviders = []string{
"https://accounts.google.com/",
"https://api.dropbox.com/",
"https://api.dropboxapi.com/",
"https://api.instagram.com/",
"https://api.netatmo.net/",
"https://api.odnoklassniki.ru/",

View File

@ -47,7 +47,7 @@ Manually-configured authorization can be achieved using the
[`golang.org/x/oauth2`](https://godoc.org/golang.org/x/oauth2) package to
create an `oauth2.TokenSource`. This token source can be passed to the `NewClient`
function for the relevant API using a
[`cloud.WithTokenSource`][https://godoc.org/google.golang.org/cloud#WithTokenSource]
[`cloud.WithTokenSource`](https://godoc.org/google.golang.org/cloud#WithTokenSource)
option.
## Google Cloud Datastore

View File

@ -1,5 +1,9 @@
language: go
go:
- 1.5.3
- 1.6
before_install:
- go get github.com/axw/gocov/gocov
- go get github.com/mattn/goveralls

View File

@ -1,15 +1,3 @@
.PHONY: \
all \
deps \
updatedeps \
testdeps \
updatetestdeps \
build \
proto \
test \
testrace \
clean \
all: test testrace
deps:
@ -32,7 +20,7 @@ proto:
echo "error: protoc not installed" >&2; \
exit 1; \
fi
go get -v github.com/golang/protobuf/protoc-gen-go
go get -u -v github.com/golang/protobuf/protoc-gen-go
for file in $$(git ls-files '*.proto'); do \
protoc -I $$(dirname $$file) --go_out=plugins=grpc:$$(dirname $$file) $$file; \
done
@ -44,7 +32,20 @@ testrace: testdeps
go test -v -race -cpu 1,4 google.golang.org/grpc/...
clean:
go clean google.golang.org/grpc/...
go clean -i google.golang.org/grpc/...
coverage: testdeps
./coverage.sh --coveralls
.PHONY: \
all \
deps \
updatedeps \
testdeps \
updatetestdeps \
build \
proto \
test \
testrace \
clean \
coverage

View File

@ -7,7 +7,7 @@ The Go implementation of [gRPC](http://www.grpc.io/): A high performance, open s
Installation
------------
To install this package, you need to install Go 1.4 or above and setup your Go workspace on your computer. The simplest way to install the library is to run:
To install this package, you need to install Go and setup your Go workspace on your computer. The simplest way to install the library is to run:
```
$ go get google.golang.org/grpc
@ -16,7 +16,7 @@ $ go get google.golang.org/grpc
Prerequisites
-------------
This requires Go 1.4 or above.
This requires Go 1.5 or later .
Constraints
-----------

View File

@ -325,7 +325,7 @@ type rpcError struct {
}
func (e rpcError) Error() string {
return fmt.Sprintf("rpc error: code = %d desc = %q", e.code, e.desc)
return fmt.Sprintf("rpc error: code = %d desc = %s", e.code, e.desc)
}
// Code returns the error code for err if it was produced by the rpc system.

View File

@ -636,6 +636,7 @@ func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) {
s.statusCode, ok = http2ErrConvTab[http2.ErrCode(f.ErrCode)]
if !ok {
grpclog.Println("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error ", f.ErrCode)
s.statusCode = codes.Unknown
}
s.mu.Unlock()
s.write(recvMsg{err: io.EOF})
@ -721,14 +722,14 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
s.write(recvMsg{err: io.EOF})
}
func handleMalformedHTTP2(s *Stream, err http2.StreamError) {
func handleMalformedHTTP2(s *Stream, err error) {
s.mu.Lock()
if !s.headerDone {
close(s.headerChan)
s.headerDone = true
}
s.mu.Unlock()
s.write(recvMsg{err: StreamErrorf(http2ErrConvTab[err.Code], "%v", err)})
s.write(recvMsg{err: err})
}
// reader runs as a separate goroutine in charge of reading data from network
@ -763,7 +764,8 @@ func (t *http2Client) reader() {
s := t.activeStreams[se.StreamID]
t.mu.Unlock()
if s != nil {
handleMalformedHTTP2(s, se)
// use error detail to provide better err message
handleMalformedHTTP2(s, StreamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.errorDetail()))
}
continue
} else {

View File

@ -69,6 +69,7 @@ var (
http2.ErrCodeInternal: codes.Internal,
http2.ErrCodeFlowControl: codes.ResourceExhausted,
http2.ErrCodeSettingsTimeout: codes.Internal,
http2.ErrCodeStreamClosed: codes.Internal,
http2.ErrCodeFrameSize: codes.Internal,
http2.ErrCodeRefusedStream: codes.Unavailable,
http2.ErrCodeCancel: codes.Canceled,
@ -404,3 +405,7 @@ func (f *framer) flushWrite() error {
func (f *framer) readFrame() (http2.Frame, error) {
return f.fr.ReadFrame()
}
func (f *framer) errorDetail() error {
return f.fr.ErrorDetail()
}

View File

@ -89,12 +89,14 @@ func newRecvBuffer() *recvBuffer {
func (b *recvBuffer) put(r item) {
b.mu.Lock()
defer b.mu.Unlock()
b.backlog = append(b.backlog, r)
select {
case b.c <- b.backlog[0]:
b.backlog = b.backlog[1:]
default:
if len(b.backlog) == 0 {
select {
case b.c <- r:
return
default:
}
}
b.backlog = append(b.backlog, r)
}
func (b *recvBuffer) load() {