diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index ba6d88ad..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# binary file
-dbtester
diff --git a/README.md b/README.md
index 6ba1f450..15041fee 100644
--- a/README.md
+++ b/README.md
@@ -32,73 +32,481 @@ All logs and results can be found at https://console.cloud.google.com/storage/br
```
-+-----------------------------+-------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
-+-----------------------------+-------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA-SUM | 2 | 218 | 126 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 1,217,752 | 955,419 | 2,183,202 |
-| SECTORS-WRITTEN-DELTA-SUM | 702,780 | 11,846,404 | 3,991,232 |
-| AVG-DATA-SIZE-ON-DISK | 2.5 GB | 7.4 GB | 3.1 GB |
-| NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.0 GB | 5.5 GB |
-| NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.0 GB | 4.2 GB |
-| MAX-CPU-USAGE | 451.00 % | 800.00 % | 409.33 % |
-| MAX-MEMORY-USAGE | 1.3 GB | 3.7 GB | 4.7 GB |
-| TOTAL-SECONDS | 324.5626 sec | 335.0999 sec | 667.9389 sec |
-| MAX-THROUGHPUT | 36,479 req/sec | 41,799 req/sec | 15,969 req/sec |
-| AVG-THROUGHPUT | 3,081 req/sec | 2,961 req/sec | 1,497 req/sec |
-| MIN-THROUGHPUT | 79 req/sec | 0 req/sec | 49 req/sec |
-| FASTEST-LATENCY | 1.0313 ms | 1.1256 ms | 2.9151 ms |
-| AVG-LATENCY | 13.4807 ms | 25.5780 ms | 47.0926 ms |
-| SLOWEST-LATENCY | 261.8235 ms | 4260.5699 ms | 22260.1112 ms |
-| Latency p10 | 2.201212 ms | 2.528874 ms | 3.926152 ms |
-| Latency p25 | 5.636563 ms | 3.821957 ms | 7.640734 ms |
-| Latency p50 | 9.696159 ms | 6.656013 ms | 19.126381 ms |
-| Latency p75 | 16.202583 ms | 11.576279 ms | 54.750630 ms |
-| Latency p90 | 28.434395 ms | 14.472618 ms | 77.993718 ms |
-| Latency p95 | 44.336815 ms | 16.786180 ms | 91.026490 ms |
-| Latency p99 | 60.008762 ms | 479.797108 ms | 201.844359 ms |
-| Latency p99.9 | 84.831886 ms | 2725.947720 ms | 1502.535463 ms |
-| CLIENT-NETWORK-RECEIVE-SUM | 270 MB | 353 MB | 200 MB |
-| CLIENT-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
-| CLIENT-MAX-CPU-USAGE | 577.00 % | 496.00 % | 210.00 % |
-| CLIENT-MAX-MEMORY-USAGE | 355 MB | 3.3 GB | 227 MB |
-| CLIENT-ERROR-COUNT | 0 | 7,495 | 0 |
-+-----------------------------+-------------------+------------------------+-----------------------+
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 345.7743 sec | 320.9959 sec | 676.6576 sec |
+| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
+| MAX-THROUGHPUT | 35,245 req/sec | 37,580 req/sec | 15,488 req/sec |
+| AVG-THROUGHPUT | 2,892 req/sec | 3,108 req/sec | 1,477 req/sec |
+| MIN-THROUGHPUT | 23 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 1.0942 ms | 0.9952 ms | 3.0193 ms |
+| AVG-LATENCY | 14.0207 ms | 34.9720 ms | 44.3717 ms |
+| SLOWEST-LATENCY | 101.5395 ms | 2334.6007 ms | 3475.2713 ms |
+| Latency p10 | 2.308513 ms | 2.378813 ms | 3.971904 ms |
+| Latency p25 | 5.879109 ms | 3.595997 ms | 7.811056 ms |
+| Latency p50 | 10.100823 ms | 6.320842 ms | 20.224796 ms |
+| Latency p75 | 17.160120 ms | 12.677824 ms | 56.790033 ms |
+| Latency p90 | 28.890553 ms | 21.506040 ms | 89.507900 ms |
+| Latency p95 | 44.861387 ms | 30.713207 ms | 106.807611 ms |
+| Latency p99 | 62.570152 ms | 1186.951737 ms | 301.241777 ms |
+| Latency p99.9 | 87.467729 ms | 2241.127019 ms | 2634.872172 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.4 GB | 5.5 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.4 GB | 4.3 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 271 MB | 356 MB | 202 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
+| SERVER-MAX-CPU-USAGE | 449.90 % | 558.97 % | 421.60 % |
+| SERVER-MAX-MEMORY-USAGE | 1.4 GB | 3.9 GB | 4.8 GB |
+| CLIENT-MAX-CPU-USAGE | 552.00 % | 617.80 % | 224.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 361 MB | 4.4 GB | 225 MB |
+| CLIENT-ERROR-COUNT | 0 | 2,093 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 3 | 221 | 11 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 1,222,851 | 960,275 | 2,333,199 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 739,936 | 12,769,072 | 4,013,148 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 2.4 GB | 8.8 GB | 3.0 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: connection closed" (count 1,747)
+"zk: could not connect to a server" (count 346)
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+##### Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 37.4731 sec | 63.8379 sec | 309.0797 sec |
+| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
+| MAX-THROUGHPUT | 32,555 req/sec | 38,537 req/sec | 16,919 req/sec |
+| AVG-THROUGHPUT | 26,685 req/sec | 15,656 req/sec | 3,235 req/sec |
+| MIN-THROUGHPUT | 15,350 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 4.5030 ms | 2.3895 ms | 14.5025 ms |
+| AVG-LATENCY | 26.1688 ms | 17.9204 ms | 154.4720 ms |
+| SLOWEST-LATENCY | 205.8298 ms | 3471.7581 ms | 21463.6662 ms |
+| Latency p10 | 10.580892 ms | 5.948893 ms | 29.430795 ms |
+| Latency p25 | 12.626734 ms | 6.817741 ms | 34.096243 ms |
+| Latency p50 | 18.452075 ms | 7.718642 ms | 42.522161 ms |
+| Latency p75 | 26.930691 ms | 8.659562 ms | 63.027422 ms |
+| Latency p90 | 49.843748 ms | 9.750484 ms | 263.017095 ms |
+| Latency p95 | 67.991988 ms | 10.757740 ms | 601.571541 ms |
+| Latency p99 | 135.153213 ms | 114.903303 ms | 1237.545701 ms |
+| Latency p99.9 | 160.393852 ms | 2248.915050 ms | 11496.380241 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 4.9 GB | 5.4 GB | 14 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.8 GB | 4.3 GB | 12 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 274 MB | 351 MB | 211 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.4 GB | 1.4 GB | 1.5 GB |
+| SERVER-MAX-CPU-USAGE | 416.67 % | 710.17 % | 410.67 % |
+| SERVER-MAX-MEMORY-USAGE | 1.2 GB | 4.6 GB | 5.9 GB |
+| CLIENT-MAX-CPU-USAGE | 448.00 % | 365.00 % | 223.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 219 MB | 1.9 GB | 90 MB |
+| CLIENT-ERROR-COUNT | 0 | 509 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 3 | 253 | 162 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 110,436 | 101,558 | 665,193 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 371,988 | 9,306,936 | 37,002,460 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 2.8 GB | 7.1 GB | 2.9 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: could not connect to a server" (count 208)
+"zk: connection closed" (count 301)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+##### Write 1M keys, 256-byte key, 1KB value, 1,000 client
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 36.5547 sec | 59.5935 sec | 244.8620 sec |
+| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
+| MAX-THROUGHPUT | 35,025 req/sec | 47,693 req/sec | 15,146 req/sec |
+| AVG-THROUGHPUT | 27,356 req/sec | 16,697 req/sec | 4,083 req/sec |
+| MIN-THROUGHPUT | 228 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 4.1857 ms | 1.4036 ms | 27.1684 ms |
+| AVG-LATENCY | 36.4506 ms | 46.1962 ms | 244.4663 ms |
+| SLOWEST-LATENCY | 233.1590 ms | 6787.1829 ms | 30479.0204 ms |
+| Latency p10 | 14.321495 ms | 12.447591 ms | 66.233418 ms |
+| Latency p25 | 17.784730 ms | 16.822188 ms | 74.271576 ms |
+| Latency p50 | 23.783217 ms | 20.026128 ms | 92.736772 ms |
+| Latency p75 | 44.930445 ms | 23.615952 ms | 151.332505 ms |
+| Latency p90 | 67.957086 ms | 31.726640 ms | 338.858136 ms |
+| Latency p95 | 121.316986 ms | 78.842487 ms | 696.780894 ms |
+| Latency p99 | 163.614045 ms | 821.197693 ms | 1887.708027 ms |
+| Latency p99.9 | 187.122508 ms | 2709.006521 ms | 20942.858889 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 5.0 GB | 5.3 GB | 6.6 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.2 GB | 5.4 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 282 MB | 357 MB | 243 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.4 GB | 1.4 GB | 1.5 GB |
+| SERVER-MAX-CPU-USAGE | 451.00 % | 723.67 % | 436.67 % |
+| SERVER-MAX-MEMORY-USAGE | 1.2 GB | 4.7 GB | 4.9 GB |
+| CLIENT-MAX-CPU-USAGE | 554.00 % | 1227.00 % | 218.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 264 MB | 5.5 GB | 114 MB |
+| CLIENT-ERROR-COUNT | 0 | 4,962 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 74 | 315 | 102 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 100,644 | 82,186 | 481,109 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 442,860 | 8,179,180 | 20,434,060 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 2.7 GB | 7.3 GB | 3.0 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: could not connect to a server" (count 3,301)
+"zk: connection closed" (count 1,661)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+##### Write 3-million keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 141.1728 sec | 4134.1565 sec | 2979.6229 sec |
+| TOTAL-REQUEST-NUMBER | 3,000,000 | 3,000,000 | 3,000,000 |
+| MAX-THROUGHPUT | 32,215 req/sec | 38,259 req/sec | 15,784 req/sec |
+| AVG-THROUGHPUT | 21,250 req/sec | 465 req/sec | 1,006 req/sec |
+| MIN-THROUGHPUT | 9,081 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 3.6479 ms | 1.8912 ms | 10.3322 ms |
+| AVG-LATENCY | 32.9036 ms | 28.5018 ms | 496.5874 ms |
+| SLOWEST-LATENCY | 1030.3392 ms | 4729.8104 ms | 34484.1252 ms |
+| Latency p10 | 10.882650 ms | 5.694308 ms | 35.045139 ms |
+| Latency p25 | 13.005974 ms | 6.357600 ms | 44.711879 ms |
+| Latency p50 | 18.743999 ms | 7.379354 ms | 66.739638 ms |
+| Latency p75 | 31.054943 ms | 8.886502 ms | 116.150396 ms |
+| Latency p90 | 96.027241 ms | 11.474394 ms | 540.305996 ms |
+| Latency p95 | 123.844111 ms | 14.391699 ms | 1209.603980 ms |
+| Latency p99 | 148.837786 ms | 722.847010 ms | 11957.052613 ms |
+| Latency p99.9 | 162.994644 ms | 2457.522611 ms | 26068.610794 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 15 GB | 26 GB | 102 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 12 GB | 24 GB | 98 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 832 MB | 978 MB | 688 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 4.3 GB | 3.3 GB | 4.4 GB |
+| SERVER-MAX-CPU-USAGE | 421.00 % | 752.33 % | 410.67 % |
+| SERVER-MAX-MEMORY-USAGE | 2.8 GB | 7.1 GB | 17 GB |
+| CLIENT-MAX-CPU-USAGE | 442.00 % | 376.00 % | 217.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 265 MB | 1.9 GB | 174 MB |
+| CLIENT-ERROR-COUNT | 0 | 1,076,632 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 14 | 309 | 94,864 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 333,196 | 360,314 | 3,689,221 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 1,604,172 | 67,295,610 | 794,919,246 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 6.5 GB | 27 GB | 8.2 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: connection closed" (count 6,678)
+"zk: could not connect to a server" (count 1,069,954)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/agent/agent_cetcd.go b/agent/agent_cetcd.go
index 4c938eeb..ecd4a900 100644
--- a/agent/agent_cetcd.go
+++ b/agent/agent_cetcd.go
@@ -26,7 +26,7 @@ func startCetcd(fs *flags, t *transporterServer) error {
return fmt.Errorf("cetcd binary %q does not exist", globalFlags.cetcdExec)
}
- peerIPs := strings.Split(t.req.PeerIPString, "___")
+ peerIPs := strings.Split(t.req.PeerIPsString, "___")
clientURLs := make([]string, len(peerIPs))
for i, u := range peerIPs {
clientURLs[i] = fmt.Sprintf("http://%s:2379", u)
@@ -34,8 +34,8 @@ func startCetcd(fs *flags, t *transporterServer) error {
flags := []string{
// "-consuladdr", "0.0.0.0:8500",
- "-consuladdr", fmt.Sprintf("%s:8500", peerIPs[t.req.ServerIndex]),
- "-etcd", clientURLs[t.req.ServerIndex], // etcd endpoint
+ "-consuladdr", fmt.Sprintf("%s:8500", peerIPs[t.req.IpIndex]),
+ "-etcd", clientURLs[t.req.IpIndex], // etcd endpoint
}
flagString := strings.Join(flags, " ")
diff --git a/agent/agent_consul.go b/agent/agent_consul.go
index d3226c98..dce29da8 100644
--- a/agent/agent_consul.go
+++ b/agent/agent_consul.go
@@ -31,17 +31,17 @@ func startConsul(fs *flags, t *transporterServer) error {
return err
}
- peerIPs := strings.Split(t.req.PeerIPString, "___")
+ peerIPs := strings.Split(t.req.PeerIPsString, "___")
var flags []string
- switch t.req.ServerIndex {
+ switch t.req.IpIndex {
case 0: // leader
flags = []string{
"agent",
"-server",
"-data-dir", fs.consulDataDir,
- "-bind", peerIPs[t.req.ServerIndex],
- "-client", peerIPs[t.req.ServerIndex],
+ "-bind", peerIPs[t.req.IpIndex],
+ "-client", peerIPs[t.req.IpIndex],
"-bootstrap-expect", "3",
}
@@ -50,8 +50,8 @@ func startConsul(fs *flags, t *transporterServer) error {
"agent",
"-server",
"-data-dir", fs.consulDataDir,
- "-bind", peerIPs[t.req.ServerIndex],
- "-client", peerIPs[t.req.ServerIndex],
+ "-bind", peerIPs[t.req.IpIndex],
+ "-client", peerIPs[t.req.IpIndex],
"-join", peerIPs[0],
}
}
diff --git a/agent/agent_etcd.go b/agent/agent_etcd.go
index 76ac25ae..4bf710b1 100644
--- a/agent/agent_etcd.go
+++ b/agent/agent_etcd.go
@@ -31,7 +31,7 @@ func startEtcd(fs *flags, t *transporterServer) error {
return err
}
- peerIPs := strings.Split(t.req.PeerIPString, "___")
+ peerIPs := strings.Split(t.req.PeerIPsString, "___")
names := make([]string, len(peerIPs))
clientURLs := make([]string, len(peerIPs))
@@ -44,23 +44,23 @@ func startEtcd(fs *flags, t *transporterServer) error {
members[i] = fmt.Sprintf("%s=%s", names[i], peerURLs[i])
}
- qv := t.req.EtcdQuotaSizeBytes
+ qv := t.req.Etcdv3Config.QuotaSizeBytes
if qv > 8000000000 {
plog.Warningf("maximum etcd quota is 8GB (got %d)... resetting to 8GB...", qv)
qv = 8000000000
}
flags := []string{
- "--name", names[t.req.ServerIndex],
+ "--name", names[t.req.IpIndex],
"--data-dir", fs.etcdDataDir,
"--quota-backend-bytes", fmt.Sprintf("%d", qv),
- "--snapshot-count", fmt.Sprintf("%d", t.req.EtcdSnapCount),
+ "--snapshot-count", fmt.Sprintf("%d", t.req.Etcdv3Config.SnapCount),
- "--listen-client-urls", clientURLs[t.req.ServerIndex],
- "--advertise-client-urls", clientURLs[t.req.ServerIndex],
+ "--listen-client-urls", clientURLs[t.req.IpIndex],
+ "--advertise-client-urls", clientURLs[t.req.IpIndex],
- "--listen-peer-urls", peerURLs[t.req.ServerIndex],
- "--initial-advertise-peer-urls", peerURLs[t.req.ServerIndex],
+ "--listen-peer-urls", peerURLs[t.req.IpIndex],
+ "--initial-advertise-peer-urls", peerURLs[t.req.IpIndex],
"--initial-cluster-token", "dbtester-etcd-token",
"--initial-cluster", strings.Join(members, ","),
diff --git a/agent/agent_zetcd.go b/agent/agent_zetcd.go
index fffcea76..df5e3bf5 100644
--- a/agent/agent_zetcd.go
+++ b/agent/agent_zetcd.go
@@ -26,7 +26,7 @@ func startZetcd(fs *flags, t *transporterServer) error {
return fmt.Errorf("zetcd binary %q does not exist", globalFlags.zetcdExec)
}
- peerIPs := strings.Split(t.req.PeerIPString, "___")
+ peerIPs := strings.Split(t.req.PeerIPsString, "___")
clientURLs := make([]string, len(peerIPs))
for i, u := range peerIPs {
clientURLs[i] = fmt.Sprintf("http://%s:2379", u)
@@ -34,8 +34,8 @@ func startZetcd(fs *flags, t *transporterServer) error {
flags := []string{
// "-zkaddr", "0.0.0.0:2181",
- "-zkaddr", fmt.Sprintf("%s:2181", peerIPs[t.req.ServerIndex]),
- "-endpoint", clientURLs[t.req.ServerIndex],
+ "-zkaddr", fmt.Sprintf("%s:2181", peerIPs[t.req.IpIndex]),
+ "-endpoint", clientURLs[t.req.IpIndex],
}
flagString := strings.Join(flags, " ")
diff --git a/agent/agent_zookeeper.go b/agent/agent_zookeeper.go
index 1a1edae3..438ee3c7 100644
--- a/agent/agent_zookeeper.go
+++ b/agent/agent_zookeeper.go
@@ -30,47 +30,32 @@ dataDir={{.DataDir}}
clientPort={{.ClientPort}}
initLimit={{.InitLimit}}
syncLimit={{.SyncLimit}}
-maxClientCnxns={{.MaxClientCnxns}}
+maxClientCnxns={{.MaxClientConnections}}
snapCount={{.SnapCount}}
{{range .Peers}}server.{{.MyID}}={{.IP}}:2888:3888
{{end}}
`
-
- // this is Zookeeper default configuration
- // http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
- zkConfigDefault = ZookeeperConfig{
- TickTime: 2000,
- ClientPort: "2181",
- InitLimit: 5,
- SyncLimit: 5,
- MaxClientCnxns: 60,
- Peers: []ZookeeperPeer{
- {MyID: 1, IP: ""},
- {MyID: 2, IP: ""},
- {MyID: 3, IP: ""},
- },
- }
)
+// ZookeeperConfig is zookeeper configuration.
+// http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
+type ZookeeperConfig struct {
+ TickTime int64
+ DataDir string
+ ClientPort int64
+ InitLimit int64
+ SyncLimit int64
+ MaxClientConnections int64
+ SnapCount int64
+ Peers []ZookeeperPeer
+}
+
// ZookeeperPeer defines Zookeeper peer configuration.
type ZookeeperPeer struct {
MyID int
IP string
}
-// ZookeeperConfig is zookeeper configuration.
-// http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
-type ZookeeperConfig struct {
- TickTime int
- DataDir string
- ClientPort string
- InitLimit int
- SyncLimit int
- MaxClientCnxns int64
- SnapCount int64
- Peers []ZookeeperPeer
-}
-
var shell = os.Getenv("SHELL")
func init() {
@@ -99,23 +84,26 @@ func startZookeeper(fs *flags, t *transporterServer) error {
}
ipath := filepath.Join(fs.zkDataDir, "myid")
- plog.Infof("writing Zookeeper myid file %d to %s", t.req.ZookeeperMyID, ipath)
- if err := toFile(fmt.Sprintf("%d", t.req.ZookeeperMyID), ipath); err != nil {
+ plog.Infof("writing Zookeeper myid file %d to %s", t.req.ZookeeperConfig.MyID, ipath)
+ if err := toFile(fmt.Sprintf("%d", t.req.ZookeeperConfig.MyID), ipath); err != nil {
return err
}
- peerIPs := strings.Split(t.req.PeerIPString, "___")
+ peerIPs := strings.Split(t.req.PeerIPsString, "___")
peers := []ZookeeperPeer{}
for i := range peerIPs {
peers = append(peers, ZookeeperPeer{MyID: i + 1, IP: peerIPs[i]})
}
-
- cfg := zkConfigDefault
- cfg.DataDir = fs.zkDataDir
- cfg.Peers = peers
- cfg.SnapCount = t.req.ZookeeperSnapCount
- cfg.MaxClientCnxns = t.req.ZookeeperMaxClientCnxns
-
+ cfg := ZookeeperConfig{
+ TickTime: t.req.ZookeeperConfig.TickTime,
+ DataDir: fs.zkDataDir,
+ ClientPort: t.req.ZookeeperConfig.ClientPort,
+ InitLimit: t.req.ZookeeperConfig.InitLimit,
+ SyncLimit: t.req.ZookeeperConfig.SyncLimit,
+ MaxClientConnections: t.req.ZookeeperConfig.MaxClientConnections,
+ Peers: peers,
+ SnapCount: t.req.ZookeeperConfig.SnapCount,
+ }
tpl := template.Must(template.New("zkTemplate").Parse(zkTemplate))
buf := new(bytes.Buffer)
if err := tpl.Execute(buf, cfg); err != nil {
diff --git a/agent/agentpb/message.pb.go b/agent/agentpb/message.pb.go
deleted file mode 100644
index 3ee1270a..00000000
--- a/agent/agentpb/message.pb.go
+++ /dev/null
@@ -1,1146 +0,0 @@
-// Code generated by protoc-gen-gogo.
-// source: agent/agentpb/message.proto
-// DO NOT EDIT!
-
-/*
- Package agentpb is a generated protocol buffer package.
-
- It is generated from these files:
- agent/agentpb/message.proto
-
- It has these top-level messages:
- Request
- Response
-*/
-package agentpb
-
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
-import _ "github.com/gogo/protobuf/gogoproto"
-
-import (
- context "golang.org/x/net/context"
- grpc "google.golang.org/grpc"
-)
-
-import io "io"
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
-
-type Request_Operation int32
-
-const (
- Request_Start Request_Operation = 0
- Request_Stop Request_Operation = 1
- Request_Heartbeat Request_Operation = 2
-)
-
-var Request_Operation_name = map[int32]string{
- 0: "Start",
- 1: "Stop",
- 2: "Heartbeat",
-}
-var Request_Operation_value = map[string]int32{
- "Start": 0,
- "Stop": 1,
- "Heartbeat": 2,
-}
-
-func (x Request_Operation) String() string {
- return proto.EnumName(Request_Operation_name, int32(x))
-}
-func (Request_Operation) EnumDescriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 0} }
-
-type Request_Database int32
-
-const (
- Request_etcdv2 Request_Database = 0
- Request_etcdv3 Request_Database = 1
- Request_ZooKeeper Request_Database = 2
- Request_Consul Request_Database = 3
- Request_zetcd Request_Database = 4
- Request_cetcd Request_Database = 5
-)
-
-var Request_Database_name = map[int32]string{
- 0: "etcdv2",
- 1: "etcdv3",
- 2: "ZooKeeper",
- 3: "Consul",
- 4: "zetcd",
- 5: "cetcd",
-}
-var Request_Database_value = map[string]int32{
- "etcdv2": 0,
- "etcdv3": 1,
- "ZooKeeper": 2,
- "Consul": 3,
- "zetcd": 4,
- "cetcd": 5,
-}
-
-func (x Request_Database) String() string {
- return proto.EnumName(Request_Database_name, int32(x))
-}
-func (Request_Database) EnumDescriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 1} }
-
-type Request struct {
- Operation Request_Operation `protobuf:"varint,1,opt,name=operation,proto3,enum=agentpb.Request_Operation" json:"operation,omitempty"`
- Database Request_Database `protobuf:"varint,2,opt,name=database,proto3,enum=agentpb.Request_Database" json:"database,omitempty"`
- PeerIPString string `protobuf:"bytes,3,opt,name=peerIPString,proto3" json:"peerIPString,omitempty"`
- // ServerIPIndex is the index in peerIPs that points to the
- // corresponding remote IP.
- ServerIndex uint32 `protobuf:"varint,4,opt,name=serverIndex,proto3" json:"serverIndex,omitempty"`
- // TestName prefixes all logs to be generated in agent.
- TestName string `protobuf:"bytes,5,opt,name=testName,proto3" json:"testName,omitempty"`
- // ZookeeperMyID is myid that needs to be stored as a file in the remote machine.
- ZookeeperMyID uint32 `protobuf:"varint,6,opt,name=zookeeperMyID,proto3" json:"zookeeperMyID,omitempty"`
- // EtcdSnapCount is 100,000 by default.
- EtcdSnapCount int64 `protobuf:"varint,7,opt,name=etcdSnapCount,proto3" json:"etcdSnapCount,omitempty"`
- // EtcdQuotaSizeBytes is the backend size limit in bytes.
- // 0 defaults to low space quota (2 GB).
- EtcdQuotaSizeBytes int64 `protobuf:"varint,8,opt,name=etcdQuotaSizeBytes,proto3" json:"etcdQuotaSizeBytes,omitempty"`
- // ZookeeperSnapCount is 100,000 by default.
- ZookeeperSnapCount int64 `protobuf:"varint,9,opt,name=zookeeperSnapCount,proto3" json:"zookeeperSnapCount,omitempty"`
- // ZookeeperMaxClientCnxns limits the number of concurrent connections
- // (at the socket level) that a single client, identified by IP address.
- ZookeeperMaxClientCnxns int64 `protobuf:"varint,10,opt,name=zookeeperMaxClientCnxns,proto3" json:"zookeeperMaxClientCnxns,omitempty"`
- // ClientNum is current number of clients.
- ClientNum int64 `protobuf:"varint,11,opt,name=clientNum,proto3" json:"clientNum,omitempty"`
- // UploadLogs is true if automatic log-uploading is needed.
- // Currently only support Google Cloud Storage.
- UploadLogs bool `protobuf:"varint,100,opt,name=uploadLogs,proto3" json:"uploadLogs,omitempty"`
- // GoogleCloudProjectName is the project name to use
- // to upload logs.
- GoogleCloudProjectName string `protobuf:"bytes,101,opt,name=googleCloudProjectName,proto3" json:"googleCloudProjectName,omitempty"`
- // GoogleCloudStorageKey is the key to be used to upload
- // data and logs to Google Cloud Storage and others.
- GoogleCloudStorageKey string `protobuf:"bytes,102,opt,name=googleCloudStorageKey,proto3" json:"googleCloudStorageKey,omitempty"`
- // GoogleCloudStorageBucketName is the bucket name to store all data and logs.
- GoogleCloudStorageBucketName string `protobuf:"bytes,103,opt,name=googleCloudStorageBucketName,proto3" json:"googleCloudStorageBucketName,omitempty"`
- // GoogleCloudStorageSubDirectory is the sub-directory name to store data.
- GoogleCloudStorageSubDirectory string `protobuf:"bytes,104,opt,name=googleCloudStorageSubDirectory,proto3" json:"googleCloudStorageSubDirectory,omitempty"`
-}
-
-func (m *Request) Reset() { *m = Request{} }
-func (m *Request) String() string { return proto.CompactTextString(m) }
-func (*Request) ProtoMessage() {}
-func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0} }
-
-type Response struct {
- Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
- // Datasize is the data size of the database on disk.
- // It measures after database is requested to stop.
- Datasize int64 `protobuf:"varint,2,opt,name=datasize,proto3" json:"datasize,omitempty"`
-}
-
-func (m *Response) Reset() { *m = Response{} }
-func (m *Response) String() string { return proto.CompactTextString(m) }
-func (*Response) ProtoMessage() {}
-func (*Response) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{1} }
-
-func init() {
- proto.RegisterType((*Request)(nil), "agentpb.Request")
- proto.RegisterType((*Response)(nil), "agentpb.Response")
- proto.RegisterEnum("agentpb.Request_Operation", Request_Operation_name, Request_Operation_value)
- proto.RegisterEnum("agentpb.Request_Database", Request_Database_name, Request_Database_value)
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
-
-// Client API for Transporter service
-
-type TransporterClient interface {
- Transfer(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error)
-}
-
-type transporterClient struct {
- cc *grpc.ClientConn
-}
-
-func NewTransporterClient(cc *grpc.ClientConn) TransporterClient {
- return &transporterClient{cc}
-}
-
-func (c *transporterClient) Transfer(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) {
- out := new(Response)
- err := grpc.Invoke(ctx, "/agentpb.Transporter/Transfer", in, out, c.cc, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// Server API for Transporter service
-
-type TransporterServer interface {
- Transfer(context.Context, *Request) (*Response, error)
-}
-
-func RegisterTransporterServer(s *grpc.Server, srv TransporterServer) {
- s.RegisterService(&_Transporter_serviceDesc, srv)
-}
-
-func _Transporter_Transfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(Request)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(TransporterServer).Transfer(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/agentpb.Transporter/Transfer",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(TransporterServer).Transfer(ctx, req.(*Request))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Transporter_serviceDesc = grpc.ServiceDesc{
- ServiceName: "agentpb.Transporter",
- HandlerType: (*TransporterServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Transfer",
- Handler: _Transporter_Transfer_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "agent/agentpb/message.proto",
-}
-
-func (m *Request) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalTo(dAtA)
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Request) MarshalTo(dAtA []byte) (int, error) {
- var i int
- _ = i
- var l int
- _ = l
- if m.Operation != 0 {
- dAtA[i] = 0x8
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.Operation))
- }
- if m.Database != 0 {
- dAtA[i] = 0x10
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.Database))
- }
- if len(m.PeerIPString) > 0 {
- dAtA[i] = 0x1a
- i++
- i = encodeVarintMessage(dAtA, i, uint64(len(m.PeerIPString)))
- i += copy(dAtA[i:], m.PeerIPString)
- }
- if m.ServerIndex != 0 {
- dAtA[i] = 0x20
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.ServerIndex))
- }
- if len(m.TestName) > 0 {
- dAtA[i] = 0x2a
- i++
- i = encodeVarintMessage(dAtA, i, uint64(len(m.TestName)))
- i += copy(dAtA[i:], m.TestName)
- }
- if m.ZookeeperMyID != 0 {
- dAtA[i] = 0x30
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.ZookeeperMyID))
- }
- if m.EtcdSnapCount != 0 {
- dAtA[i] = 0x38
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.EtcdSnapCount))
- }
- if m.EtcdQuotaSizeBytes != 0 {
- dAtA[i] = 0x40
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.EtcdQuotaSizeBytes))
- }
- if m.ZookeeperSnapCount != 0 {
- dAtA[i] = 0x48
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.ZookeeperSnapCount))
- }
- if m.ZookeeperMaxClientCnxns != 0 {
- dAtA[i] = 0x50
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.ZookeeperMaxClientCnxns))
- }
- if m.ClientNum != 0 {
- dAtA[i] = 0x58
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.ClientNum))
- }
- if m.UploadLogs {
- dAtA[i] = 0xa0
- i++
- dAtA[i] = 0x6
- i++
- if m.UploadLogs {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i++
- }
- if len(m.GoogleCloudProjectName) > 0 {
- dAtA[i] = 0xaa
- i++
- dAtA[i] = 0x6
- i++
- i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudProjectName)))
- i += copy(dAtA[i:], m.GoogleCloudProjectName)
- }
- if len(m.GoogleCloudStorageKey) > 0 {
- dAtA[i] = 0xb2
- i++
- dAtA[i] = 0x6
- i++
- i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudStorageKey)))
- i += copy(dAtA[i:], m.GoogleCloudStorageKey)
- }
- if len(m.GoogleCloudStorageBucketName) > 0 {
- dAtA[i] = 0xba
- i++
- dAtA[i] = 0x6
- i++
- i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudStorageBucketName)))
- i += copy(dAtA[i:], m.GoogleCloudStorageBucketName)
- }
- if len(m.GoogleCloudStorageSubDirectory) > 0 {
- dAtA[i] = 0xc2
- i++
- dAtA[i] = 0x6
- i++
- i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudStorageSubDirectory)))
- i += copy(dAtA[i:], m.GoogleCloudStorageSubDirectory)
- }
- return i, nil
-}
-
-func (m *Response) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalTo(dAtA)
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *Response) MarshalTo(dAtA []byte) (int, error) {
- var i int
- _ = i
- var l int
- _ = l
- if m.Success {
- dAtA[i] = 0x8
- i++
- if m.Success {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i++
- }
- if m.Datasize != 0 {
- dAtA[i] = 0x10
- i++
- i = encodeVarintMessage(dAtA, i, uint64(m.Datasize))
- }
- return i, nil
-}
-
-func encodeFixed64Message(dAtA []byte, offset int, v uint64) int {
- dAtA[offset] = uint8(v)
- dAtA[offset+1] = uint8(v >> 8)
- dAtA[offset+2] = uint8(v >> 16)
- dAtA[offset+3] = uint8(v >> 24)
- dAtA[offset+4] = uint8(v >> 32)
- dAtA[offset+5] = uint8(v >> 40)
- dAtA[offset+6] = uint8(v >> 48)
- dAtA[offset+7] = uint8(v >> 56)
- return offset + 8
-}
-func encodeFixed32Message(dAtA []byte, offset int, v uint32) int {
- dAtA[offset] = uint8(v)
- dAtA[offset+1] = uint8(v >> 8)
- dAtA[offset+2] = uint8(v >> 16)
- dAtA[offset+3] = uint8(v >> 24)
- return offset + 4
-}
-func encodeVarintMessage(dAtA []byte, offset int, v uint64) int {
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
- }
- dAtA[offset] = uint8(v)
- return offset + 1
-}
-func (m *Request) Size() (n int) {
- var l int
- _ = l
- if m.Operation != 0 {
- n += 1 + sovMessage(uint64(m.Operation))
- }
- if m.Database != 0 {
- n += 1 + sovMessage(uint64(m.Database))
- }
- l = len(m.PeerIPString)
- if l > 0 {
- n += 1 + l + sovMessage(uint64(l))
- }
- if m.ServerIndex != 0 {
- n += 1 + sovMessage(uint64(m.ServerIndex))
- }
- l = len(m.TestName)
- if l > 0 {
- n += 1 + l + sovMessage(uint64(l))
- }
- if m.ZookeeperMyID != 0 {
- n += 1 + sovMessage(uint64(m.ZookeeperMyID))
- }
- if m.EtcdSnapCount != 0 {
- n += 1 + sovMessage(uint64(m.EtcdSnapCount))
- }
- if m.EtcdQuotaSizeBytes != 0 {
- n += 1 + sovMessage(uint64(m.EtcdQuotaSizeBytes))
- }
- if m.ZookeeperSnapCount != 0 {
- n += 1 + sovMessage(uint64(m.ZookeeperSnapCount))
- }
- if m.ZookeeperMaxClientCnxns != 0 {
- n += 1 + sovMessage(uint64(m.ZookeeperMaxClientCnxns))
- }
- if m.ClientNum != 0 {
- n += 1 + sovMessage(uint64(m.ClientNum))
- }
- if m.UploadLogs {
- n += 3
- }
- l = len(m.GoogleCloudProjectName)
- if l > 0 {
- n += 2 + l + sovMessage(uint64(l))
- }
- l = len(m.GoogleCloudStorageKey)
- if l > 0 {
- n += 2 + l + sovMessage(uint64(l))
- }
- l = len(m.GoogleCloudStorageBucketName)
- if l > 0 {
- n += 2 + l + sovMessage(uint64(l))
- }
- l = len(m.GoogleCloudStorageSubDirectory)
- if l > 0 {
- n += 2 + l + sovMessage(uint64(l))
- }
- return n
-}
-
-func (m *Response) Size() (n int) {
- var l int
- _ = l
- if m.Success {
- n += 2
- }
- if m.Datasize != 0 {
- n += 1 + sovMessage(uint64(m.Datasize))
- }
- return n
-}
-
-func sovMessage(x uint64) (n int) {
- for {
- n++
- x >>= 7
- if x == 0 {
- break
- }
- }
- return n
-}
-func sozMessage(x uint64) (n int) {
- return sovMessage(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (m *Request) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Request: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Operation", wireType)
- }
- m.Operation = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Operation |= (Request_Operation(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Database", wireType)
- }
- m.Database = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Database |= (Request_Database(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PeerIPString", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- 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 ErrInvalidLengthMessage
- }
- postIndex := iNdEx + intStringLen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.PeerIPString = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ServerIndex", wireType)
- }
- m.ServerIndex = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ServerIndex |= (uint32(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TestName", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- 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 ErrInvalidLengthMessage
- }
- postIndex := iNdEx + intStringLen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.TestName = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 6:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ZookeeperMyID", wireType)
- }
- m.ZookeeperMyID = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ZookeeperMyID |= (uint32(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field EtcdSnapCount", wireType)
- }
- m.EtcdSnapCount = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.EtcdSnapCount |= (int64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 8:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field EtcdQuotaSizeBytes", wireType)
- }
- m.EtcdQuotaSizeBytes = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.EtcdQuotaSizeBytes |= (int64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 9:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ZookeeperSnapCount", wireType)
- }
- m.ZookeeperSnapCount = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ZookeeperSnapCount |= (int64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 10:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ZookeeperMaxClientCnxns", wireType)
- }
- m.ZookeeperMaxClientCnxns = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ZookeeperMaxClientCnxns |= (int64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 11:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClientNum", wireType)
- }
- m.ClientNum = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.ClientNum |= (int64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 100:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field UploadLogs", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.UploadLogs = bool(v != 0)
- case 101:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudProjectName", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- 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 ErrInvalidLengthMessage
- }
- postIndex := iNdEx + intStringLen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.GoogleCloudProjectName = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 102:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudStorageKey", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- 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 ErrInvalidLengthMessage
- }
- postIndex := iNdEx + intStringLen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.GoogleCloudStorageKey = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 103:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudStorageBucketName", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- 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 ErrInvalidLengthMessage
- }
- postIndex := iNdEx + intStringLen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.GoogleCloudStorageBucketName = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 104:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudStorageSubDirectory", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- 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 ErrInvalidLengthMessage
- }
- postIndex := iNdEx + intStringLen
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.GoogleCloudStorageSubDirectory = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipMessage(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMessage
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Response) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Response: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Success = bool(v != 0)
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Datasize", wireType)
- }
- m.Datasize = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Datasize |= (int64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := skipMessage(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if skippy < 0 {
- return ErrInvalidLengthMessage
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func skipMessage(dAtA []byte) (n int, err error) {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- wireType := int(wire & 0x7)
- switch wireType {
- case 0:
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- iNdEx++
- if dAtA[iNdEx-1] < 0x80 {
- break
- }
- }
- return iNdEx, nil
- case 1:
- iNdEx += 8
- return iNdEx, nil
- case 2:
- var length int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- length |= (int(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- iNdEx += length
- if length < 0 {
- return 0, ErrInvalidLengthMessage
- }
- return iNdEx, nil
- case 3:
- for {
- var innerWire uint64
- var start int = iNdEx
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowMessage
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- innerWire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- innerWireType := int(innerWire & 0x7)
- if innerWireType == 4 {
- break
- }
- next, err := skipMessage(dAtA[start:])
- if err != nil {
- return 0, err
- }
- iNdEx = start + next
- }
- return iNdEx, nil
- case 4:
- return iNdEx, nil
- case 5:
- iNdEx += 4
- return iNdEx, nil
- default:
- return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
- }
- }
- panic("unreachable")
-}
-
-var (
- ErrInvalidLengthMessage = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowMessage = fmt.Errorf("proto: integer overflow")
-)
-
-func init() { proto.RegisterFile("agent/agentpb/message.proto", fileDescriptorMessage) }
-
-var fileDescriptorMessage = []byte{
- // 596 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xcd, 0x6e, 0xd3, 0x4e,
- 0x10, 0x8f, 0x9b, 0xb6, 0xb1, 0xa7, 0xff, 0xfe, 0x65, 0x56, 0x7c, 0x2c, 0xa1, 0xb2, 0xa2, 0x88,
- 0x43, 0x2e, 0x24, 0xa2, 0x05, 0xd4, 0x63, 0x95, 0x54, 0x88, 0xaa, 0x50, 0x8a, 0xcd, 0x89, 0xdb,
- 0xda, 0x99, 0xba, 0xa6, 0x89, 0xc7, 0xec, 0xae, 0xab, 0x26, 0x27, 0x1e, 0x83, 0x47, 0xea, 0x91,
- 0x47, 0x80, 0xf2, 0x22, 0xc8, 0xeb, 0xd4, 0x49, 0x49, 0x0b, 0x97, 0x68, 0x7e, 0x5f, 0x33, 0xd1,
- 0xee, 0x8e, 0xe1, 0x89, 0x88, 0x31, 0xd5, 0x3d, 0xf3, 0x9b, 0x85, 0xbd, 0x31, 0x2a, 0x25, 0x62,
- 0xec, 0x66, 0x92, 0x34, 0xb1, 0xc6, 0x8c, 0x6e, 0x3e, 0x8b, 0x13, 0x7d, 0x9a, 0x87, 0xdd, 0x88,
- 0xc6, 0xbd, 0x98, 0x62, 0xea, 0x19, 0x3d, 0xcc, 0x4f, 0x0c, 0x32, 0xc0, 0x54, 0x65, 0xae, 0xfd,
- 0xb5, 0x01, 0x0d, 0x1f, 0xbf, 0xe4, 0xa8, 0x34, 0xdb, 0x05, 0x87, 0x32, 0x94, 0x42, 0x27, 0x94,
- 0x72, 0xab, 0x65, 0x75, 0xfe, 0xdf, 0x6e, 0x76, 0x67, 0x7d, 0xbb, 0x33, 0x53, 0xf7, 0xfd, 0xb5,
- 0xc3, 0x9f, 0x9b, 0xd9, 0x4b, 0xb0, 0x87, 0x42, 0x8b, 0x50, 0x28, 0xe4, 0x2b, 0x26, 0xf8, 0x78,
- 0x29, 0xb8, 0x3f, 0x33, 0xf8, 0x95, 0x95, 0xb5, 0xe1, 0xbf, 0x0c, 0x51, 0x1e, 0x1c, 0x07, 0x5a,
- 0x26, 0x69, 0xcc, 0xeb, 0x2d, 0xab, 0xe3, 0xf8, 0x37, 0x38, 0xd6, 0x82, 0x0d, 0x85, 0xf2, 0x1c,
- 0xe5, 0x41, 0x3a, 0xc4, 0x0b, 0xbe, 0xda, 0xb2, 0x3a, 0x9b, 0xfe, 0x22, 0xc5, 0x9a, 0x60, 0x6b,
- 0x54, 0xfa, 0x48, 0x8c, 0x91, 0xaf, 0x99, 0x0e, 0x15, 0x66, 0x4f, 0x61, 0x73, 0x4a, 0x74, 0x86,
- 0x98, 0xa1, 0x7c, 0x37, 0x39, 0xd8, 0xe7, 0xeb, 0x26, 0x7f, 0x93, 0x2c, 0x5c, 0xa8, 0xa3, 0x61,
- 0x90, 0x8a, 0x6c, 0x40, 0x79, 0xaa, 0x79, 0xa3, 0x65, 0x75, 0xea, 0xfe, 0x4d, 0x92, 0x75, 0x81,
- 0x15, 0xc4, 0x87, 0x9c, 0xb4, 0x08, 0x92, 0x29, 0xf6, 0x27, 0x1a, 0x15, 0xb7, 0x8d, 0xf5, 0x16,
- 0xa5, 0xf0, 0x57, 0x63, 0xe6, 0xad, 0x9d, 0xd2, 0xbf, 0xac, 0xb0, 0x5d, 0x78, 0x34, 0xff, 0x5b,
- 0xe2, 0x62, 0x30, 0x4a, 0x30, 0xd5, 0x83, 0xf4, 0x22, 0x55, 0x1c, 0x4c, 0xe8, 0x2e, 0x99, 0x6d,
- 0x81, 0x13, 0x19, 0x78, 0x94, 0x8f, 0xf9, 0x86, 0xf1, 0xce, 0x09, 0xe6, 0x01, 0xe4, 0xd9, 0x88,
- 0xc4, 0xf0, 0x2d, 0xc5, 0x8a, 0x0f, 0x5b, 0x56, 0xc7, 0xf6, 0x17, 0x18, 0xf6, 0x0a, 0x1e, 0xc6,
- 0x44, 0xf1, 0x08, 0x07, 0x23, 0xca, 0x87, 0xc7, 0x92, 0x3e, 0x63, 0x54, 0x9e, 0x26, 0x9a, 0xd3,
- 0xbc, 0x43, 0x65, 0x2f, 0xe0, 0xc1, 0x82, 0x12, 0x68, 0x92, 0x22, 0xc6, 0x43, 0x9c, 0xf0, 0x13,
- 0x13, 0xbb, 0x5d, 0x64, 0x7d, 0xd8, 0x5a, 0x16, 0xfa, 0x79, 0x74, 0x86, 0xe5, 0xcc, 0xd8, 0x84,
- 0xff, 0xea, 0x61, 0xaf, 0xc1, 0x5b, 0xd6, 0x83, 0x3c, 0xdc, 0x4f, 0x24, 0x46, 0x9a, 0xe4, 0x84,
- 0x9f, 0x9a, 0x2e, 0xff, 0x70, 0xb5, 0x7b, 0xe0, 0x54, 0xcf, 0x99, 0x39, 0xb0, 0x16, 0x68, 0x21,
- 0xb5, 0x5b, 0x63, 0x36, 0xac, 0x06, 0x9a, 0x32, 0xd7, 0x62, 0x9b, 0xe0, 0xbc, 0x41, 0x21, 0x75,
- 0x88, 0x42, 0xbb, 0x2b, 0xed, 0x00, 0xec, 0xeb, 0x67, 0xcc, 0x00, 0xd6, 0x8b, 0x4b, 0x3f, 0xdf,
- 0x76, 0x6b, 0x55, 0xbd, 0x53, 0x46, 0x3e, 0x11, 0x1d, 0x9a, 0x7b, 0x72, 0x57, 0x0a, 0x69, 0x40,
- 0xa9, 0xca, 0x47, 0x6e, 0xbd, 0x18, 0x31, 0x2d, 0x7c, 0xee, 0x6a, 0x51, 0x46, 0xa6, 0x5c, 0x6b,
- 0xef, 0x81, 0xed, 0xa3, 0xca, 0x28, 0x55, 0xc8, 0x38, 0x34, 0x54, 0x1e, 0x45, 0xa8, 0x94, 0x59,
- 0x40, 0xdb, 0xbf, 0x86, 0xc5, 0x2b, 0x2f, 0xf6, 0x46, 0x25, 0xd3, 0x72, 0xc5, 0xea, 0x7e, 0x85,
- 0xb7, 0xf7, 0x60, 0xe3, 0xa3, 0x14, 0xa9, 0xca, 0x48, 0x6a, 0x94, 0xec, 0x39, 0xd8, 0x06, 0x9e,
- 0xa0, 0x64, 0xee, 0x9f, 0x7b, 0xd8, 0xbc, 0xb7, 0xc0, 0x94, 0x53, 0xdb, 0xb5, 0xfe, 0xfd, 0xcb,
- 0x9f, 0x5e, 0xed, 0xf2, 0xca, 0xb3, 0xbe, 0x5f, 0x79, 0xd6, 0x8f, 0x2b, 0xcf, 0xfa, 0xf6, 0xcb,
- 0xab, 0x85, 0xeb, 0xe6, 0x1b, 0xb1, 0xf3, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x25, 0x00, 0x4e,
- 0x7a, 0x04, 0x00, 0x00,
-}
diff --git a/agent/agentpb/message.proto b/agent/agentpb/message.proto
deleted file mode 100644
index 7ea9bb51..00000000
--- a/agent/agentpb/message.proto
+++ /dev/null
@@ -1,86 +0,0 @@
-syntax = "proto3";
-package agentpb;
-
-import "github.com/gogo/protobuf/gogoproto/gogo.proto";
-
-option (gogoproto.marshaler_all) = true;
-option (gogoproto.sizer_all) = true;
-option (gogoproto.unmarshaler_all) = true;
-option (gogoproto.goproto_getters_all) = false;
-
-service Transporter {
- rpc Transfer(Request) returns (Response) {}
-}
-
-message Request {
- enum Operation {
- Start = 0;
- Stop = 1;
- Heartbeat = 2;
- }
- enum Database {
- etcdv2 = 0;
- etcdv3 = 1;
- ZooKeeper = 2;
- Consul = 3;
- zetcd = 4;
- cetcd = 5;
- }
-
- Operation operation = 1;
- Database database = 2;
- string peerIPString = 3;
-
- // ServerIPIndex is the index in peerIPs that points to the
- // corresponding remote IP.
- uint32 serverIndex = 4;
-
- // TestName prefixes all logs to be generated in agent.
- string testName = 5;
-
- // ZookeeperMyID is myid that needs to be stored as a file in the remote machine.
- uint32 zookeeperMyID = 6;
-
- // EtcdSnapCount is 100,000 by default.
- int64 etcdSnapCount = 7;
-
- // EtcdQuotaSizeBytes is the backend size limit in bytes.
- // 0 defaults to low space quota (2 GB).
- int64 etcdQuotaSizeBytes = 8;
-
- // ZookeeperSnapCount is 100,000 by default.
- int64 zookeeperSnapCount = 9;
-
- // ZookeeperMaxClientCnxns limits the number of concurrent connections
- // (at the socket level) that a single client, identified by IP address.
- int64 zookeeperMaxClientCnxns = 10;
-
- // ClientNum is current number of clients.
- int64 clientNum = 11;
-
- // UploadLogs is true if automatic log-uploading is needed.
- // Currently only support Google Cloud Storage.
- bool uploadLogs = 100;
-
- // GoogleCloudProjectName is the project name to use
- // to upload logs.
- string googleCloudProjectName = 101;
-
- // GoogleCloudStorageKey is the key to be used to upload
- // data and logs to Google Cloud Storage and others.
- string googleCloudStorageKey = 102;
-
- // GoogleCloudStorageBucketName is the bucket name to store all data and logs.
- string googleCloudStorageBucketName = 103;
-
- // GoogleCloudStorageSubDirectory is the sub-directory name to store data.
- string googleCloudStorageSubDirectory = 104;
-}
-
-message Response {
- bool success = 1;
-
- // Datasize is the data size of the database on disk.
- // It measures after database is requested to stop.
- int64 datasize = 2;
-}
diff --git a/agent/command.go b/agent/command.go
index 46460d30..a7696bb4 100644
--- a/agent/command.go
+++ b/agent/command.go
@@ -19,7 +19,7 @@ import (
"os"
"path/filepath"
- "github.com/coreos/dbtester/agent/agentpb"
+ "github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/netutil"
"github.com/coreos/dbtester/pkg/ntp"
"github.com/coreos/pkg/capnslog"
@@ -71,8 +71,8 @@ func init() {
Command.PersistentFlags().StringVar(&globalFlags.agentLog, "agent-log", filepath.Join(homeDir(), "agent.log"), "agent log path.")
Command.PersistentFlags().StringVar(&globalFlags.databaseLog, "database-log", filepath.Join(homeDir(), "database.log"), "Database log path.")
- Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSV, "system-metrics-csv", filepath.Join(homeDir(), "system-metrics.csv"), "Raw system metrics data path.")
- Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSVInterpolated, "system-metrics-csv-interpolated", filepath.Join(homeDir(), "system-metrics-interpolated.csv"), "Interpolated system metrics data path.")
+ Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSV, "system-metrics-csv", filepath.Join(homeDir(), "server-system-metrics.csv"), "Raw system metrics data path.")
+ Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSVInterpolated, "system-metrics-csv-interpolated", filepath.Join(homeDir(), "server-system-metrics-interpolated.csv"), "Interpolated system metrics data path.")
Command.PersistentFlags().StringVar(&globalFlags.javaExec, "java-exec", "/usr/bin/java", "Java executable binary path (needed for Zookeeper).")
Command.PersistentFlags().StringVar(&globalFlags.etcdExec, "etcd-exec", filepath.Join(os.Getenv("GOPATH"), "bin/etcd"), "etcd executable binary path.")
@@ -95,7 +95,7 @@ func init() {
// Command implements 'agent' command.
var Command = &cobra.Command{
Use: "agent",
- Short: "Database 'agent' in remote servers (runs database, upload logs).",
+ Short: "Database 'agent' in remote servers.",
RunE: commandFunc,
}
@@ -119,7 +119,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
- agentpb.RegisterTransporterServer(grpcServer, sender)
+ dbtesterpb.RegisterTransporterServer(grpcServer, sender)
plog.Infof("agent started with gRPC %s (log path %q)", globalFlags.grpcPort, globalFlags.agentLog)
return grpcServer.Serve(ln)
diff --git a/agent/server.go b/agent/server.go
index 673cd485..14e4127b 100644
--- a/agent/server.go
+++ b/agent/server.go
@@ -22,15 +22,15 @@ import (
"syscall"
"time"
- "github.com/coreos/dbtester/agent/agentpb"
+ "github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/fileinspect"
"github.com/gyuho/psn"
"golang.org/x/net/context"
)
-// implements agentpb.TransporterServer
+// implements dbtesterpb.TransporterServer
type transporterServer struct {
- req agentpb.Request
+ req dbtesterpb.Request
databaseLogFile *os.File
proxyDatabaseLogfile *os.File
@@ -61,7 +61,7 @@ type transporterServer struct {
}
// NewServer returns a new server that implements gRPC interface.
-func NewServer() agentpb.TransporterServer {
+func NewServer() dbtesterpb.TransporterServer {
notifier := make(chan os.Signal, 1)
signal.Notify(notifier, syscall.SIGINT, syscall.SIGTERM)
@@ -73,12 +73,12 @@ func NewServer() agentpb.TransporterServer {
}
}
-func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*agentpb.Response, error) {
- if r != nil {
- plog.Infof("received gRPC request %q with database %q (clients: %d)", r.Operation, r.Database, r.ClientNum)
+func (t *transporterServer) Transfer(ctx context.Context, req *dbtesterpb.Request) (*dbtesterpb.Response, error) {
+ if req != nil {
+ plog.Infof("received gRPC request %q with database %q (clients: %d)", req.Operation, req.DatabaseID, req.CurrentClientNumber)
}
- if r.Operation == agentpb.Request_Start {
+ if req.Operation == dbtesterpb.Request_Start {
f, err := openToAppend(globalFlags.databaseLog)
if err != nil {
return nil, err
@@ -87,8 +87,8 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
plog.Infof("agent log path: %q", globalFlags.agentLog)
plog.Infof("database log path: %q", globalFlags.databaseLog)
- if r.Database == agentpb.Request_zetcd || r.Database == agentpb.Request_cetcd {
- proxyLog := globalFlags.databaseLog + "-" + t.req.Database.String()
+ if req.DatabaseID == dbtesterpb.Request_zetcd || req.DatabaseID == dbtesterpb.Request_cetcd {
+ proxyLog := globalFlags.databaseLog + "-" + t.req.DatabaseID.String()
pf, err := openToAppend(proxyLog)
if err != nil {
return nil, err
@@ -98,47 +98,47 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
}
plog.Infof("system metrics CSV path: %q", globalFlags.systemMetricsCSV)
- switch r.Database {
- case agentpb.Request_ZooKeeper:
+ switch req.DatabaseID {
+ case dbtesterpb.Request_zookeeper:
plog.Infof("Zookeeper working directory: %q", globalFlags.zkWorkDir)
plog.Infof("Zookeeper data directory: %q", globalFlags.zkDataDir)
plog.Infof("Zookeeper configuration path: %q", globalFlags.zkConfig)
- case agentpb.Request_etcdv2, agentpb.Request_etcdv3:
+ case dbtesterpb.Request_etcdv2, dbtesterpb.Request_etcdv3:
plog.Infof("etcd executable binary path: %q", globalFlags.etcdExec)
plog.Infof("etcd data directory: %q", globalFlags.etcdDataDir)
- case agentpb.Request_zetcd:
+ case dbtesterpb.Request_zetcd:
plog.Infof("zetcd executable binary path: %q", globalFlags.zetcdExec)
plog.Infof("zetcd data directory: %q", globalFlags.etcdDataDir)
- case agentpb.Request_cetcd:
+ case dbtesterpb.Request_cetcd:
plog.Infof("cetcd executable binary path: %q", globalFlags.cetcdExec)
plog.Infof("cetcd data directory: %q", globalFlags.etcdDataDir)
- case agentpb.Request_Consul:
+ case dbtesterpb.Request_consul:
plog.Infof("Consul executable binary path: %q", globalFlags.consulExec)
plog.Infof("Consul data directory: %q", globalFlags.consulDataDir)
}
// re-use configurations for next requests
- t.req = *r
+ t.req = *req
}
- if r.Operation == agentpb.Request_Heartbeat {
- t.req.ClientNum = r.ClientNum
+ if req.Operation == dbtesterpb.Request_Heartbeat {
+ t.req.CurrentClientNumber = req.CurrentClientNumber
}
var totalDatasize int64
- switch r.Operation {
- case agentpb.Request_Start:
- switch t.req.Database {
- case agentpb.Request_etcdv2, agentpb.Request_etcdv3, agentpb.Request_zetcd, agentpb.Request_cetcd:
+ switch req.Operation {
+ case dbtesterpb.Request_Start:
+ switch t.req.DatabaseID {
+ case dbtesterpb.Request_etcdv2, dbtesterpb.Request_etcdv3, dbtesterpb.Request_zetcd, dbtesterpb.Request_cetcd:
if err := startEtcd(&globalFlags, t); err != nil {
plog.Errorf("startEtcd error %v", err)
return nil, err
}
- switch t.req.Database {
- case agentpb.Request_zetcd:
+ switch t.req.DatabaseID {
+ case dbtesterpb.Request_zetcd:
if err := startZetcd(&globalFlags, t); err != nil {
plog.Errorf("startZetcd error %v", err)
return nil, err
@@ -151,7 +151,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
}
plog.Infof("exiting %q", t.proxyCmd.Path)
}()
- case agentpb.Request_cetcd:
+ case dbtesterpb.Request_cetcd:
if err := startCetcd(&globalFlags, t); err != nil {
plog.Errorf("startCetcd error %v", err)
return nil, err
@@ -165,18 +165,18 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
plog.Infof("exiting %q", t.proxyCmd.Path)
}()
}
- case agentpb.Request_ZooKeeper:
+ case dbtesterpb.Request_zookeeper:
if err := startZookeeper(&globalFlags, t); err != nil {
plog.Errorf("startZookeeper error %v", err)
return nil, err
}
- case agentpb.Request_Consul:
+ case dbtesterpb.Request_consul:
if err := startConsul(&globalFlags, t); err != nil {
plog.Errorf("startConsul error %v", err)
return nil, err
}
default:
- return nil, fmt.Errorf("unknown database %q", t.req.Database)
+ return nil, fmt.Errorf("unknown database %q", t.req.DatabaseID)
}
go func() {
@@ -193,7 +193,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
return nil, err
}
- case agentpb.Request_Stop:
+ case dbtesterpb.Request_Stop:
if t.cmd == nil {
return nil, fmt.Errorf("nil command")
}
@@ -216,7 +216,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
t.databaseLogFile.Sync()
t.databaseLogFile.Close()
}
- plog.Infof("stopped binary %q [PID: %d]", t.req.Database.String(), t.pid)
+ plog.Infof("stopped binary %q [PID: %d]", t.req.DatabaseID.String(), t.pid)
if t.proxyCmd != nil {
plog.Infof("sending %q to %q [PID: %d]", syscall.SIGINT, t.proxyCmd.Path, t.proxyPid)
@@ -229,7 +229,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
plog.Warningf("syscall.Kill failed with %v", err)
}
<-t.proxyCmdWait
- plog.Infof("stopped binary proxy for %q [PID: %d]", t.req.Database.String(), t.pid)
+ plog.Infof("stopped binary proxy for %q [PID: %d]", t.req.DatabaseID.String(), t.pid)
}
if t.proxyDatabaseLogfile != nil {
t.proxyDatabaseLogfile.Sync()
@@ -239,47 +239,47 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
t.uploadSig <- struct{}{}
<-t.csvReady
- if t.req.UploadLogs {
+ if t.req.TriggerLogUpload {
if err := uploadLog(&globalFlags, t); err != nil {
plog.Warningf("uploadLog error %v", err)
return nil, err
}
}
- dbs, err := measureDatabasSize(globalFlags, r.Database)
+ dbs, err := measureDatabasSize(globalFlags, req.DatabaseID)
if err != nil {
plog.Warningf("measureDatabasSize error %v", err)
return nil, err
}
totalDatasize = dbs
- case agentpb.Request_Heartbeat:
- plog.Infof("overwriting clients num %d to %q", t.req.ClientNum, t.clientNumPath)
- if err := toFile(fmt.Sprintf("%d", t.req.ClientNum), t.clientNumPath); err != nil {
+ case dbtesterpb.Request_Heartbeat:
+ plog.Infof("overwriting clients num %d to %q", t.req.CurrentClientNumber, t.clientNumPath)
+ if err := toFile(fmt.Sprintf("%d", t.req.CurrentClientNumber), t.clientNumPath); err != nil {
return nil, err
}
default:
- return nil, fmt.Errorf("Not implemented %v", r.Operation)
+ return nil, fmt.Errorf("Not implemented %v", req.Operation)
}
plog.Info("Transfer success!")
- return &agentpb.Response{Success: true, Datasize: totalDatasize}, nil
+ return &dbtesterpb.Response{Success: true, DatasizeOnDisk: totalDatasize}, nil
}
-func measureDatabasSize(flg flags, rdb agentpb.Request_Database) (int64, error) {
+func measureDatabasSize(flg flags, rdb dbtesterpb.Request_Database) (int64, error) {
switch rdb {
- case agentpb.Request_etcdv2:
+ case dbtesterpb.Request_etcdv2:
return fileinspect.Size(flg.etcdDataDir)
- case agentpb.Request_etcdv3:
+ case dbtesterpb.Request_etcdv3:
return fileinspect.Size(flg.etcdDataDir)
- case agentpb.Request_ZooKeeper:
+ case dbtesterpb.Request_zookeeper:
return fileinspect.Size(flg.zkDataDir)
- case agentpb.Request_Consul:
+ case dbtesterpb.Request_consul:
return fileinspect.Size(flg.consulDataDir)
- case agentpb.Request_cetcd:
+ case dbtesterpb.Request_cetcd:
return fileinspect.Size(flg.etcdDataDir)
- case agentpb.Request_zetcd:
+ case dbtesterpb.Request_zetcd:
return fileinspect.Size(flg.etcdDataDir)
default:
return 0, fmt.Errorf("uknown %q", rdb)
diff --git a/agent/server_system_metrics.go b/agent/server_system_metrics.go
index e6821349..4b372748 100644
--- a/agent/server_system_metrics.go
+++ b/agent/server_system_metrics.go
@@ -28,12 +28,12 @@ func startMetrics(fs *flags, t *transporterServer) (err error) {
return fmt.Errorf("cannot find process to track (%+v, %+v)", fs, t)
}
plog.Infof("starting collecting metrics [database %q | PID: %d | disk device: %q | network interface: %q]",
- t.req.Database, t.pid, fs.diskDevice, fs.networkInterface)
+ t.req.DatabaseID, t.pid, fs.diskDevice, fs.networkInterface)
if err = os.RemoveAll(fs.systemMetricsCSV); err != nil {
return err
}
- if err = toFile(fmt.Sprintf("%d", t.req.ClientNum), t.clientNumPath); err != nil {
+ if err = toFile(fmt.Sprintf("%d", t.req.CurrentClientNumber), t.clientNumPath); err != nil {
return err
}
diff --git a/agent/upload_log.go b/agent/upload_log.go
index ea96b343..80cdc63d 100644
--- a/agent/upload_log.go
+++ b/agent/upload_log.go
@@ -20,14 +20,14 @@ import (
"strings"
"time"
- "github.com/coreos/dbtester/agent/agentpb"
+ "github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/remotestorage"
)
// uploadLog starts cetcd. This assumes that etcd is already started.
func uploadLog(fs *flags, t *transporterServer) error {
- plog.Infof("stopped collecting metrics; uploading logs to storage %q", t.req.GoogleCloudProjectName)
- u, err := remotestorage.NewGoogleCloudStorage([]byte(t.req.GoogleCloudStorageKey), t.req.GoogleCloudProjectName)
+ plog.Infof("stopped collecting metrics; uploading logs to storage %q", t.req.Control.GoogleCloudProjectName)
+ u, err := remotestorage.NewGoogleCloudStorage([]byte(t.req.Control.GoogleCloudStorageKey), t.req.Control.GoogleCloudProjectName)
if err != nil {
return err
}
@@ -37,13 +37,13 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcDatabaseLogPath := fs.databaseLog
dstDatabaseLogPath := filepath.Base(fs.databaseLog)
- if !strings.HasPrefix(filepath.Base(fs.databaseLog), t.req.TestName) {
- dstDatabaseLogPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.databaseLog))
+ if !strings.HasPrefix(filepath.Base(fs.databaseLog), t.req.DatabaseTag) {
+ dstDatabaseLogPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.databaseLog))
}
- dstDatabaseLogPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstDatabaseLogPath)
+ dstDatabaseLogPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstDatabaseLogPath)
plog.Infof("uploading database log [%q -> %q]", srcDatabaseLogPath, dstDatabaseLogPath)
for k := 0; k < 30; k++ {
- if uerr = u.UploadFile(t.req.GoogleCloudStorageBucketName, srcDatabaseLogPath, dstDatabaseLogPath); uerr != nil {
+ if uerr = u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcDatabaseLogPath, dstDatabaseLogPath); uerr != nil {
plog.Warningf("UploadFile error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
@@ -57,17 +57,17 @@ func uploadLog(fs *flags, t *transporterServer) error {
}
{
- if t.req.Database == agentpb.Request_zetcd || t.req.Database == agentpb.Request_cetcd {
- dpath := fs.databaseLog + "-" + t.req.Database.String()
+ if t.req.DatabaseID == dbtesterpb.Request_zetcd || t.req.DatabaseID == dbtesterpb.Request_cetcd {
+ dpath := fs.databaseLog + "-" + t.req.DatabaseID.String()
srcDatabaseLogPath2 := dpath
dstDatabaseLogPath2 := filepath.Base(dpath)
- if !strings.HasPrefix(filepath.Base(dpath), t.req.TestName) {
- dstDatabaseLogPath2 = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(dpath))
+ if !strings.HasPrefix(filepath.Base(dpath), t.req.DatabaseTag) {
+ dstDatabaseLogPath2 = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(dpath))
}
- dstDatabaseLogPath2 = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstDatabaseLogPath2)
+ dstDatabaseLogPath2 = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstDatabaseLogPath2)
plog.Infof("uploading proxy-database log [%q -> %q]", srcDatabaseLogPath2, dstDatabaseLogPath2)
for k := 0; k < 30; k++ {
- if uerr = u.UploadFile(t.req.GoogleCloudStorageBucketName, srcDatabaseLogPath2, dstDatabaseLogPath2); uerr != nil {
+ if uerr = u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcDatabaseLogPath2, dstDatabaseLogPath2); uerr != nil {
plog.Warningf("UploadFile error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
@@ -84,14 +84,14 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcSysMetricsDataPath := fs.systemMetricsCSV
dstSysMetricsDataPath := filepath.Base(fs.systemMetricsCSV)
- if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSV), t.req.TestName) {
- dstSysMetricsDataPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.systemMetricsCSV))
+ if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSV), t.req.DatabaseTag) {
+ dstSysMetricsDataPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.systemMetricsCSV))
}
- dstSysMetricsDataPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstSysMetricsDataPath)
+ dstSysMetricsDataPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstSysMetricsDataPath)
plog.Infof("uploading system metrics data [%q -> %q]", srcSysMetricsDataPath, dstSysMetricsDataPath)
for k := 0; k < 30; k++ {
- if uerr := u.UploadFile(t.req.GoogleCloudStorageBucketName, srcSysMetricsDataPath, dstSysMetricsDataPath); uerr != nil {
- plog.Warningf("u.UploadFile error... sleep and retry... (%v)", uerr)
+ if uerr := u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcSysMetricsDataPath, dstSysMetricsDataPath); uerr != nil {
+ plog.Warningf("upload error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
} else {
@@ -106,14 +106,14 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcSysMetricsInterpolatedDataPath := fs.systemMetricsCSVInterpolated
dstSysMetricsInterpolatedDataPath := filepath.Base(fs.systemMetricsCSVInterpolated)
- if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSVInterpolated), t.req.TestName) {
- dstSysMetricsInterpolatedDataPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.systemMetricsCSVInterpolated))
+ if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSVInterpolated), t.req.DatabaseTag) {
+ dstSysMetricsInterpolatedDataPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.systemMetricsCSVInterpolated))
}
- dstSysMetricsInterpolatedDataPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstSysMetricsInterpolatedDataPath)
+ dstSysMetricsInterpolatedDataPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstSysMetricsInterpolatedDataPath)
plog.Infof("uploading system metrics interpolated data [%q -> %q]", srcSysMetricsInterpolatedDataPath, dstSysMetricsInterpolatedDataPath)
for k := 0; k < 30; k++ {
- if uerr := u.UploadFile(t.req.GoogleCloudStorageBucketName, srcSysMetricsInterpolatedDataPath, dstSysMetricsInterpolatedDataPath); uerr != nil {
- plog.Warningf("u.UploadFile error... sleep and retry... (%v)", uerr)
+ if uerr := u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcSysMetricsInterpolatedDataPath, dstSysMetricsInterpolatedDataPath); uerr != nil {
+ plog.Warningf("upload error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
} else {
@@ -128,13 +128,13 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcAgentLogPath := fs.agentLog
dstAgentLogPath := filepath.Base(fs.agentLog)
- if !strings.HasPrefix(filepath.Base(fs.agentLog), t.req.TestName) {
- dstAgentLogPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.agentLog))
+ if !strings.HasPrefix(filepath.Base(fs.agentLog), t.req.DatabaseTag) {
+ dstAgentLogPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.agentLog))
}
- dstAgentLogPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstAgentLogPath)
+ dstAgentLogPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstAgentLogPath)
plog.Infof("uploading agent logs [%q -> %q]", srcAgentLogPath, dstAgentLogPath)
for k := 0; k < 30; k++ {
- if uerr := u.UploadFile(t.req.GoogleCloudStorageBucketName, srcAgentLogPath, dstAgentLogPath); uerr != nil {
+ if uerr := u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcAgentLogPath, dstAgentLogPath); uerr != nil {
plog.Warningf("UploadFile error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
diff --git a/analyze/analyze_config.go b/analyze/analyze_config.go
deleted file mode 100644
index c984518e..00000000
--- a/analyze/analyze_config.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2017 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"
-)
-
-// RawData defines how to aggregate data from each machine.
-type RawData struct {
- Legend string `yaml:"legend"`
- OutputPath string `yaml:"output_path"`
- DataInterpolatedSystemMetricsPaths []string `yaml:"data_interpolated_system_metrics_paths"`
- DatasizeSummary string `yaml:"data_size_summary"`
- DataBenchmarkLatencyPercentile string `yaml:"data_benchmark_latency_percentile"`
- DataBenchmarkLatencySummary string `yaml:"data_benchmark_latency_summary"`
- DataBenchmarkThroughput string `yaml:"data_benchmark_throughput"`
- DataBenchmarkLatencyByKey string `yaml:"data_benchmark_latency_by_key"`
- DataBenchmarkMemoryByKey string `yaml:"data_benchmark_memory_by_key"`
- ClientSystemMetricsInterpolated string `yaml:"client_system_metrics_interpolated"`
- TotalRequests int `yaml:"total_requests"`
-}
-
-// Config defines analyze configuration.
-type Config struct {
- Title string `yaml:"title"`
- WorkDir string `yaml:"work_dir"`
- AllAggregatedPath string `yaml:"all_aggregated_path"`
- AllLatencyByKey string `yaml:"all_latency_by_key"`
- AllMemoryByKey string `yaml:"all_memory_by_key"`
- DataBenchmarkLatencyByKey string `yaml:"data_benchmark_latency_by_key"`
- DataBenchmarkMemoryByKey string `yaml:"data_benchmark_memory_by_key"`
- RawData []RawData `yaml:"raw_data"`
- PlotList []PlotConfig `yaml:"plot_list"`
- READMEConfig READMEConfig `yaml:"readme"`
-}
-
-// readConfig reads analyze configuration.
-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
-}
diff --git a/analyze/analyze_config.yaml b/analyze/analyze_config.yaml
deleted file mode 100644
index 5cb40cd5..00000000
--- a/analyze/analyze_config.yaml
+++ /dev/null
@@ -1,201 +0,0 @@
-title: Write 100K keys, 1000-client (etcd 100 TCP conns), 256-byte key, 1KB value
-work_dir: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated.csv
-all_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-latency-by-key-number.csv
-all_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-memory-by-key-number.csv
-total_requests: 100000
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 3 machines of 8 vCPUs + 16 GB Memory + 150 GB SSD
- - 1 machine(client) of 16 vCPUs + 30 GB Memory + 150 GB SSD
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
- - javac 1.8.0_111
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/README.md
- results:
- - title: Write 100K keys, 1000-client (etcd v3.1 100-conn), 256-byte key, 1KB value
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/analyze/analyze_config_test.go b/analyze/analyze_config_test.go
deleted file mode 100644
index 06ba8bf2..00000000
--- a/analyze/analyze_config_test.go
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2017 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 Test_readConfig(t *testing.T) {
- c, err := readConfig("analyze_config.yaml")
- if err != nil {
- t.Fatal(err)
- }
- if c.Title != `Write 100K keys, 1000-client (etcd 100 TCP conns), 256-byte key, 1KB value` {
- t.Fatalf("unexpected Title %q", c.Title)
- }
- if c.WorkDir != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys" {
- t.Fatalf("unexpected WorkDir %q", c.WorkDir)
- }
- if c.AllAggregatedPath != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated.csv" {
- t.Fatalf("unexpected AllAggregatedPath %q", c.AllAggregatedPath)
- }
- if c.AllLatencyByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-latency-by-key-number.csv" {
- t.Fatalf("unexpected AllLatencyByKey %q", c.AllLatencyByKey)
- }
- if c.AllMemoryByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-memory-by-key-number.csv" {
- t.Fatalf("unexpected AllMemoryByKey %q", c.AllMemoryByKey)
- }
-
- if c.RawData[0].Legend != "etcd v3.1 (Go 1.7.4)" {
- t.Fatalf("unexpected c.RawData[0].Legend %q", c.RawData[0].Legend)
- }
- if makeTag(c.RawData[0].Legend) != "etcd-v3.1-go1.7.4" {
- t.Fatalf("unexpected makeTag(c.RawData[0].Legend) %q", makeTag(c.RawData[0].Legend))
- }
- if c.RawData[0].OutputPath != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv" {
- t.Fatalf("unexpected c.RawData[0].OutputPath %q", c.RawData[0].OutputPath)
- }
- if c.RawData[0].DataInterpolatedSystemMetricsPaths[0] != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv" {
- t.Fatalf("unexpected c.RawData[0].DataInterpolatedSystemMetricsPaths[0] %q", c.RawData[0].DataInterpolatedSystemMetricsPaths[0])
- }
- if c.RawData[0].DatasizeSummary != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-size-summary.csv" {
- t.Fatalf("unexpected c.RawData[0].DatasizeSummary %q", c.RawData[0].DatasizeSummary)
- }
- if c.RawData[0].DataBenchmarkLatencyPercentile != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv" {
- t.Fatalf("unexpected c.RawData[0].DataBenchmarkLatencyPercentile %q", c.RawData[0].DataBenchmarkLatencyPercentile)
- }
- if c.RawData[0].DataBenchmarkLatencySummary != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv" {
- t.Fatalf("unexpected c.RawData[0].DataBenchmarkLatencySummary %q", c.RawData[0].DataBenchmarkLatencySummary)
- }
- if c.RawData[0].DataBenchmarkThroughput != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv" {
- t.Fatalf("unexpected c.RawData[0].DataBenchmarkThroughput %q", c.RawData[0].DataBenchmarkThroughput)
- }
- if c.RawData[0].DataBenchmarkLatencyByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv" {
- t.Fatalf("unexpected c.RawData[0].DataBenchmarkLatencyByKey %q", c.RawData[0].DataBenchmarkLatencyByKey)
- }
- if c.RawData[0].DataBenchmarkMemoryByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv" {
- t.Fatalf("unexpected c.RawData[0].DataBenchmarkMemoryByKey %q", c.RawData[0].DataBenchmarkMemoryByKey)
- }
- if c.RawData[0].ClientSystemMetricsInterpolated != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv" {
- t.Fatalf("unexpected c.RawData[0].ClientSystemMetricsInterpolated %q", c.RawData[0].ClientSystemMetricsInterpolated)
- }
-
- if c.READMEConfig.OutputPath != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/README.md" {
- t.Fatalf("unexpected %s", c.READMEConfig.OutputPath)
- }
- if c.READMEConfig.Results[0].Images[0].ImageTitle != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS" {
- t.Fatalf("unexpected %s", c.READMEConfig.Results[0].Images[0].ImageTitle)
- }
- if c.READMEConfig.Results[0].Images[0].ImagePath != "https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg" {
- t.Fatalf("unexpected %s", c.READMEConfig.Results[0].Images[0].ImagePath)
- }
- if c.READMEConfig.Results[0].Images[0].ImageType != "remote" {
- t.Fatalf("unexpected %s", c.READMEConfig.Results[0].Images[0].ImageType)
- }
-}
diff --git a/analyze/analyze_data_2_analyze_data.go b/analyze/analyze_data_2_analyze_data.go
index fc79d068..afc9d0fe 100644
--- a/analyze/analyze_data_2_analyze_data.go
+++ b/analyze/analyze_data_2_analyze_data.go
@@ -36,7 +36,7 @@ type analyzeData struct {
// aggregated from sysAgg and benchMetrics
aggregated dataframe.Frame
- csvOutputpath string
+ allAggregatedOutputPath string
}
// readSystemMetricsAll reads all system metric files
diff --git a/analyze/analyze_data_4_aggregate_all.go b/analyze/analyze_data_4_aggregate_all.go
index 6b4971f7..f3161f7c 100644
--- a/analyze/analyze_data_4_aggregate_all.go
+++ b/analyze/analyze_data_4_aggregate_all.go
@@ -23,7 +23,7 @@ import (
)
// aggregateAll aggregates all system metrics from 3+ nodes.
-func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int) error {
+func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int64) error {
colSys, err := data.sysAgg.Column("UNIX-SECOND")
if err != nil {
return err
@@ -471,5 +471,5 @@ func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int)
}
func (data *analyzeData) save() error {
- return data.aggregated.CSV(data.csvOutputpath)
+ return data.aggregated.CSV(data.allAggregatedOutputPath)
}
diff --git a/analyze/analyze_data_4_aggregate_timeseries.go b/analyze/analyze_data_4_aggregate_timeseries.go
index 9d421cfc..12481d38 100644
--- a/analyze/analyze_data_4_aggregate_timeseries.go
+++ b/analyze/analyze_data_4_aggregate_timeseries.go
@@ -16,7 +16,7 @@ package analyze
import "sort"
-func processTimeSeries(tslice []keyNumAndMemory, unit int64, totalRequests int) []keyNumAndMemory {
+func processTimeSeries(tslice []keyNumAndMemory, unit int64, totalRequests int64) []keyNumAndMemory {
sort.Sort(keyNumAndMemorys(tslice))
cumulKeyN := int64(0)
diff --git a/analyze/analyze_data_5_plot.go b/analyze/analyze_data_5_plot.go
index f477e2be..e8b8134a 100644
--- a/analyze/analyze_data_5_plot.go
+++ b/analyze/analyze_data_5_plot.go
@@ -17,8 +17,8 @@ package analyze
import (
"fmt"
"image/color"
- "strings"
+ "github.com/coreos/dbtester"
"github.com/gonum/plot"
"github.com/gonum/plot/plotter"
"github.com/gonum/plot/plotutil"
@@ -37,14 +37,6 @@ func init() {
plotter.DefaultGlyphStyle.Radius = vg.Points(2.0)
}
-// PlotConfig defines what to plot.
-type PlotConfig struct {
- Column string `yaml:"column"`
- XAxis string `yaml:"x_axis"`
- YAxis string `yaml:"y_axis"`
- OutputPathList []string `yaml:"output_path_list"`
-}
-
type pair struct {
x dataframe.Column
y dataframe.Column
@@ -57,7 +49,7 @@ type triplet struct {
maxCol dataframe.Column
}
-func (all *allAggregatedData) draw(cfg PlotConfig, pairs ...pair) error {
+func (all *allAggregatedData) draw(cfg dbtester.Plot, pairs ...pair) error {
// frame now contains
// AVG-LATENCY-MS-etcd-v3.1-go1.7.4, AVG-LATENCY-MS-zookeeper-r3.4.9-java8, AVG-LATENCY-MS-consul-v0.7.2-go1.7.4
plt, err := plot.New()
@@ -80,11 +72,11 @@ func (all *allAggregatedData) draw(cfg PlotConfig, pairs ...pair) error {
if err != nil {
return err
}
- l.Color = getRGB(all.headerToLegend[p.y.Header()], i)
+ l.Color = getRGB(all.headerToDatabaseID[p.y.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
- plt.Legend.Add(all.headerToLegend[p.y.Header()], l)
+ plt.Legend.Add(all.headerToDatabaseID[p.y.Header()], l)
}
plt.Add(ps...)
@@ -96,7 +88,7 @@ func (all *allAggregatedData) draw(cfg PlotConfig, pairs ...pair) error {
return nil
}
-func (all *allAggregatedData) drawXY(cfg PlotConfig, pairs ...pair) error {
+func (all *allAggregatedData) drawXY(cfg dbtester.Plot, pairs ...pair) error {
// frame now contains
// KEYS-DB-TAG-X, AVG-LATENCY-MS-DB-TAG-Y, ...
plt, err := plot.New()
@@ -119,11 +111,11 @@ func (all *allAggregatedData) drawXY(cfg PlotConfig, pairs ...pair) error {
if err != nil {
return err
}
- l.Color = getRGB(all.headerToLegend[p.y.Header()], i)
+ l.Color = getRGB(all.headerToDatabaseID[p.y.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
- plt.Legend.Add(all.headerToLegend[p.y.Header()], l)
+ plt.Legend.Add(all.headerToDatabaseID[p.y.Header()], l)
}
plt.Add(ps...)
@@ -135,7 +127,7 @@ func (all *allAggregatedData) drawXY(cfg PlotConfig, pairs ...pair) error {
return nil
}
-func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...triplet) error {
+func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtester.Plot, triplets ...triplet) error {
// frame now contains
// KEYS-DB-TAG-X, MIN-LATENCY-MS-DB-TAG-Y, AVG-LATENCY-MS-DB-TAG-Y, MAX-LATENCY-MS-DB-TAG-Y, ...
plt, err := plot.New()
@@ -158,10 +150,10 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...
if err != nil {
return err
}
- l.Color = getRGBII(all.headerToLegend[triplet.avgCol.Header()], i)
+ l.Color = getRGBII(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
- plt.Legend.Add(all.headerToLegend[triplet.avgCol.Header()]+" MIN", l)
+ plt.Legend.Add(all.headerToDatabaseID[triplet.avgCol.Header()]+" MIN", l)
}
{
pt, err := pointsXY(triplet.x, triplet.avgCol)
@@ -172,10 +164,10 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...
if err != nil {
return err
}
- l.Color = getRGB(all.headerToLegend[triplet.avgCol.Header()], i)
+ l.Color = getRGB(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
- plt.Legend.Add(all.headerToLegend[triplet.avgCol.Header()], l)
+ plt.Legend.Add(all.headerToDatabaseID[triplet.avgCol.Header()], l)
}
{
pt, err := pointsXY(triplet.x, triplet.maxCol)
@@ -186,10 +178,10 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...
if err != nil {
return err
}
- l.Color = getRGBIII(all.headerToLegend[triplet.avgCol.Header()], i)
+ l.Color = getRGBIII(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
- plt.Legend.Add(all.headerToLegend[triplet.avgCol.Header()]+" MAX", l)
+ plt.Legend.Add(all.headerToDatabaseID[triplet.avgCol.Header()]+" MAX", l)
}
}
plt.Add(ps...)
@@ -253,61 +245,55 @@ func pointsXY(colX, colY dataframe.Column) (plotter.XYs, error) {
return pts, nil
}
-func getRGB(legend string, i int) color.Color {
- tag := makeTag(legend)
- if strings.HasPrefix(tag, "etcd") {
+func getRGB(databaseID string, i int) color.Color {
+ switch databaseID {
+ case "etcdv2":
+ return color.RGBA{218, 97, 229, 255} // purple
+ case "etcdv3":
return color.RGBA{24, 90, 169, 255} // blue
- }
- if strings.HasPrefix(tag, "zookeeper") {
+ case "zookeeper":
return color.RGBA{38, 169, 24, 255} // green
- }
- if strings.HasPrefix(tag, "consul") {
+ case "consul":
return color.RGBA{198, 53, 53, 255} // red
- }
- if strings.HasPrefix(tag, "zetcd") {
+ case "zetcd":
return color.RGBA{251, 206, 0, 255} // yellow
- }
- if strings.HasPrefix(tag, "cetcd") {
+ case "cetcd":
return color.RGBA{116, 24, 169, 255} // purple
}
return plotutil.Color(i)
}
-func getRGBII(legend string, i int) color.Color {
- tag := makeTag(legend)
- if strings.HasPrefix(tag, "etcd") {
+func getRGBII(databaseID string, i int) color.Color {
+ switch databaseID {
+ case "etcdv2":
+ return color.RGBA{229, 212, 231, 255} // light-purple
+ case "etcdv3":
return color.RGBA{129, 212, 247, 255} // light-blue
- }
- if strings.HasPrefix(tag, "zookeeper") {
+ case "zookeeper":
return color.RGBA{129, 247, 152, 255} // light-green
- }
- if strings.HasPrefix(tag, "consul") {
+ case "consul":
return color.RGBA{247, 156, 156, 255} // light-red
- }
- if strings.HasPrefix(tag, "zetcd") {
+ case "zetcd":
return color.RGBA{245, 247, 166, 255} // light-yellow
- }
- if strings.HasPrefix(tag, "cetcd") {
+ case "cetcd":
return color.RGBA{247, 166, 238, 255} // light-purple
}
return plotutil.Color(i)
}
-func getRGBIII(legend string, i int) color.Color {
- tag := makeTag(legend)
- if strings.HasPrefix(tag, "etcd") {
+func getRGBIII(databaseID string, i int) color.Color {
+ switch databaseID {
+ case "etcdv2":
+ return color.RGBA{165, 8, 180, 255} // deep-purple
+ case "etcdv3":
return color.RGBA{37, 29, 191, 255} // deep-blue
- }
- if strings.HasPrefix(tag, "zookeeper") {
+ case "zookeeper":
return color.RGBA{7, 64, 35, 255} // deep-green
- }
- if strings.HasPrefix(tag, "consul") {
+ case "consul":
return color.RGBA{212, 8, 46, 255} // deep-red
- }
- if strings.HasPrefix(tag, "zetcd") {
+ case "zetcd":
return color.RGBA{229, 255, 0, 255} // deep-yellow
- }
- if strings.HasPrefix(tag, "cetcd") {
+ case "cetcd":
return color.RGBA{255, 0, 251, 255} // deep-purple
}
return plotutil.Color(i)
diff --git a/analyze/analyze_data_6_readme.go b/analyze/analyze_data_6_readme.go
deleted file mode 100644
index 0d6a5935..00000000
--- a/analyze/analyze_data_6_readme.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017 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 (
- "bytes"
- "fmt"
- "path/filepath"
-)
-
-// READMEConfig defines how to write README.
-type READMEConfig struct {
- Preface string `yaml:"preface"`
- OutputPath string `yaml:"output_path"`
- Results []struct {
- Title string
- Images []struct {
- ImageTitle string `yaml:"image_title"`
- ImagePath string `yaml:"image_path"`
- ImageType string `yaml:"image_type"`
- } `yaml:"images"`
- } `yaml:"results"`
-}
-
-func writeREADME(summary string, cfg READMEConfig) error {
- buf := new(bytes.Buffer)
- buf.WriteString("\n\n")
-
- for _, result := range cfg.Results {
- buf.WriteString(fmt.Sprintf("
\n##### %s", result.Title))
- buf.WriteString("\n\n")
- buf.WriteString(cfg.Preface)
- buf.WriteString("\n\n```\n")
- buf.WriteString(summary)
- buf.WriteString("```\n\n\n")
- for _, img := range result.Images {
- imgPath := ""
- switch img.ImageType {
- case "local":
- imgPath = "./" + filepath.Base(img.ImagePath)
- buf.WriteString(fmt.Sprintf("\n\n", img.ImageTitle, imgPath))
- case "remote":
- buf.WriteString(fmt.Sprintf(`
`, img.ImagePath, img.ImageTitle))
- buf.WriteString("\n\n")
- default:
- return fmt.Errorf("%s is not supported", img.ImageType)
- }
- }
- buf.WriteString("\n\n")
- }
-
- return toFile(buf.String(), cfg.OutputPath)
-}
diff --git a/analyze/analyze_data_7_finalize_everything.go b/analyze/finalize_everything.go
similarity index 61%
rename from analyze/analyze_data_7_finalize_everything.go
rename to analyze/finalize_everything.go
index a5f1f04b..b764df07 100644
--- a/analyze/analyze_data_7_finalize_everything.go
+++ b/analyze/finalize_everything.go
@@ -21,51 +21,54 @@ import (
"path/filepath"
"reflect"
"sort"
+ "strconv"
"strings"
- "strconv"
-
- "github.com/coreos/dbtester/control"
+ "github.com/coreos/dbtester"
humanize "github.com/dustin/go-humanize"
"github.com/gyuho/dataframe"
"github.com/olekukonko/tablewriter"
)
type allAggregatedData struct {
- title string
- data []*analyzeData
- databaseTags []string
- headerToLegend map[string]string
+ title string
+ data []*analyzeData
+ headerToDatabaseID map[string]string
+ allDatabaseIDList []string
}
func do(configPath string) error {
- cfg, err := readConfig(configPath)
+ cfg, err := dbtester.ReadConfig(configPath, true)
if err != nil {
return err
}
all := &allAggregatedData{
- title: cfg.Title,
- data: make([]*analyzeData, 0, len(cfg.RawData)),
- headerToLegend: make(map[string]string),
+ title: cfg.TestTitle,
+ data: make([]*analyzeData, 0, len(cfg.DatabaseIDToTestData)),
+ headerToDatabaseID: make(map[string]string),
+ allDatabaseIDList: cfg.AllDatabaseIDList,
}
- for _, elem := range cfg.RawData {
- plog.Printf("reading system metrics data for %s (%q)", makeTag(elem.Legend), elem.Legend)
- ad, err := readSystemMetricsAll(elem.DataInterpolatedSystemMetricsPaths...)
+ for _, databaseID := range cfg.AllDatabaseIDList {
+ testgroup := cfg.DatabaseIDToTestGroup[databaseID]
+ testdata := cfg.DatabaseIDToTestData[databaseID]
+
+ plog.Printf("reading system metrics data for %s", databaseID)
+ ad, err := readSystemMetricsAll(testdata.ServerSystemMetricsInterpolatedPathList...)
if err != nil {
return err
}
- ad.databaseTag = makeTag(elem.Legend)
- ad.legend = elem.Legend
- ad.csvOutputpath = elem.OutputPath
+ ad.databaseTag = testgroup.DatabaseTag
+ ad.legend = testgroup.DatabaseDescription
+ ad.allAggregatedOutputPath = testdata.AllAggregatedOutputPath
if err = ad.aggSystemMetrics(); err != nil {
return err
}
- if err = ad.importBenchMetrics(elem.DataBenchmarkThroughput); err != nil {
+ if err = ad.importBenchMetrics(testdata.ClientLatencyThroughputTimeseriesPath); err != nil {
return err
}
- if err = ad.aggregateAll(elem.DataBenchmarkMemoryByKey, elem.TotalRequests); err != nil {
+ if err = ad.aggregateAll(testdata.ServerMemoryByKeyNumberPath, testgroup.RequestNumber); err != nil {
return err
}
if err = ad.save(); err != nil {
@@ -73,9 +76,8 @@ func do(configPath string) error {
}
all.data = append(all.data, ad)
- all.databaseTags = append(all.databaseTags, makeTag(elem.Legend))
for _, hd := range ad.aggregated.Headers() {
- all.headerToLegend[makeHeader(hd, makeTag(elem.Legend))] = elem.Legend
+ all.headerToDatabaseID[makeHeader(hd, testgroup.DatabaseTag)] = databaseID
}
}
@@ -90,19 +92,20 @@ func do(configPath string) error {
for _, ad := range all.data {
// per database
for _, col := range ad.aggregated.Columns() {
- legend := all.headerToLegend[col.Header()]
- row00Header = append(row00Header, makeTag(legend))
+ databaseID := all.headerToDatabaseID[col.Header()]
+ row00Header = append(row00Header, cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag)
break
}
}
- row01ReadsCompletedDeltaSum := []string{"READS-COMPLETED-DELTA-SUM"}
- row02SectorsReadDeltaSum := []string{"SECTORS-READS-DELTA-SUM"}
- row03WritesCompletedDeltaSum := []string{"WRITES-COMPLETED-DELTA-SUM"}
- row04SectorsWrittenDeltaSum := []string{"SECTORS-WRITTEN-DELTA-SUM"}
- row06ReceiveBytesSum := []string{"NETWORK-RECEIVE-DATA-SUM"}
- row07TransmitBytesSum := []string{"NETWORK-TRANSMIT-DATA-SUM"}
- row08MaxCPUUsage := []string{"MAX-CPU-USAGE"}
- row09MaxMemoryUsage := []string{"MAX-MEMORY-USAGE"}
+
+ row19ServerReceiveBytesSum := []string{"SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM"}
+ row20ServerTransmitBytesSum := []string{"SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM"}
+ row23ServerMaxCPUUsage := []string{"SERVER-MAX-CPU-USAGE"}
+ row24ServerMaxMemoryUsage := []string{"SERVER-MAX-MEMORY-USAGE"}
+ row28ReadsCompletedDeltaSum := []string{"SERVER-AVG-READS-COMPLETED-DELTA-SUM"}
+ row29SectorsReadDeltaSum := []string{"SERVER-AVG-SECTORS-READS-DELTA-SUM"}
+ row30WritesCompletedDeltaSum := []string{"SERVER-AVG-WRITES-COMPLETED-DELTA-SUM"}
+ row31SectorsWrittenDeltaSum := []string{"SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM"}
// iterate each database's all data
for _, ad := range all.data {
@@ -120,6 +123,26 @@ func do(configPath string) error {
for _, col := range ad.aggregated.Columns() {
hdr := col.Header()
switch {
+ case strings.HasPrefix(hdr, "RECEIVE-BYTES-NUM-DELTA-"):
+ cnt := col.Count()
+ for j := 0; j < cnt; j++ {
+ vv, err := col.Value(j)
+ if err != nil {
+ return err
+ }
+ fv, _ := vv.Float64()
+ receiveBytesNumDeltaSum += fv
+ }
+ case strings.HasPrefix(hdr, "TRANSMIT-BYTES-NUM-DELTA-"):
+ cnt := col.Count()
+ for j := 0; j < cnt; j++ {
+ vv, err := col.Value(j)
+ if err != nil {
+ return err
+ }
+ fv, _ := vv.Float64()
+ transmitBytesNumDeltaSum += fv
+ }
case strings.HasPrefix(hdr, "READS-COMPLETED-DELTA-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
@@ -160,26 +183,6 @@ func do(configPath string) error {
fv, _ := vv.Float64()
sectorsWrittenDeltaSum += fv
}
- case strings.HasPrefix(hdr, "RECEIVE-BYTES-NUM-DELTA-"):
- cnt := col.Count()
- for j := 0; j < cnt; j++ {
- vv, err := col.Value(j)
- if err != nil {
- return err
- }
- fv, _ := vv.Float64()
- receiveBytesNumDeltaSum += fv
- }
- case strings.HasPrefix(hdr, "TRANSMIT-BYTES-NUM-DELTA-"):
- cnt := col.Count()
- for j := 0; j < cnt; j++ {
- vv, err := col.Value(j)
- if err != nil {
- return err
- }
- fv, _ := vv.Float64()
- transmitBytesNumDeltaSum += fv
- }
case strings.HasPrefix(hdr, "AVG-CPU-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
@@ -203,51 +206,57 @@ func do(configPath string) error {
}
}
- row01ReadsCompletedDeltaSum = append(row01ReadsCompletedDeltaSum, humanize.Comma(int64(readsCompletedDeltaSum)))
- row02SectorsReadDeltaSum = append(row02SectorsReadDeltaSum, humanize.Comma(int64(sectorsReadDeltaSum)))
- row03WritesCompletedDeltaSum = append(row03WritesCompletedDeltaSum, humanize.Comma(int64(writesCompletedDeltaSum)))
- row04SectorsWrittenDeltaSum = append(row04SectorsWrittenDeltaSum, humanize.Comma(int64(sectorsWrittenDeltaSum)))
- row06ReceiveBytesSum = append(row06ReceiveBytesSum, humanize.Bytes(uint64(receiveBytesNumDeltaSum)))
- row07TransmitBytesSum = append(row07TransmitBytesSum, humanize.Bytes(uint64(transmitBytesNumDeltaSum)))
- row08MaxCPUUsage = append(row08MaxCPUUsage, fmt.Sprintf("%.2f %%", maxAvgCPU))
+ row19ServerReceiveBytesSum = append(row19ServerReceiveBytesSum, humanize.Bytes(uint64(receiveBytesNumDeltaSum)))
+ row20ServerTransmitBytesSum = append(row20ServerTransmitBytesSum, humanize.Bytes(uint64(transmitBytesNumDeltaSum)))
+ row23ServerMaxCPUUsage = append(row23ServerMaxCPUUsage, fmt.Sprintf("%.2f %%", maxAvgCPU))
+ row28ReadsCompletedDeltaSum = append(row28ReadsCompletedDeltaSum, humanize.Comma(int64(readsCompletedDeltaSum)))
+ row29SectorsReadDeltaSum = append(row29SectorsReadDeltaSum, humanize.Comma(int64(sectorsReadDeltaSum)))
+ row30WritesCompletedDeltaSum = append(row30WritesCompletedDeltaSum, humanize.Comma(int64(writesCompletedDeltaSum)))
+ row31SectorsWrittenDeltaSum = append(row31SectorsWrittenDeltaSum, humanize.Comma(int64(sectorsWrittenDeltaSum)))
// TODO: handle overflowed memory value?
sort.Float64s(maxAvgVMRSSMBs)
mv := maxAvgVMRSSMBs[len(maxAvgVMRSSMBs)-1]
mb := uint64(mv * 1000000)
- row09MaxMemoryUsage = append(row09MaxMemoryUsage, humanize.Bytes(mb))
+ row24ServerMaxMemoryUsage = append(row24ServerMaxMemoryUsage, humanize.Bytes(mb))
}
- row05AverageDatasize := []string{"AVG-DATA-SIZE-ON-DISK"} // TOTAL-DATA-SIZE
- row10TotalSeconds := []string{"TOTAL-SECONDS"} // TOTAL-SECONDS
- row11MaxThroughput := []string{"MAX-THROUGHPUT"} // MAX AVG-THROUGHPUT
- row12AverageThroughput := []string{"AVG-THROUGHPUT"} // REQUESTS-PER-SECOND
- row13MinThroughput := []string{"MIN-THROUGHPUT"} // MIN AVG-THROUGHPUT
- row14FastestLatency := []string{"FASTEST-LATENCY"} // FASTEST-LATENCY-MS
- row15AverageLatency := []string{"AVG-LATENCY"} // AVERAGE-LATENCY-MS
- row16SlowestLatency := []string{"SLOWEST-LATENCY"} // SLOWEST-LATENCY-MS
- row17p10 := []string{"Latency p10"} // p10
- row18p25 := []string{"Latency p25"} // p25
- row19p50 := []string{"Latency p50"} // p50
- row20p75 := []string{"Latency p75"} // p75
- row21p90 := []string{"Latency p90"} // p90
- row22p95 := []string{"Latency p95"} // p95
- row23p99 := []string{"Latency p99"} // p99
- row24p999 := []string{"Latency p99.9"} // p99.9
- row25ClientReceiveBytesSum := []string{"CLIENT-NETWORK-RECEIVE-SUM"} // RECEIVE-BYTES-NUM-DELTA
- row26ClientTransmitBytesSum := []string{"CLIENT-NETWORK-TRANSMIT-SUM"} // TRANSMIT-BYTES-DELTA
- row27ClientMaxCPU := []string{"CLIENT-MAX-CPU-USAGE"} // CPU-NUM
- row28ClientMaxMemory := []string{"CLIENT-MAX-MEMORY-USAGE"} // VMRSS-NUM
- row29ErrorCount := []string{"CLIENT-ERROR-COUNT"} // ERROR:
+ row01TotalSeconds := []string{"TOTAL-SECONDS"} // TOTAL-SECONDS
+ row02TotalRequestNumber := []string{"TOTAL-REQUEST-NUMBER"}
+ row05MaxThroughput := []string{"MAX-THROUGHPUT"} // MAX AVG-THROUGHPUT
+ row06AverageThroughput := []string{"AVG-THROUGHPUT"} // REQUESTS-PER-SECOND
+ row07MinThroughput := []string{"MIN-THROUGHPUT"} // MIN AVG-THROUGHPUT
+ row08FastestLatency := []string{"FASTEST-LATENCY"} // FASTEST-LATENCY-MS
+ row09AverageLatency := []string{"AVG-LATENCY"} // AVERAGE-LATENCY-MS
+ row10SlowestLatency := []string{"SLOWEST-LATENCY"} // SLOWEST-LATENCY-MS
+ row11p10 := []string{"Latency p10"} // p10
+ row12p25 := []string{"Latency p25"} // p25
+ row13p50 := []string{"Latency p50"} // p50
+ row14p75 := []string{"Latency p75"} // p75
+ row15p90 := []string{"Latency p90"} // p90
+ row16p95 := []string{"Latency p95"} // p95
+ row17p99 := []string{"Latency p99"} // p99
+ row18p999 := []string{"Latency p99.9"} // p99.9
+ row21ClientReceiveBytesSum := []string{"CLIENT-TOTAL-NETWORK-RECEIVE-SUM"} // RECEIVE-BYTES-NUM-DELTA
+ row22lientTransmitBytesSum := []string{"CLIENT-TOTAL-NETWORK-TRANSMIT-SUM"} // TRANSMIT-BYTES-DELTA
+ row25ClientMaxCPU := []string{"CLIENT-MAX-CPU-USAGE"} // CPU-NUM
+ row26ClientMaxMemory := []string{"CLIENT-MAX-MEMORY-USAGE"} // VMRSS-NUM
+ row27ClientErrorCount := []string{"CLIENT-ERROR-COUNT"} // ERROR:
+ row32AverageDatasize := []string{"SERVER-AVG-DATA-SIZE-ON-DISK"} // TOTAL-DATA-SIZE
- for i, rcfg := range cfg.RawData {
- tag := makeTag(rcfg.Legend)
+ databaseIDToErrs := make(map[string][]string)
+ for i, databaseID := range cfg.AllDatabaseIDList {
+ testgroup := cfg.DatabaseIDToTestGroup[databaseID]
+ testdata := cfg.DatabaseIDToTestData[databaseID]
+
+ tag := testdata.DatabaseTag
if tag != row00Header[i+1] {
return fmt.Errorf("analyze config has different order; expected %q, got %q", row00Header[i+1], tag)
}
+ row02TotalRequestNumber = append(row02TotalRequestNumber, humanize.Comma(testgroup.RequestNumber))
{
- fr, err := dataframe.NewFromCSV(nil, rcfg.ClientSystemMetricsInterpolated)
+ fr, err := dataframe.NewFromCSV(nil, testdata.ClientSystemMetricsInterpolatedPath)
if err != nil {
return err
}
@@ -312,14 +321,13 @@ func do(configPath string) error {
}
}
- row25ClientReceiveBytesSum = append(row25ClientReceiveBytesSum, humanize.Bytes(receiveBytesNumDeltaSum))
- row26ClientTransmitBytesSum = append(row26ClientTransmitBytesSum, humanize.Bytes(transmitBytesNumDeltaSum))
- row27ClientMaxCPU = append(row27ClientMaxCPU, fmt.Sprintf("%.2f %%", maxAvgCPU))
- row28ClientMaxMemory = append(row28ClientMaxMemory, humanize.Bytes(maxVMRSSNum))
+ row21ClientReceiveBytesSum = append(row21ClientReceiveBytesSum, humanize.Bytes(receiveBytesNumDeltaSum))
+ row22lientTransmitBytesSum = append(row22lientTransmitBytesSum, humanize.Bytes(transmitBytesNumDeltaSum))
+ row25ClientMaxCPU = append(row25ClientMaxCPU, fmt.Sprintf("%.2f %%", maxAvgCPU))
+ row26ClientMaxMemory = append(row26ClientMaxMemory, humanize.Bytes(maxVMRSSNum))
}
-
{
- f, err := openToRead(rcfg.DataBenchmarkLatencySummary)
+ f, err := openToRead(testdata.ClientLatencyDistributionSummaryPath)
if err != nil {
return err
}
@@ -344,20 +352,20 @@ func do(configPath string) error {
for _, row := range rows {
switch row[0] {
case "TOTAL-SECONDS":
- row10TotalSeconds = append(row10TotalSeconds, fmt.Sprintf("%s sec", row[1]))
+ row01TotalSeconds = append(row01TotalSeconds, fmt.Sprintf("%s sec", row[1]))
case "REQUESTS-PER-SECOND":
fv, err := strconv.ParseFloat(row[1], 64)
if err != nil {
return err
}
avg := int64(fv)
- row12AverageThroughput = append(row12AverageThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(avg)))
+ row06AverageThroughput = append(row06AverageThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(avg)))
case "SLOWEST-LATENCY-MS":
- row16SlowestLatency = append(row16SlowestLatency, fmt.Sprintf("%s ms", row[1]))
+ row10SlowestLatency = append(row10SlowestLatency, fmt.Sprintf("%s ms", row[1]))
case "FASTEST-LATENCY-MS":
- row14FastestLatency = append(row14FastestLatency, fmt.Sprintf("%s ms", row[1]))
+ row08FastestLatency = append(row08FastestLatency, fmt.Sprintf("%s ms", row[1]))
case "AVERAGE-LATENCY-MS":
- row15AverageLatency = append(row15AverageLatency, fmt.Sprintf("%s ms", row[1]))
+ row09AverageLatency = append(row09AverageLatency, fmt.Sprintf("%s ms", row[1]))
}
if strings.HasPrefix(row[0], "ERROR:") {
@@ -366,13 +374,21 @@ func do(configPath string) error {
return err
}
totalErrCnt += iv
+
+ c1 := strings.TrimSpace(strings.Replace(row[0], "ERROR:", "", -1))
+ c2 := humanize.Comma(iv)
+ es := fmt.Sprintf("%s (count %s)", c1, c2)
+ if _, ok := databaseIDToErrs[databaseID]; !ok {
+ databaseIDToErrs[databaseID] = []string{es}
+ } else {
+ databaseIDToErrs[databaseID] = append(databaseIDToErrs[databaseID], es)
+ }
}
}
- row29ErrorCount = append(row29ErrorCount, humanize.Comma(totalErrCnt))
+ row27ClientErrorCount = append(row27ClientErrorCount, humanize.Comma(totalErrCnt))
}
-
{
- fr, err := dataframe.NewFromCSV(nil, rcfg.DataBenchmarkThroughput)
+ fr, err := dataframe.NewFromCSV(nil, testdata.ClientLatencyThroughputTimeseriesPath)
if err != nil {
return err
}
@@ -399,16 +415,15 @@ func do(configPath string) error {
min = int64(fv)
}
}
- row11MaxThroughput = append(row11MaxThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(max)))
- row13MinThroughput = append(row13MinThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(min)))
+ row05MaxThroughput = append(row05MaxThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(max)))
+ row07MinThroughput = append(row07MinThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(min)))
}
-
{
- fr, err := dataframe.NewFromCSV(nil, rcfg.DatasizeSummary)
+ fr, err := dataframe.NewFromCSV(nil, testdata.ServerDatasizeOnDiskSummaryPath)
if err != nil {
return err
}
- col, err := fr.Column(control.DataSummaryColumns[3]) // datasize in bytes
+ col, err := fr.Column(dbtester.DatasizeOnDiskSummaryColumns[3]) // datasize in bytes
if err != nil {
return err
}
@@ -422,11 +437,10 @@ func do(configPath string) error {
sum += fv
}
avg := uint64(sum / float64(col.Count()))
- row05AverageDatasize = append(row05AverageDatasize, humanize.Bytes(avg))
+ row32AverageDatasize = append(row32AverageDatasize, humanize.Bytes(avg))
}
-
{
- f, err := openToRead(rcfg.DataBenchmarkLatencyPercentile)
+ f, err := openToRead(testdata.ClientLatencyDistributionPercentilePath)
if err != nil {
return err
}
@@ -453,21 +467,21 @@ func do(configPath string) error {
}
switch row[0] {
case "p10":
- row17p10 = append(row17p10, fmt.Sprintf("%s ms", row[1]))
+ row11p10 = append(row11p10, fmt.Sprintf("%s ms", row[1]))
case "p25":
- row18p25 = append(row18p25, fmt.Sprintf("%s ms", row[1]))
+ row12p25 = append(row12p25, fmt.Sprintf("%s ms", row[1]))
case "p50":
- row19p50 = append(row19p50, fmt.Sprintf("%s ms", row[1]))
+ row13p50 = append(row13p50, fmt.Sprintf("%s ms", row[1]))
case "p75":
- row20p75 = append(row20p75, fmt.Sprintf("%s ms", row[1]))
+ row14p75 = append(row14p75, fmt.Sprintf("%s ms", row[1]))
case "p90":
- row21p90 = append(row21p90, fmt.Sprintf("%s ms", row[1]))
+ row15p90 = append(row15p90, fmt.Sprintf("%s ms", row[1]))
case "p95":
- row22p95 = append(row22p95, fmt.Sprintf("%s ms", row[1]))
+ row16p95 = append(row16p95, fmt.Sprintf("%s ms", row[1]))
case "p99":
- row23p99 = append(row23p99, fmt.Sprintf("%s ms", row[1]))
+ row17p99 = append(row17p99, fmt.Sprintf("%s ms", row[1]))
case "p99.9":
- row24p999 = append(row24p999, fmt.Sprintf("%s ms", row[1]))
+ row18p999 = append(row18p999, fmt.Sprintf("%s ms", row[1]))
}
}
}
@@ -475,38 +489,44 @@ func do(configPath string) error {
aggRows := [][]string{
row00Header,
- row01ReadsCompletedDeltaSum,
- row02SectorsReadDeltaSum,
- row03WritesCompletedDeltaSum,
- row04SectorsWrittenDeltaSum,
- row05AverageDatasize,
- row06ReceiveBytesSum,
- row07TransmitBytesSum,
- row08MaxCPUUsage,
- row09MaxMemoryUsage,
- row10TotalSeconds,
- row11MaxThroughput,
- row12AverageThroughput,
- row13MinThroughput,
- row14FastestLatency,
- row15AverageLatency,
- row16SlowestLatency,
- row17p10,
- row18p25,
- row19p50,
- row20p75,
- row21p90,
- row22p95,
- row23p99,
- row24p999,
- row25ClientReceiveBytesSum,
- row26ClientTransmitBytesSum,
- row27ClientMaxCPU,
- row28ClientMaxMemory,
- row29ErrorCount,
+ row01TotalSeconds,
+ row02TotalRequestNumber,
+ row05MaxThroughput,
+ row06AverageThroughput,
+ row07MinThroughput,
+ row08FastestLatency,
+ row09AverageLatency,
+ row10SlowestLatency,
+ row11p10,
+ row12p25,
+ row13p50,
+ row14p75,
+ row15p90,
+ row16p95,
+ row17p99,
+ row18p999,
+
+ row19ServerReceiveBytesSum,
+ row20ServerTransmitBytesSum,
+ row21ClientReceiveBytesSum,
+ row22lientTransmitBytesSum,
+
+ row23ServerMaxCPUUsage,
+ row24ServerMaxMemoryUsage,
+ row25ClientMaxCPU,
+ row26ClientMaxMemory,
+
+ row27ClientErrorCount,
+
+ row28ReadsCompletedDeltaSum,
+ row29SectorsReadDeltaSum,
+ row30WritesCompletedDeltaSum,
+ row31SectorsWrittenDeltaSum,
+ row32AverageDatasize,
}
- plog.Printf("saving data to %q", cfg.AllAggregatedPath)
- file, err := openToOverwrite(cfg.AllAggregatedPath)
+
+ plog.Printf("saving summary data to %q", cfg.Analyze.AllAggregatedOutputPathCSV)
+ file, err := openToOverwrite(cfg.Analyze.AllAggregatedOutputPathCSV)
if err != nil {
return err
}
@@ -519,12 +539,40 @@ func do(configPath string) error {
if err := wr.Error(); err != nil {
return err
}
+ buf := new(bytes.Buffer)
+ tw := tablewriter.NewWriter(buf)
+ tw.SetHeader(aggRows[0])
+ for _, row := range aggRows[1:] {
+ tw.Append(row)
+ }
+ tw.SetAutoFormatHeaders(false)
+ tw.SetAlignment(tablewriter.ALIGN_RIGHT)
+ tw.Render()
+
+ errs := ""
+ for _, databaseID := range cfg.AllDatabaseIDList {
+ es, ok := databaseIDToErrs[databaseID]
+ if !ok {
+ continue
+ }
+ errs = databaseID + " " + "errors:\n" + strings.Join(es, "\n") + "\n"
+ }
+ plog.Printf("saving summary data to %q", cfg.Analyze.AllAggregatedOutputPathTXT)
+ stxt := buf.String()
+ if errs != "" {
+ stxt += "\n" + "\n" + errs
+ }
+ if err := toFile(stxt, changeExtToTxt(cfg.Analyze.AllAggregatedOutputPathTXT)); err != nil {
+ return err
+ }
// KEYS, MIN-LATENCY-MS, AVG-LATENCY-MS, MAX-LATENCY-MS
- plog.Printf("combining data to %q", cfg.AllLatencyByKey)
+ plog.Info("combining all latency data by keys")
allLatencyFrame := dataframe.New()
- for _, elem := range cfg.RawData {
- fr, err := dataframe.NewFromCSV(nil, elem.DataBenchmarkLatencyByKey)
+ for _, databaseID := range cfg.AllDatabaseIDList {
+ testdata := cfg.DatabaseIDToTestData[databaseID]
+
+ fr, err := dataframe.NewFromCSV(nil, testdata.ClientLatencyByKeyNumberPath)
if err != nil {
return err
}
@@ -532,7 +580,7 @@ func do(configPath string) error {
if err != nil {
return err
}
- colKeys.UpdateHeader(makeHeader("KEYS", makeTag(elem.Legend)))
+ colKeys.UpdateHeader(makeHeader("KEYS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colKeys); err != nil {
return err
}
@@ -541,7 +589,7 @@ func do(configPath string) error {
if err != nil {
return err
}
- colMinLatency.UpdateHeader(makeHeader("MIN-LATENCY-MS", makeTag(elem.Legend)))
+ colMinLatency.UpdateHeader(makeHeader("MIN-LATENCY-MS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colMinLatency); err != nil {
return err
}
@@ -550,7 +598,7 @@ func do(configPath string) error {
if err != nil {
return err
}
- colAvgLatency.UpdateHeader(makeHeader("AVG-LATENCY-MS", makeTag(elem.Legend)))
+ colAvgLatency.UpdateHeader(makeHeader("AVG-LATENCY-MS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colAvgLatency); err != nil {
return err
}
@@ -559,16 +607,60 @@ func do(configPath string) error {
if err != nil {
return err
}
- colMaxLatency.UpdateHeader(makeHeader("MAX-LATENCY-MS", makeTag(elem.Legend)))
+ colMaxLatency.UpdateHeader(makeHeader("MAX-LATENCY-MS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colMaxLatency); err != nil {
return err
}
}
- if err := allLatencyFrame.CSV(cfg.AllLatencyByKey); err != nil {
- return err
+ // KEYS, MIN-VMRSS-MB, AVG-VMRSS-MB, MAX-VMRSS-MB
+ plog.Info("combining all server memory usage by keys")
+ allMemoryFrame := dataframe.New()
+ for _, databaseID := range cfg.AllDatabaseIDList {
+ testdata := cfg.DatabaseIDToTestData[databaseID]
+
+ fr, err := dataframe.NewFromCSV(nil, testdata.ServerMemoryByKeyNumberPath)
+ if err != nil {
+ return err
+ }
+ colKeys, err := fr.Column("KEYS")
+ if err != nil {
+ return err
+ }
+ colKeys.UpdateHeader(makeHeader("KEYS", testdata.DatabaseTag))
+ if err = allMemoryFrame.AddColumn(colKeys); err != nil {
+ return err
+ }
+
+ colMemMin, err := fr.Column("MIN-VMRSS-MB")
+ if err != nil {
+ return err
+ }
+ colMemMin.UpdateHeader(makeHeader("MIN-VMRSS-MB", testdata.DatabaseTag))
+ if err = allMemoryFrame.AddColumn(colMemMin); err != nil {
+ return err
+ }
+
+ colMem, err := fr.Column("AVG-VMRSS-MB")
+ if err != nil {
+ return err
+ }
+ colMem.UpdateHeader(makeHeader("AVG-VMRSS-MB", testdata.DatabaseTag))
+ if err = allMemoryFrame.AddColumn(colMem); err != nil {
+ return err
+ }
+
+ colMemMax, err := fr.Column("MAX-VMRSS-MB")
+ if err != nil {
+ return err
+ }
+ colMemMax.UpdateHeader(makeHeader("MAX-VMRSS-MB", testdata.DatabaseTag))
+ if err = allMemoryFrame.AddColumn(colMemMax); err != nil {
+ return err
+ }
}
+
{
- allLatencyFrameCfg := PlotConfig{
+ allLatencyFrameCfg := dbtester.Plot{
Column: "AVG-LATENCY-MS",
XAxis: "Cumulative Number of Keys",
YAxis: "Latency(millisecond) by Keys",
@@ -604,7 +696,7 @@ func do(configPath string) error {
}
{
// with error points
- allLatencyFrameCfg := PlotConfig{
+ allLatencyFrameCfg := dbtester.Plot{
Column: "AVG-LATENCY-MS",
XAxis: "Cumulative Number of Keys",
YAxis: "Latency(millisecond) by Keys",
@@ -646,56 +738,8 @@ func do(configPath string) error {
return err
}
}
-
- // KEYS, MIN-VMRSS-MB, AVG-VMRSS-MB, MAX-VMRSS-MB
- plog.Printf("combining data to %q", cfg.AllMemoryByKey)
- allMemoryFrame := dataframe.New()
- for _, elem := range cfg.RawData {
- fr, err := dataframe.NewFromCSV(nil, elem.DataBenchmarkMemoryByKey)
- if err != nil {
- return err
- }
- colKeys, err := fr.Column("KEYS")
- if err != nil {
- return err
- }
- colKeys.UpdateHeader(makeHeader("KEYS", makeTag(elem.Legend)))
- if err = allMemoryFrame.AddColumn(colKeys); err != nil {
- return err
- }
-
- colMemMin, err := fr.Column("MIN-VMRSS-MB")
- if err != nil {
- return err
- }
- colMemMin.UpdateHeader(makeHeader("MIN-VMRSS-MB", makeTag(elem.Legend)))
- if err = allMemoryFrame.AddColumn(colMemMin); err != nil {
- return err
- }
-
- colMem, err := fr.Column("AVG-VMRSS-MB")
- if err != nil {
- return err
- }
- colMem.UpdateHeader(makeHeader("AVG-VMRSS-MB", makeTag(elem.Legend)))
- if err = allMemoryFrame.AddColumn(colMem); err != nil {
- return err
- }
-
- colMemMax, err := fr.Column("MAX-VMRSS-MB")
- if err != nil {
- return err
- }
- colMemMax.UpdateHeader(makeHeader("MAX-VMRSS-MB", makeTag(elem.Legend)))
- if err = allMemoryFrame.AddColumn(colMemMax); err != nil {
- return err
- }
- }
- if err := allMemoryFrame.CSV(cfg.AllMemoryByKey); err != nil {
- return err
- }
{
- allMemoryFrameCfg := PlotConfig{
+ allMemoryFrameCfg := dbtester.Plot{
Column: "AVG-VMRSS-MB",
XAxis: "Cumulative Number of Keys",
YAxis: "Memory(MB) by Keys",
@@ -731,7 +775,7 @@ func do(configPath string) error {
}
{
// with error points
- allMemoryFrameCfg := PlotConfig{
+ allMemoryFrameCfg := dbtester.Plot{
Column: "AVG-VMRSS-MB",
XAxis: "Cumulative Number of Keys",
YAxis: "Memory(MB) by Keys",
@@ -781,7 +825,8 @@ func do(configPath string) error {
var pairs []pair
var dataColumns []dataframe.Column
for i, ad := range all.data {
- tag := all.databaseTags[i]
+ databaseID := all.allDatabaseIDList[i]
+ tag := cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag
avgCol, err := ad.aggregated.Column("CONTROL-CLIENT-NUM")
if err != nil {
@@ -807,7 +852,7 @@ func do(configPath string) error {
if err != nil {
return err
}
- if err = nf1.CSV(filepath.Join(cfg.WorkDir, plotConfig.Column+".csv")); err != nil {
+ if err = nf1.CSV(plotConfig.OutputPathCSV); err != nil {
return err
}
@@ -829,84 +874,73 @@ func do(configPath string) error {
return err
}
}
- if err = nf2.CSV(filepath.Join(cfg.WorkDir, plotConfig.Column+"-BY-CLIENT-NUM"+".csv")); err != nil {
+ if err = nf2.CSV(filepath.Join(filepath.Dir(plotConfig.OutputPathCSV), plotConfig.Column+"-BY-CLIENT-NUM"+".csv")); err != nil {
return err
}
- plog.Printf("aggregating data for %q of all database (by client number)", plotConfig.Column)
- nf3 := dataframe.New()
- var firstKeys []int
- for i := range clientNumColumns {
- n := clientNumColumns[i].Count()
- allData := make(map[int]float64)
- for j := 0; j < n; j++ {
- v1, err := clientNumColumns[i].Value(j)
- if err != nil {
- return err
+ if len(cfg.DatabaseIDToTestGroup[cfg.AllDatabaseIDList[0]].BenchmarkOptions.ConnectionClientNumbers) > 0 {
+ plog.Printf("aggregating data for %q of all database (by client number)", plotConfig.Column)
+ nf3 := dataframe.New()
+ var firstKeys []int
+ for i := range clientNumColumns {
+ n := clientNumColumns[i].Count()
+ allData := make(map[int]float64)
+ for j := 0; j < n; j++ {
+ v1, err := clientNumColumns[i].Value(j)
+ if err != nil {
+ return err
+ }
+ num, _ := v1.Int64()
+
+ v2, err := dataColumns[i].Value(j)
+ if err != nil {
+ return err
+ }
+ data, _ := v2.Float64()
+
+ if v, ok := allData[int(num)]; ok {
+ allData[int(num)] = (v + data) / 2
+ } else {
+ allData[int(num)] = data
+ }
}
- num, _ := v1.Int64()
-
- v2, err := dataColumns[i].Value(j)
- if err != nil {
- return err
+ var allKeys []int
+ for k := range allData {
+ allKeys = append(allKeys, k)
}
- data, _ := v2.Float64()
+ sort.Ints(allKeys)
- if v, ok := allData[int(num)]; ok {
- allData[int(num)] = (v + data) / 2
- } else {
- allData[int(num)] = data
+ if i == 0 {
+ firstKeys = allKeys
+ }
+ if !reflect.DeepEqual(firstKeys, allKeys) {
+ return fmt.Errorf("all keys must be %+v, got %+v", firstKeys, allKeys)
}
- }
- var allKeys []int
- for k := range allData {
- allKeys = append(allKeys, k)
- }
- sort.Ints(allKeys)
- if i == 0 {
- firstKeys = allKeys
- }
- if !reflect.DeepEqual(firstKeys, allKeys) {
- return fmt.Errorf("all keys must be %+v, got %+v", firstKeys, allKeys)
- }
-
- if i == 0 {
- col1 := dataframe.NewColumn("CONTROL-CLIENT-NUM")
+ if i == 0 {
+ col1 := dataframe.NewColumn("CONTROL-CLIENT-NUM")
+ for j := range allKeys {
+ col1.PushBack(dataframe.NewStringValue(allKeys[j]))
+ }
+ if err := nf3.AddColumn(col1); err != nil {
+ return err
+ }
+ }
+ col2 := dataframe.NewColumn(dataColumns[i].Header())
for j := range allKeys {
- col1.PushBack(dataframe.NewStringValue(allKeys[j]))
+ col2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%.4f", allData[allKeys[j]])))
}
- if err := nf3.AddColumn(col1); err != nil {
+ if err := nf3.AddColumn(col2); err != nil {
return err
}
}
- col2 := dataframe.NewColumn(dataColumns[i].Header())
- for j := range allKeys {
- col2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%.4f", allData[allKeys[j]])))
- }
- if err := nf3.AddColumn(col2); err != nil {
+ if err = nf3.CSV(filepath.Join(filepath.Dir(plotConfig.OutputPathCSV), plotConfig.Column+"-BY-CLIENT-NUM-aggregated"+".csv")); err != nil {
return err
}
}
- if err = nf3.CSV(filepath.Join(cfg.WorkDir, plotConfig.Column+"-BY-CLIENT-NUM-aggregated"+".csv")); err != nil {
- return err
- }
- }
- buf := new(bytes.Buffer)
- tw := tablewriter.NewWriter(buf)
- tw.SetHeader(aggRows[0])
- for _, row := range aggRows[1:] {
- tw.Append(row)
- }
- tw.SetAutoFormatHeaders(false)
- tw.SetAlignment(tablewriter.ALIGN_RIGHT)
- tw.Render()
- if err := toFile(buf.String(), changeExtToTxt(cfg.AllAggregatedPath)); err != nil {
- return err
}
- plog.Printf("writing README at %q", cfg.READMEConfig.OutputPath)
- return writeREADME(buf.String(), cfg.READMEConfig)
+ return cfg.WriteREADME(stxt)
}
func changeExtToTxt(fpath string) string {
diff --git a/analyze/util.go b/analyze/util.go
index 67177740..675eb8af 100644
--- a/analyze/util.go
+++ b/analyze/util.go
@@ -35,6 +35,10 @@ func maxFloat64(a, b float64) float64 {
return b
}
+func makeHeader(column string, tag string) string {
+ return fmt.Sprintf("%s-%s", column, tag)
+}
+
// converts unix nanoseconds to unix second.
func convertUnixNano(ts int64) int64 {
return int64(ts / 1e9)
diff --git a/bench-configuration/01-write-1M-keys-client-variable/01-etcd-v3.1.yaml b/bench-configuration/01-write-1M-keys-client-variable/01-etcd-v3.1.yaml
deleted file mode 100644
index 4b604c8b..00000000
--- a/bench-configuration/01-write-1M-keys-client-variable/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 10, 50, 100, 300, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable
diff --git a/bench-configuration/01-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml b/bench-configuration/01-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index f4372bfc..00000000
--- a/bench-configuration/01-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 10, 50, 100, 300, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable
diff --git a/bench-configuration/01-write-1M-keys-client-variable/03-consul-v0.7.3.yaml b/bench-configuration/01-write-1M-keys-client-variable/03-consul-v0.7.3.yaml
deleted file mode 100644
index 3d1dff35..00000000
--- a/bench-configuration/01-write-1M-keys-client-variable/03-consul-v0.7.3.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-database: consul
-test_name: consul-v0.7.3-go1.7.4
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 10, 50, 100, 300, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable
diff --git a/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml b/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml
deleted file mode 100644
index bec08afe..00000000
--- a/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml
+++ /dev/null
@@ -1,216 +0,0 @@
-title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
-work_dir: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable
-all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/aggregated.csv
-all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/aggregated-data-latency-by-key-number.csv
-all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/aggregated-data-memory-by-key-number.csv
-total_requests: 1000000
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
-
-- legend: Consul v0.7.3 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.3 (Go 1.7.4)
-
- output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md
- results:
- - title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
- images:
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-configuration/02-write-1M-keys-best-throughput/01-etcd-v3.1.yaml b/bench-configuration/02-write-1M-keys-best-throughput/01-etcd-v3.1.yaml
deleted file mode 100644
index 9380b7b3..00000000
--- a/bench-configuration/02-write-1M-keys-best-throughput/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 700 # for best throughput
- clients: 700 # for best throughput
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
diff --git a/bench-configuration/02-write-1M-keys-best-throughput/02-zookeeper-r3.4.9.yaml b/bench-configuration/02-write-1M-keys-best-throughput/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 1d1dd4fa..00000000
--- a/bench-configuration/02-write-1M-keys-best-throughput/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 300 # for best throughput
- clients: 300 # for best throughput
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
diff --git a/bench-configuration/02-write-1M-keys-best-throughput/03-consul-v0.7.3.yaml b/bench-configuration/02-write-1M-keys-best-throughput/03-consul-v0.7.3.yaml
deleted file mode 100644
index 9b403c8d..00000000
--- a/bench-configuration/02-write-1M-keys-best-throughput/03-consul-v0.7.3.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-database: consul
-test_name: consul-v0.7.3-go1.7.4
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 500 # for best throughput
- clients: 500 # for best throughput
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
diff --git a/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml b/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml
deleted file mode 100644
index 32c8cb3e..00000000
--- a/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml
+++ /dev/null
@@ -1,216 +0,0 @@
-title: Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
-work_dir: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
-all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/aggregated.csv
-all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/aggregated-data-latency-by-key-number.csv
-all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/aggregated-data-memory-by-key-number.csv
-total_requests: 1000000
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
-
-- legend: Consul v0.7.3 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.3 (Go 1.7.4)
-
- output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/README.md
- results:
- - title: Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
- images:
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-configuration/03-write-1M-keys-1000-client/01-etcd-v3.1.yaml b/bench-configuration/03-write-1M-keys-1000-client/01-etcd-v3.1.yaml
deleted file mode 100644
index a825828e..00000000
--- a/bench-configuration/03-write-1M-keys-1000-client/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client
diff --git a/bench-configuration/03-write-1M-keys-1000-client/02-zookeeper-r3.4.9.yaml b/bench-configuration/03-write-1M-keys-1000-client/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 9f53f903..00000000
--- a/bench-configuration/03-write-1M-keys-1000-client/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client
diff --git a/bench-configuration/03-write-1M-keys-1000-client/03-consul-v0.7.3.yaml b/bench-configuration/03-write-1M-keys-1000-client/03-consul-v0.7.3.yaml
deleted file mode 100644
index d42303e2..00000000
--- a/bench-configuration/03-write-1M-keys-1000-client/03-consul-v0.7.3.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-database: consul
-test_name: consul-v0.7.3-go1.7.4
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client
diff --git a/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml b/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml
deleted file mode 100644
index eaa2b553..00000000
--- a/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml
+++ /dev/null
@@ -1,216 +0,0 @@
-title: Write 1M keys, 256-byte key, 1KB value, 1,000 client
-work_dir: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client
-all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/aggregated.csv
-all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/aggregated-data-latency-by-key-number.csv
-all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/aggregated-data-memory-by-key-number.csv
-total_requests: 1000000
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
-
-- legend: Consul v0.7.3 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.3 (Go 1.7.4)
-
- output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/README.md
- results:
- - title: Write 1M keys, 256-byte key, 1KB value, 1,000 client
- images:
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-configuration/04-write-too-many-keys/01-etcd-v3.1.yaml b/bench-configuration/04-write-too-many-keys/01-etcd-v3.1.yaml
deleted file mode 100644
index e24fd484..00000000
--- a/bench-configuration/04-write-too-many-keys/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 700 # for best throughput
- clients: 700 # for best throughput
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys
diff --git a/bench-configuration/04-write-too-many-keys/02-zookeeper-r3.4.9.yaml b/bench-configuration/04-write-too-many-keys/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index effb4cf4..00000000
--- a/bench-configuration/04-write-too-many-keys/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 300 # for best throughput
- clients: 300 # for best throughput
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys
diff --git a/bench-configuration/04-write-too-many-keys/03-consul-v0.7.3.yaml b/bench-configuration/04-write-too-many-keys/03-consul-v0.7.3.yaml
deleted file mode 100644
index 57695eec..00000000
--- a/bench-configuration/04-write-too-many-keys/03-consul-v0.7.3.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-database: consul
-test_name: consul-v0.7.3-go1.7.4
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 500 # for best throughput
- clients: 500 # for best throughput
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys
diff --git a/bench-configuration/04-write-too-many-keys/analyze.yaml b/bench-configuration/04-write-too-many-keys/analyze.yaml
deleted file mode 100644
index a04c20ca..00000000
--- a/bench-configuration/04-write-too-many-keys/analyze.yaml
+++ /dev/null
@@ -1,215 +0,0 @@
-title: Write X keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
-work_dir: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys
-all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/aggregated.csv
-all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/aggregated-data-latency-by-key-number.csv
-all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/aggregated-data-memory-by-key-number.csv
-total_requests: ????
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keysetcd-v3.1-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
-
-- legend: Consul v0.7.3 (Go 1.7.4)
- output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-aggregated.csv
- data_interpolated_system_metrics_paths:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
- data_size_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-size-summary.csv
- data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
- data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
- client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes) (Delta per Second)
- output_path_list:
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.3 (Go 1.7.4)
-
- output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/README.md
- results:
- - title: Write X keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
- images:
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/01-etcd-v3.1.yaml
deleted file mode 100644
index b1fdc0f8..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 100
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 060bb217..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/03-consul-v0.7.2.yaml
deleted file mode 100644
index e05cb567..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/analyze.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/analyze.yaml
deleted file mode 100644
index ebee14c3..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/01-write-1M-keys/analyze.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-title: Write 1M keys, 1000-client, 256-byte key, 1KB value
-work_dir: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated.csv
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/README.md
- results:
- - title: Write 1M keys, 1000-client, 256-byte key, 1KB value
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/01-etcd-v3.1.yaml
deleted file mode 100644
index 9b08dfc1..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 100
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 1000
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 788ccd28..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 1000
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/03-consul-v0.7.2.yaml
deleted file mode 100644
index 2383da5d..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 1000
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/analyze.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/analyze.yaml
deleted file mode 100644
index 1efd0f46..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/02-write-1M-keys-rate-limited/analyze.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
-work_dir: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/aggregated.csv
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/README.md
- results:
- - title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/01-etcd-v3.1.yaml
deleted file mode 100644
index f67e6882..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 4d0e2b99..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/03-consul-v0.7.2.yaml
deleted file mode 100644
index 6beb3783..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/analyze.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/analyze.yaml
deleted file mode 100644
index b18c72f5..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/03-write-1M-keys-client-variable/analyze.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
-work_dir: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/aggregated.csv
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Google Cloud Compute Engine
- - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- - Ubuntu 16.10
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/README.md
- results:
- - title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/01-etcd-v3.1.yaml
deleted file mode 100644
index c4af99e9..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
-
-peer_ips:
- - 10.99.157.131
- - 10.99.157.133
- - 10.99.157.137
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 44496b6b..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
-
-peer_ips:
- - 10.99.157.153
- - 10.99.157.135
- - 10.99.157.143
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/03-consul-v0.7.2.yaml
deleted file mode 100644
index 40e9a983..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
-
-peer_ips:
- - 10.99.157.149
- - 10.99.157.141
- - 10.99.157.145
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/analyze.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/analyze.yaml
deleted file mode 100644
index b5b5519e..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/04-write-1M-keys/analyze.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-title: Write 1M keys, 1000-client, 256-byte key, 1KB value
-work_dir: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/aggregated.csv
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Packet Bare Metal
- - 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- - Ubuntu 16.04
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/README.md
- results:
- - title: Write 1M keys, 1000-client, 256-byte key, 1KB value
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/01-etcd-v3.1.yaml
deleted file mode 100644
index 971291cc..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
-
-peer_ips:
- - 10.99.157.131
- - 10.99.157.133
- - 10.99.157.137
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 1000
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index fb83d12f..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
-
-peer_ips:
- - 10.99.157.153
- - 10.99.157.135
- - 10.99.157.143
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 1000
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/03-consul-v0.7.2.yaml
deleted file mode 100644
index 544a4464..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
-
-peer_ips:
- - 10.99.157.149
- - 10.99.157.141
- - 10.99.157.145
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 1000
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/analyze.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/analyze.yaml
deleted file mode 100644
index af263eac..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/05-write-1M-keys-rate-limited/analyze.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
-work_dir: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/aggregated.csv
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Packet Bare Metal
- - 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- - Ubuntu 16.04
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/README.md
- results:
- - title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/01-etcd-v3.1.yaml
deleted file mode 100644
index 162217db..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
-
-peer_ips:
- - 10.99.157.131
- - 10.99.157.133
- - 10.99.157.137
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index f0e1940d..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
-
-peer_ips:
- - 10.99.157.153
- - 10.99.157.135
- - 10.99.157.143
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/03-consul-v0.7.2.yaml
deleted file mode 100644
index b2286e1b..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
-
-peer_ips:
- - 10.99.157.149
- - 10.99.157.141
- - 10.99.157.145
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/analyze.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/analyze.yaml
deleted file mode 100644
index 7964153f..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/06-write-1M-keys-client-variable/analyze.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
-work_dir: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
-all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/aggregated.csv
-
-raw_data:
-- legend: etcd v3.1 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
-
-- legend: Zookeeper r3.4.9 (Java 8)
- output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
-
-- legend: Consul v0.7.2 (Go 1.7.4)
- output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-aggregated.csv
- data_system_metrics_paths:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-3-system-metrics.csv
- data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
- data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
- data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
-
-plot_list:
-- column: AVG-LATENCY-MS
- x_axis: Second
- y_axis: Latency(millisecond)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.png
-
-- column: AVG-THROUGHPUT
- x_axis: Second
- y_axis: Throughput(Requests/Second)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.png
-
-- column: AVG-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
- x_axis: Second
- y_axis: Non-voluntary Context Switches
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
-
-- column: AVG-CPU
- x_axis: Second
- y_axis: CPU(%)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.png
-
-- column: AVG-VMRSS-MB
- x_axis: Second
- y_axis: Memory(MB)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.png
-
-- column: AVG-READS-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Reads
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-READ-DELTA
- x_axis: Second
- y_axis: Sectors Read
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png
-
-- column: AVG-WRITES-COMPLETED-DELTA
- x_axis: Second
- y_axis: Disk Writes
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png
-
-- column: AVG-SECTORS-WRITTEN-DELTA
- x_axis: Second
- y_axis: Sectors Written
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png
-
-- column: AVG-RECEIVE-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Receive(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png
-
-- column: AVG-TRANSMIT-BYTES-NUM-DELTA
- x_axis: Second
- y_axis: Network Transmit(bytes)
- output_path_list:
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- - 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png
-
-readme:
- preface: |
- - Packet Bare Metal
- - 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- - Ubuntu 16.04
- - etcd v3.1 (Go 1.7.4)
- - Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- - Consul v0.7.2 (Go 1.7.4)
-
- output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/README.md
- results:
- - title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
- images:
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- image_type: remote
-
- - image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
- image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- image_type: remote
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/01-etcd-v3.1.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/01-etcd-v3.1.yaml
deleted file mode 100644
index 0bbffef2..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/01-etcd-v3.1.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: etcdv3
-test_name: etcd-v3.1-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/read-1M-keys-linearizable
-
-peer_ips:
- - 10.240.0.20
- - 10.240.0.21
- - 10.240.0.22
-
-agent_port: 3500
-database_port: 2379
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: read
- stale_read: false
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/02-zookeeper-r3.4.9.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/02-zookeeper-r3.4.9.yaml
deleted file mode 100644
index 29160f9c..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/02-zookeeper-r3.4.9.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: zookeeper
-test_name: zookeeper-r3.4.9-java8
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/read-1M-keys-linearizable
-
-peer_ips:
- - 10.240.0.25
- - 10.240.0.27
- - 10.240.0.28
-
-agent_port: 3500
-database_port: 2181
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: read
- stale_read: false
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/03-consul-v0.7.2.yaml b/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/03-consul-v0.7.2.yaml
deleted file mode 100644
index 08bcd239..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul-configurations/read-1M-keys-linearizable/03-consul-v0.7.2.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-database: consul
-test_name: consul-v0.7.2-go1.7.4
-
-google_cloud_project_name: etcd-development
-google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
-google_cloud_storage_bucket_name: dbtester-results
-google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/read-1M-keys-linearizable
-
-peer_ips:
- - 10.240.0.30
- - 10.240.0.31
- - 10.240.0.33
-
-agent_port: 3500
-database_port: 8500
-
-# these will saved where 'dbtester control' command runs
-log: control.log
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: read
- stale_read: false
- connections: 1000
- clients: 1000
- connections_clients: []
- key_size: 256
- value_size: 1024
- total_requests: 1000000
- requests_per_second: 0
- etcdv3_compaction_cycle: 0
-
-# after benchmark
-step3:
- action: stop
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/README.md b/bench-results/2017Q1-01-etcd-zookeeper-consul/README.md
deleted file mode 100644
index 574fdd49..00000000
--- a/bench-results/2017Q1-01-etcd-zookeeper-consul/README.md
+++ /dev/null
@@ -1,425 +0,0 @@
-
-
-##### Write 1M keys, 1000-client, 256-byte key, 1KB value
-
-- Google Cloud Compute Engine
-- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
-- Ubuntu 16.10
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.2 (Go 1.7.4)
-
-
-```
-+----------------------------+--------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
-+----------------------------+--------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA | 6 | 311 | 15 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 98301 | 86583 | 941248 |
-| SECTORS-WRITTEN-DELTA-SUM | 565344 | 9223784 | 41419484 |
-| RECEIVE-BYTES-SUM | 5.0 GB | 5.4 GB | 7.8 GB |
-| TRANSMIT-BYTES-SUM | 3.8 GB | 4.3 GB | 6.5 GB |
-| MAX-CPU-USAGE | 291.56 % | 363.65 % | 226.18 % |
-| MAX-MEMORY-USAGE | 1204.28 MB | 4689.33 MB | 4329.98 MB |
-| TOTAL-SECONDS | 36.2024 sec | 61.0944 sec | 467.9311 sec |
-| AVG-THROUGHPUT | 27622.4453 req/sec | 16298.0557 req/sec | 2137.0667 req/sec |
-| SLOWEST-LATENCY | 246.4560 ms | 5570.6375 ms | 30388.9318 ms |
-| FASTEST-LATENCY | 5.3413 ms | 2.4757 ms | 21.5605 ms |
-| AVG-LATENCY | 36.1057 ms | 50.4279 ms | 467.4253 ms |
-| Latency p10 | 13.712090 ms | 14.861507 ms | 65.910086 ms |
-| Latency p25 | 16.625779 ms | 18.884719 ms | 77.221971 ms |
-| Latency p50 | 22.306160 ms | 22.291879 ms | 120.663354 ms |
-| Latency p75 | 40.376905 ms | 25.751846 ms | 716.373543 ms |
-| Latency p90 | 65.849751 ms | 30.030446 ms | 1068.038406 ms |
-| Latency p95 | 137.545464 ms | 81.141780 ms | 1080.751412 ms |
-| Latency p99 | 177.127309 ms | 965.771377 ms | 2686.919571 ms |
-| Latency p99.9 | 198.540415 ms | 2911.408642 ms | 19041.188919 ms |
-+----------------------------+--------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##### Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
-
-- Google Cloud Compute Engine
-- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
-- Ubuntu 16.10
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.2 (Go 1.7.4)
-
-
-```
-+----------------------------+-------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
-+----------------------------+-------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA | 0 | 211 | 141 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 4431218 | 4670825 | 7233188 |
-| SECTORS-WRITTEN-DELTA-SUM | 2263660 | 14832440 | 81719964 |
-| RECEIVE-BYTES-SUM | 5.8 GB | 5.8 GB | 6.0 GB |
-| TRANSMIT-BYTES-SUM | 4.6 GB | 4.7 GB | 4.7 GB |
-| MAX-CPU-USAGE | 52.02 % | 46.67 % | 84.40 % |
-| MAX-MEMORY-USAGE | 1626.60 MB | 3568.67 MB | 3950.50 MB |
-| TOTAL-SECONDS | 999.0083 sec | 1000.5091 sec | 1195.0587 sec |
-| AVG-THROUGHPUT | 1000.9927 req/sec | 998.8554 req/sec | 836.7790 req/sec |
-| SLOWEST-LATENCY | 198.1010 ms | 2392.6933 ms | 23594.1354 ms |
-| FASTEST-LATENCY | 1.2003 ms | 0.9210 ms | 3.6024 ms |
-| AVG-LATENCY | 4.5224 ms | 8.1224 ms | 363.4513 ms |
-| Latency p10 | 2.710760 ms | 1.593791 ms | 8.339832 ms |
-| Latency p25 | 3.382362 ms | 1.815819 ms | 36.060302 ms |
-| Latency p50 | 4.375098 ms | 2.109050 ms | 134.805513 ms |
-| Latency p75 | 5.431229 ms | 2.403126 ms | 205.643246 ms |
-| Latency p90 | 6.422301 ms | 2.662319 ms | 227.073525 ms |
-| Latency p95 | 7.127944 ms | 3.112525 ms | 250.450359 ms |
-| Latency p99 | 8.805373 ms | 236.442165 ms | 10010.579309 ms |
-| Latency p99.9 | 17.743337 ms | 1006.184186 ms | 22707.315056 ms |
-+----------------------------+-------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##### Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
-
-- Google Cloud Compute Engine
-- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
-- Ubuntu 16.10
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.2 (Go 1.7.4)
-
-
-```
-+----------------------------+-------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
-+----------------------------+-------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA | 185 | 293 | 383 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 2090388 | 1667449 | 3966668 |
-| SECTORS-WRITTEN-DELTA-SUM | 1173224 | 14349236 | 30568376 |
-| RECEIVE-BYTES-SUM | 5.2 GB | 5.4 GB | 8.9 GB |
-| TRANSMIT-BYTES-SUM | 4.0 GB | 4.3 GB | 7.7 GB |
-| MAX-CPU-USAGE | 56.46 % | 56.26 % | 56.29 % |
-| MAX-MEMORY-USAGE | 1466.26 MB | 3563.36 MB | 4545.72 MB |
-| TOTAL-SECONDS | 570.7510 sec | 477.1301 sec | 1056.0748 sec |
-| AVG-THROUGHPUT | 1752.0775 req/sec | 2090.3063 req/sec | 946.9027 req/sec |
-| SLOWEST-LATENCY | 556.0183 ms | 3654.9846 ms | 17465.0180 ms |
-| FASTEST-LATENCY | 1.1633 ms | 0.9644 ms | 3.2258 ms |
-| AVG-LATENCY | 12.1934 ms | 30.7887 ms | 96.5730 ms |
-| Latency p10 | 2.312432 ms | 2.226581 ms | 4.048553 ms |
-| Latency p25 | 4.204692 ms | 2.847540 ms | 5.682306 ms |
-| Latency p50 | 7.689732 ms | 4.229944 ms | 10.091410 ms |
-| Latency p75 | 14.481892 ms | 10.914450 ms | 44.163918 ms |
-| Latency p90 | 24.692357 ms | 17.725627 ms | 94.140188 ms |
-| Latency p95 | 40.230709 ms | 24.428028 ms | 208.474321 ms |
-| Latency p99 | 60.787420 ms | 1188.220202 ms | 895.758025 ms |
-| Latency p99.9 | 527.752867 ms | 2326.553678 ms | 13622.807237 ms |
-+----------------------------+-------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##### Write 1M keys, 1000-client, 256-byte key, 1KB value
-
-- Packet Bare Metal
-- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
-- Ubuntu 16.04
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.2 (Go 1.7.4)
-
-
-```
-+----------------------------+--------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
-+----------------------------+--------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA | 6 | 4 | 14 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 339249 | 663603 | 1124580 |
-| SECTORS-WRITTEN-DELTA-SUM | 0 | 0 | 0 |
-| RECEIVE-BYTES-SUM | 5.2 GB | 5.4 GB | 5.7 GB |
-| TRANSMIT-BYTES-SUM | 4.0 GB | 4.4 GB | 4.4 GB |
-| MAX-CPU-USAGE | 363.53 % | 388.31 % | 282.29 % |
-| MAX-MEMORY-USAGE | 1219.19 MB | 9291.80 MB | 4659.98 MB |
-| TOTAL-SECONDS | 40.8774 sec | 30.3340 sec | 164.0401 sec |
-| AVG-THROUGHPUT | 24463.3803 req/sec | 32964.2605 req/sec | 6096.0706 req/sec |
-| SLOWEST-LATENCY | 150.4056 ms | 1565.8847 ms | 7306.8885 ms |
-| FASTEST-LATENCY | 0.8704 ms | 0.3387 ms | 8.9377 ms |
-| AVG-LATENCY | 40.7504 ms | 29.4415 ms | 163.8167 ms |
-| Latency p10 | 19.337223 ms | 18.111482 ms | 58.038157 ms |
-| Latency p25 | 24.134461 ms | 20.482972 ms | 72.112776 ms |
-| Latency p50 | 33.954506 ms | 23.463435 ms | 106.720600 ms |
-| Latency p75 | 54.301812 ms | 27.142309 ms | 213.816984 ms |
-| Latency p90 | 72.115813 ms | 31.443281 ms | 333.154609 ms |
-| Latency p95 | 81.127899 ms | 35.534083 ms | 373.636304 ms |
-| Latency p99 | 98.866146 ms | 147.958507 ms | 461.374153 ms |
-| Latency p99.9 | 132.016073 ms | 1378.812699 ms | 5311.162416 ms |
-+----------------------------+--------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##### Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
-
-- Packet Bare Metal
-- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
-- Ubuntu 16.04
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.2 (Go 1.7.4)
-
-
-```
-+----------------------------+-------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
-+----------------------------+-------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA | 473 | 712 | 571 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 8263385 | 9922581 | 13261792 |
-| SECTORS-WRITTEN-DELTA-SUM | 0 | 0 | 0 |
-| RECEIVE-BYTES-SUM | 6.5 GB | 5.9 GB | 6.4 GB |
-| TRANSMIT-BYTES-SUM | 5.2 GB | 4.7 GB | 5.1 GB |
-| MAX-CPU-USAGE | 91.10 % | 64.88 % | 147.91 % |
-| MAX-MEMORY-USAGE | 1696.60 MB | 2842.88 MB | 4231.98 MB |
-| TOTAL-SECONDS | 999.0582 sec | 999.8117 sec | 1040.1450 sec |
-| AVG-THROUGHPUT | 1000.9427 req/sec | 999.5752 req/sec | 961.4044 req/sec |
-| SLOWEST-LATENCY | 56.0360 ms | 2635.4569 ms | 8546.8756 ms |
-| FASTEST-LATENCY | 0.7225 ms | 0.3447 ms | 1.3011 ms |
-| AVG-LATENCY | 1.3866 ms | 6.9357 ms | 93.2921 ms |
-| Latency p10 | 1.019233 ms | 0.667793 ms | 2.297153 ms |
-| Latency p25 | 1.140797 ms | 0.757403 ms | 2.458065 ms |
-| Latency p50 | 1.303873 ms | 0.876627 ms | 2.654298 ms |
-| Latency p75 | 1.429593 ms | 0.982231 ms | 3.600769 ms |
-| Latency p90 | 1.584000 ms | 1.121141 ms | 10.765193 ms |
-| Latency p95 | 1.733878 ms | 1.236501 ms | 65.069180 ms |
-| Latency p99 | 3.298035 ms | 28.890276 ms | 4628.091116 ms |
-| Latency p99.9 | 17.796168 ms | 1369.914634 ms | 7243.951610 ms |
-+----------------------------+-------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##### Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
-
-- Packet Bare Metal
-- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
-- Ubuntu 16.04
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.2 (Go 1.7.4)
-
-
-```
-+----------------------------+-------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
-+----------------------------+-------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA | 308 | 216 | 532 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 3480145 | 3471343 | 6597902 |
-| SECTORS-WRITTEN-DELTA-SUM | 0 | 0 | 0 |
-| RECEIVE-BYTES-SUM | 5.4 GB | 5.3 GB | 5.8 GB |
-| TRANSMIT-BYTES-SUM | 4.2 GB | 4.3 GB | 4.5 GB |
-| MAX-CPU-USAGE | 135.68 % | 116.33 % | 124.26 % |
-| MAX-MEMORY-USAGE | 1328.39 MB | 6276.01 MB | 4790.06 MB |
-| TOTAL-SECONDS | 276.4103 sec | 185.1561 sec | 582.4233 sec |
-| AVG-THROUGHPUT | 3617.8096 req/sec | 5400.8493 req/sec | 1716.9642 req/sec |
-| SLOWEST-LATENCY | 155.0781 ms | 2140.8240 ms | 5637.2541 ms |
-| FASTEST-LATENCY | 0.6443 ms | 0.2915 ms | 1.3058 ms |
-| AVG-LATENCY | 12.7328 ms | 9.5968 ms | 47.3448 ms |
-| Latency p10 | 1.115963 ms | 0.706270 ms | 2.296140 ms |
-| Latency p25 | 1.484697 ms | 0.890714 ms | 3.300920 ms |
-| Latency p50 | 2.696072 ms | 1.594529 ms | 6.696194 ms |
-| Latency p75 | 14.830030 ms | 10.053333 ms | 42.282100 ms |
-| Latency p90 | 36.917286 ms | 18.814867 ms | 93.939972 ms |
-| Latency p95 | 67.270709 ms | 24.070593 ms | 131.658011 ms |
-| Latency p99 | 92.520682 ms | 38.044010 ms | 473.239177 ms |
-| Latency p99.9 | 122.274461 ms | 1725.413184 ms | 4949.483214 ms |
-+----------------------------+-------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_CPU_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_CPU_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index 6c4934df..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_CPU_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DATA_RECEIVE_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DATA_RECEIVE_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index db366cec..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DATA_RECEIVE_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DATA_TRANSMIT_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DATA_TRANSMIT_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index 8a5f143e..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DATA_TRANSMIT_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DISK_WRITES_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DISK_WRITES_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index 5b995cd0..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_DISK_WRITES_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_1000QPS_LINE_CHARTS_LOGARITHMIC.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_1000QPS_LINE_CHARTS_LOGARITHMIC.png
deleted file mode 100644
index d57cd346..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_1000QPS_LINE_CHARTS_LOGARITHMIC.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_BOX_PLOTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_BOX_PLOTS.png
deleted file mode 100644
index 6fbe645a..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_BOX_PLOTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index 46b15431..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_LATENCY_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_1000QPS_LINE_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_1000QPS_LINE_CHARTS.png
deleted file mode 100644
index e7c96c66..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_1000QPS_LINE_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_BAR_CHARTS.png
deleted file mode 100644
index 44663505..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index 5670f49f..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_MEMORY_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_SECTOR_WRITES_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_SECTOR_WRITES_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index d9472c45..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_SECTOR_WRITES_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_BAR_CHARTS.png
deleted file mode 100644
index 9c9135e9..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_BY_CLIENTS_BAR_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_BY_CLIENTS_BAR_CHARTS.png
deleted file mode 100644
index a52fc344..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_BY_CLIENTS_BAR_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_LINE_CHARTS.png b/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_LINE_CHARTS.png
deleted file mode 100644
index 49affef5..00000000
Binary files a/bench-results/2017Q1-01-etcd-zookeeper-consul/VM_WRITE_1M_THROUGHPUT_LINE_CHARTS.png and /dev/null differ
diff --git a/bench-results/2017Q1-02-etcd-zookeeper-consul/README.md b/bench-results/2017Q1-02-etcd-zookeeper-consul/README.md
deleted file mode 100755
index fb3a7d59..00000000
--- a/bench-results/2017Q1-02-etcd-zookeeper-consul/README.md
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-##### Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
-
-- Google Cloud Compute Engine
-- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
-- Ubuntu 16.10
-- etcd v3.1 (Go 1.7.4)
-- Zookeeper r3.4.9
- - Java 8
- - javac 1.8.0_121
- - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
-- Consul v0.7.3 (Go 1.7.4)
-
-
-```
-+-----------------------------+-------------------+------------------------+-----------------------+
-| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
-+-----------------------------+-------------------+------------------------+-----------------------+
-| READS-COMPLETED-DELTA-SUM | 2 | 218 | 126 |
-| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
-| WRITES-COMPLETED-DELTA-SUM | 1,217,752 | 955,419 | 2,183,202 |
-| SECTORS-WRITTEN-DELTA-SUM | 702,780 | 11,846,404 | 3,991,232 |
-| AVG-DATA-SIZE-ON-DISK | 2.5 GB | 7.4 GB | 3.1 GB |
-| NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.0 GB | 5.5 GB |
-| NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.0 GB | 4.2 GB |
-| MAX-CPU-USAGE | 451.00 % | 800.00 % | 409.33 % |
-| MAX-MEMORY-USAGE | 1.3 GB | 3.7 GB | 4.7 GB |
-| TOTAL-SECONDS | 324.5626 sec | 335.0999 sec | 667.9389 sec |
-| MAX-THROUGHPUT | 36,479 req/sec | 41,799 req/sec | 15,969 req/sec |
-| AVG-THROUGHPUT | 3,081 req/sec | 2,961 req/sec | 1,497 req/sec |
-| MIN-THROUGHPUT | 79 req/sec | 0 req/sec | 49 req/sec |
-| FASTEST-LATENCY | 1.0313 ms | 1.1256 ms | 2.9151 ms |
-| AVG-LATENCY | 13.4807 ms | 25.5780 ms | 47.0926 ms |
-| SLOWEST-LATENCY | 261.8235 ms | 4260.5699 ms | 22260.1112 ms |
-| Latency p10 | 2.201212 ms | 2.528874 ms | 3.926152 ms |
-| Latency p25 | 5.636563 ms | 3.821957 ms | 7.640734 ms |
-| Latency p50 | 9.696159 ms | 6.656013 ms | 19.126381 ms |
-| Latency p75 | 16.202583 ms | 11.576279 ms | 54.750630 ms |
-| Latency p90 | 28.434395 ms | 14.472618 ms | 77.993718 ms |
-| Latency p95 | 44.336815 ms | 16.786180 ms | 91.026490 ms |
-| Latency p99 | 60.008762 ms | 479.797108 ms | 201.844359 ms |
-| Latency p99.9 | 84.831886 ms | 2725.947720 ms | 1502.535463 ms |
-| CLIENT-NETWORK-RECEIVE-SUM | 270 MB | 353 MB | 200 MB |
-| CLIENT-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
-| CLIENT-MAX-CPU-USAGE | 577.00 % | 496.00 % | 210.00 % |
-| CLIENT-MAX-MEMORY-USAGE | 355 MB | 3.3 GB | 227 MB |
-| CLIENT-ERROR-COUNT | 0 | 7,495 | 0 |
-+-----------------------------+-------------------+------------------------+-----------------------+
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/main.go b/cmd/dbtester/main.go
similarity index 91%
rename from main.go
rename to cmd/dbtester/main.go
index c8b7aef9..47a665c0 100644
--- a/main.go
+++ b/cmd/dbtester/main.go
@@ -18,7 +18,7 @@
// dbtester [command]
//
// Available Commands:
-// agent Database 'agent' in remote servers (runs database, upload logs).
+// agent Database 'agent' in remote servers.
// analyze Analyzes test dbtester test results.
// control Controls tests.
//
@@ -38,7 +38,7 @@ var (
rootCommand = &cobra.Command{
Use: "dbtester",
Short: "dbtester is distributed database tester.",
- SuggestFor: []string{"dbtstetr", "dbtes"},
+ SuggestFor: []string{"dbtstetr", "dbtes", "dbtesters"},
}
)
diff --git a/config-dbtester-gcloud-key.json b/config-dbtester-gcloud-key.json
new file mode 100644
index 00000000..15c3c97c
--- /dev/null
+++ b/config-dbtester-gcloud-key.json
@@ -0,0 +1 @@
+test-key
\ No newline at end of file
diff --git a/control/doc.go b/config_cetcd.go
similarity index 81%
rename from control/doc.go
rename to config_cetcd.go
index 88b8ff32..8bdcd8bf 100644
--- a/control/doc.go
+++ b/config_cetcd.go
@@ -12,5 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Package control controls distributed databases in remote servers.
-package control
+package dbtester
+
+// Cetcd is cetcd-specific flags
+// (https://github.com/coreos/cetcd).
+type Cetcd struct {
+ // no options needed yet
+}
diff --git a/config_consul.go b/config_consul.go
new file mode 100644
index 00000000..fb58fec4
--- /dev/null
+++ b/config_consul.go
@@ -0,0 +1,21 @@
+// Copyright 2017 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 dbtester
+
+// Consul is Consul-specific flags
+// (https://github.com/hashicorp/consul).
+type Consul struct {
+ // no options needed yet
+}
diff --git a/config_dbtester.go b/config_dbtester.go
new file mode 100644
index 00000000..0193b47b
--- /dev/null
+++ b/config_dbtester.go
@@ -0,0 +1,347 @@
+// Copyright 2017 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 dbtester
+
+import (
+ "fmt"
+ "io/ioutil"
+ "path/filepath"
+ "strings"
+
+ "github.com/coreos/dbtester/dbtesterpb"
+ "gopkg.in/yaml.v2"
+)
+
+// Config configures dbtester control clients.
+type Config struct {
+ TestTitle string `yaml:"test_title"`
+ TestDescription string `yaml:"test_description"`
+
+ Control `yaml:"control"`
+ AllDatabaseIDList []string `yaml:"all_database_id_list"`
+ DatabaseIDToTestGroup map[string]TestGroup `yaml:"datatbase_id_to_test_group"`
+ DatabaseIDToTestData map[string]TestData `yaml:"datatbase_id_to_test_data"`
+
+ Analyze `yaml:"analyze"`
+
+ PlotPathPrefix string `yaml:"plot_path_prefix"`
+ PlotList []Plot `yaml:"plot_list"`
+ README `yaml:"readme"`
+}
+
+// Control represents common control options on client machine.
+type Control struct {
+ PathPrefix string `yaml:"path_prefix"`
+ LogPath string `yaml:"log_path"`
+ ClientSystemMetricsPath string `yaml:"client_system_metrics_path"`
+ ClientSystemMetricsInterpolatedPath string `yaml:"client_system_metrics_interpolated_path"`
+ ClientLatencyThroughputTimeseriesPath string `yaml:"client_latency_throughput_timeseries_path"`
+ ClientLatencyDistributionAllPath string `yaml:"client_latency_distribution_all_path"`
+ ClientLatencyDistributionPercentilePath string `yaml:"client_latency_distribution_percentile_path"`
+ ClientLatencyDistributionSummaryPath string `yaml:"client_latency_distribution_summary_path"`
+ ClientLatencyByKeyNumberPath string `yaml:"client_latency_by_key_number_path"`
+ ServerDatasizeOnDiskSummaryPath string `yaml:"server_data_size_on_disk_summary_path"`
+
+ GoogleCloudProjectName string `yaml:"google_cloud_project_name"`
+ GoogleCloudStorageKeyPath string `yaml:"google_cloud_storage_key_path"`
+ GoogleCloudStorageKey string
+ GoogleCloudStorageBucketName string `yaml:"google_cloud_storage_bucket_name"`
+ GoogleCloudStorageSubDirectory string `yaml:"google_cloud_storage_sub_directory"`
+}
+
+// TestGroup specifies database test group.
+type TestGroup struct {
+ DatabaseID string
+ DatabaseDescription string `yaml:"database_description"`
+ DatabaseTag string
+
+ PeerIPs []string `yaml:"peer_ips"`
+ PeerIPsString string
+
+ DatabasePortToConnect int `yaml:"database_port_to_connect"`
+ DatabaseEndpoints []string
+
+ AgentPortToConnect int `yaml:"agent_port_to_connect"`
+ AgentEndpoints []string
+
+ // database-specific flags to start
+ Etcdv2 `yaml:"etcdv2"`
+ Etcdv3 `yaml:"etcdv3"`
+ Zookeeper `yaml:"zookeeper"`
+ Consul `yaml:"consul"`
+ Zetcd `yaml:"zetcd"`
+ Cetcd `yaml:"cetcd"`
+
+ // benchmark options
+ BenchmarkOptions `yaml:"benchmark_options"`
+ BenchmarkSteps `yaml:"benchmark_steps"`
+}
+
+// BenchmarkOptions specifies the benchmark options.
+type BenchmarkOptions struct {
+ Type string `yaml:"type"`
+
+ RequestNumber int64 `yaml:"request_number"`
+ ConnectionNumber int64 `yaml:"connection_number"`
+ ClientNumber int64 `yaml:"client_number"`
+ ConnectionClientNumbers []int64 `yaml:"connection_client_numbers"`
+ RateLimitRequestsPerSecond int64 `yaml:"rate_limit_requests_per_second"`
+
+ // for writes, reads
+ SameKey bool `yaml:"same_key"`
+ KeySizeBytes int64 `yaml:"key_size_bytes"`
+ ValueSizeBytes int64 `yaml:"value_size_bytes"`
+
+ // for reads
+ StaleRead bool `yaml:"stale_read"`
+}
+
+// BenchmarkSteps specifies the benchmark workflow.
+type BenchmarkSteps struct {
+ Step1StartDatabase bool `yaml:"step1_start_database"`
+ Step2StressDatabase bool `yaml:"step2_stress_database"`
+ Step3StopDatabase bool `yaml:"step3_stop_database"`
+ Step4UploadLogs bool `yaml:"step4_upload_logs"`
+}
+
+// TestData defines raw data to import.
+type TestData struct {
+ DatabaseID string
+ DatabaseTag string
+ DatabaseDescription string
+
+ PathPrefix string `yaml:"path_prefix"`
+ ClientSystemMetricsInterpolatedPath string `yaml:"client_system_metrics_interpolated_path"`
+ ClientLatencyThroughputTimeseriesPath string `yaml:"client_latency_throughput_timeseries_path"`
+ ClientLatencyDistributionAllPath string `yaml:"client_latency_distribution_all_path"`
+ ClientLatencyDistributionPercentilePath string `yaml:"client_latency_distribution_percentile_path"`
+ ClientLatencyDistributionSummaryPath string `yaml:"client_latency_distribution_summary_path"`
+ ClientLatencyByKeyNumberPath string `yaml:"client_latency_by_key_number_path"`
+ ServerDatasizeOnDiskSummaryPath string `yaml:"server_data_size_on_disk_summary_path"`
+ ServerMemoryByKeyNumberPath string `yaml:"server_memory_by_key_number_path"`
+ ServerSystemMetricsInterpolatedPathList []string `yaml:"server_system_metrics_interpolated_path_list"`
+ AllAggregatedOutputPath string `yaml:"all_aggregated_output_path"`
+}
+
+// Analyze defines analyze config.
+type Analyze struct {
+ AllAggregatedOutputPathCSV string `yaml:"all_aggregated_output_path_csv"`
+ AllAggregatedOutputPathTXT string `yaml:"all_aggregated_output_path_txt"`
+}
+
+// Plot defines plot configuration.
+type Plot struct {
+ Column string `yaml:"column"`
+ XAxis string `yaml:"x_axis"`
+ YAxis string `yaml:"y_axis"`
+ OutputPathCSV string `yaml:"output_path_csv"`
+ OutputPathList []string `yaml:"output_path_list"`
+}
+
+// README defines how to write README.
+type README struct {
+ OutputPath string `yaml:"output_path"`
+ Images []Image `yaml:"images"`
+}
+
+// Image defines image data.
+type Image struct {
+ Title string `yaml:"title"`
+ Path string `yaml:"path"`
+ Type string `yaml:"type"`
+}
+
+// ReadConfig reads control configuration file.
+func ReadConfig(fpath string, analyze bool) (*Config, error) {
+ bts, err := ioutil.ReadFile(fpath)
+ if err != nil {
+ return nil, err
+ }
+ cfg := Config{}
+ if err := yaml.Unmarshal(bts, &cfg); err != nil {
+ return nil, err
+ }
+
+ if cfg.Control.PathPrefix != "" {
+ cfg.Control.LogPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.LogPath)
+ cfg.Control.ClientSystemMetricsPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientSystemMetricsPath)
+ cfg.Control.ClientSystemMetricsInterpolatedPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientSystemMetricsInterpolatedPath)
+ cfg.Control.ClientLatencyThroughputTimeseriesPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyThroughputTimeseriesPath)
+ cfg.Control.ClientLatencyDistributionAllPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyDistributionAllPath)
+ cfg.Control.ClientLatencyDistributionPercentilePath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyDistributionPercentilePath)
+ cfg.Control.ClientLatencyDistributionSummaryPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyDistributionSummaryPath)
+ cfg.Control.ClientLatencyByKeyNumberPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyByKeyNumberPath)
+ cfg.Control.ServerDatasizeOnDiskSummaryPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ServerDatasizeOnDiskSummaryPath)
+ }
+
+ for databaseID, group := range cfg.DatabaseIDToTestGroup {
+ group.DatabaseID = databaseID
+ group.DatabaseTag = MakeTag(group.DatabaseDescription)
+ group.PeerIPsString = strings.Join(group.PeerIPs, "___")
+ group.DatabaseEndpoints = make([]string, len(group.PeerIPs))
+ group.AgentEndpoints = make([]string, len(group.PeerIPs))
+ for j := range group.PeerIPs {
+ group.DatabaseEndpoints[j] = fmt.Sprintf("%s:%d", group.PeerIPs[j], group.DatabasePortToConnect)
+ group.AgentEndpoints[j] = fmt.Sprintf("%s:%d", group.PeerIPs[j], group.AgentPortToConnect)
+ }
+ cfg.DatabaseIDToTestGroup[databaseID] = group
+ }
+
+ for databaseID, testdata := range cfg.DatabaseIDToTestData {
+ testdata.PathPrefix = strings.TrimSpace(testdata.PathPrefix)
+ testdata.DatabaseID = databaseID
+ testdata.DatabaseTag = cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag
+ testdata.DatabaseDescription = cfg.DatabaseIDToTestGroup[databaseID].DatabaseDescription
+
+ if testdata.PathPrefix != "" {
+ testdata.ClientSystemMetricsInterpolatedPath = testdata.PathPrefix + "-" + testdata.ClientSystemMetricsInterpolatedPath
+ testdata.ClientLatencyThroughputTimeseriesPath = testdata.PathPrefix + "-" + testdata.ClientLatencyThroughputTimeseriesPath
+ testdata.ClientLatencyDistributionAllPath = testdata.PathPrefix + "-" + testdata.ClientLatencyDistributionAllPath
+ testdata.ClientLatencyDistributionPercentilePath = testdata.PathPrefix + "-" + testdata.ClientLatencyDistributionPercentilePath
+ testdata.ClientLatencyDistributionSummaryPath = testdata.PathPrefix + "-" + testdata.ClientLatencyDistributionSummaryPath
+ testdata.ClientLatencyByKeyNumberPath = testdata.PathPrefix + "-" + testdata.ClientLatencyByKeyNumberPath
+ testdata.ServerDatasizeOnDiskSummaryPath = testdata.PathPrefix + "-" + testdata.ServerDatasizeOnDiskSummaryPath
+ testdata.ServerMemoryByKeyNumberPath = testdata.PathPrefix + "-" + testdata.ServerMemoryByKeyNumberPath
+ for i := range testdata.ServerSystemMetricsInterpolatedPathList {
+ testdata.ServerSystemMetricsInterpolatedPathList[i] = testdata.PathPrefix + "-" + testdata.ServerSystemMetricsInterpolatedPathList[i]
+ }
+ testdata.AllAggregatedOutputPath = testdata.PathPrefix + "-" + testdata.AllAggregatedOutputPath
+ }
+
+ cfg.DatabaseIDToTestData[databaseID] = testdata
+ }
+
+ for databaseID, group := range cfg.DatabaseIDToTestGroup {
+ if databaseID != "etcdv3" && group.BenchmarkOptions.ConnectionNumber != group.BenchmarkOptions.ClientNumber {
+ return nil, fmt.Errorf("%q got connected %d != clients %d", databaseID, group.BenchmarkOptions.ConnectionNumber, group.BenchmarkOptions.ClientNumber)
+ }
+ }
+
+ var (
+ defaultEtcdSnapCount int64 = 100000
+ defaultZookeeperSnapCount int64 = 100000
+ defaultZookeeperTickTime int64 = 2000
+ defaultZookeeperInitLimit int64 = 5
+ defaultZookeeperSyncLimit int64 = 5
+ defaultZookeeperMaxClientConnections int64 = 5000
+ )
+ if v, ok := cfg.DatabaseIDToTestGroup["etcdv3"]; ok {
+ if v.Etcdv3.SnapCount == 0 {
+ v.Etcdv3.SnapCount = defaultEtcdSnapCount
+ }
+ cfg.DatabaseIDToTestGroup["etcdv3"] = v
+ }
+ if v, ok := cfg.DatabaseIDToTestGroup["zookeeper"]; ok {
+ if v.Zookeeper.TickTime == 0 {
+ v.Zookeeper.TickTime = defaultZookeeperTickTime
+ }
+ if v.Zookeeper.InitLimit == 0 {
+ v.Zookeeper.InitLimit = defaultZookeeperInitLimit
+ }
+ if v.Zookeeper.SyncLimit == 0 {
+ v.Zookeeper.SyncLimit = defaultZookeeperSyncLimit
+ }
+ if v.Zookeeper.SnapCount == 0 {
+ v.Zookeeper.SnapCount = defaultZookeeperSnapCount
+ }
+ if v.Zookeeper.MaxClientConnections == 0 {
+ v.Zookeeper.MaxClientConnections = defaultZookeeperMaxClientConnections
+ }
+ cfg.DatabaseIDToTestGroup["zookeeper"] = v
+ }
+
+ if cfg.Control.GoogleCloudStorageKeyPath != "" && !analyze {
+ bts, err = ioutil.ReadFile(cfg.Control.GoogleCloudStorageKeyPath)
+ if err != nil {
+ return nil, err
+ }
+ cfg.Control.GoogleCloudStorageKey = string(bts)
+ }
+
+ for i := range cfg.PlotList {
+ cfg.PlotList[i].OutputPathCSV = filepath.Join(cfg.PlotPathPrefix, cfg.PlotList[i].Column+".csv")
+ cfg.PlotList[i].OutputPathList = make([]string, 2)
+ cfg.PlotList[i].OutputPathList[0] = filepath.Join(cfg.PlotPathPrefix, cfg.PlotList[i].Column+".svg")
+ cfg.PlotList[i].OutputPathList[1] = filepath.Join(cfg.PlotPathPrefix, cfg.PlotList[i].Column+".png")
+ }
+
+ return &cfg, nil
+}
+
+// MakeTag converts database scription to database tag.
+func MakeTag(desc string) string {
+ s := strings.ToLower(desc)
+ s = strings.Replace(s, "go ", "go", -1)
+ s = strings.Replace(s, "java ", "java", -1)
+ s = strings.Replace(s, "(", "", -1)
+ s = strings.Replace(s, ")", "", -1)
+ return strings.Replace(s, " ", "-", -1)
+}
+
+// ToRequest converts configuration to 'dbtesterpb.Request'.
+func (cfg *Config) ToRequest(databaseID string, op dbtesterpb.Request_Operation, idx int) (req *dbtesterpb.Request, err error) {
+ gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
+ if !ok {
+ err = fmt.Errorf("%q is not defined", databaseID)
+ return
+ }
+
+ req = &dbtesterpb.Request{
+ Operation: op,
+ TriggerLogUpload: gcfg.BenchmarkSteps.Step4UploadLogs,
+ DatabaseID: dbtesterpb.Request_Database(dbtesterpb.Request_Database_value[databaseID]),
+ DatabaseTag: gcfg.DatabaseTag,
+ PeerIPsString: gcfg.PeerIPsString,
+ IpIndex: uint32(idx),
+ CurrentClientNumber: gcfg.BenchmarkOptions.ClientNumber,
+ Control: &dbtesterpb.Request_Control{
+ GoogleCloudProjectName: cfg.Control.GoogleCloudProjectName,
+ GoogleCloudStorageKey: cfg.Control.GoogleCloudStorageKey,
+ GoogleCloudStorageBucketName: cfg.Control.GoogleCloudStorageBucketName,
+ GoogleCloudStorageSubDirectory: cfg.Control.GoogleCloudStorageSubDirectory,
+ },
+ }
+
+ switch req.DatabaseID {
+ case dbtesterpb.Request_etcdv2:
+
+ case dbtesterpb.Request_etcdv3:
+ req.Etcdv3Config = &dbtesterpb.Request_Etcdv3{
+ SnapCount: gcfg.Etcdv3.SnapCount,
+ QuotaSizeBytes: gcfg.Etcdv3.QuotaSizeBytes,
+ }
+
+ case dbtesterpb.Request_zookeeper:
+ req.ZookeeperConfig = &dbtesterpb.Request_Zookeeper{
+ MyID: uint32(idx + 1),
+ TickTime: gcfg.Zookeeper.TickTime,
+ ClientPort: int64(gcfg.DatabasePortToConnect),
+ InitLimit: gcfg.Zookeeper.InitLimit,
+ SyncLimit: gcfg.Zookeeper.SyncLimit,
+ SnapCount: gcfg.Zookeeper.SnapCount,
+ MaxClientConnections: gcfg.Zookeeper.MaxClientConnections,
+ }
+
+ case dbtesterpb.Request_consul:
+ case dbtesterpb.Request_zetcd:
+ case dbtesterpb.Request_cetcd:
+
+ default:
+ err = fmt.Errorf("unknown %v", req.DatabaseID)
+ return
+ }
+
+ return
+}
diff --git a/config_dbtester_test.go b/config_dbtester_test.go
new file mode 100644
index 00000000..7609cc24
--- /dev/null
+++ b/config_dbtester_test.go
@@ -0,0 +1,501 @@
+// Copyright 2017 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 dbtester
+
+import (
+ "reflect"
+ "testing"
+
+ "github.com/coreos/dbtester/dbtesterpb"
+)
+
+func TestConfig(t *testing.T) {
+ cfg, err := ReadConfig("config_dbtester_test.yaml", false)
+ if err != nil {
+ t.Fatal(err)
+ }
+ expected := &Config{
+ TestTitle: "Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000",
+ TestDescription: `- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+`,
+ Control: Control{
+ PathPrefix: "/home/gyuho",
+ LogPath: "/home/gyuho/client-control.log",
+ ClientSystemMetricsPath: "/home/gyuho/client-system-metrics.csv",
+ ClientSystemMetricsInterpolatedPath: "/home/gyuho/client-system-metrics-interpolated.csv",
+ ClientLatencyThroughputTimeseriesPath: "/home/gyuho/client-latency-throughput-timeseries.csv",
+ ClientLatencyDistributionAllPath: "/home/gyuho/client-latency-distribution-all.csv",
+ ClientLatencyDistributionPercentilePath: "/home/gyuho/client-latency-distribution-percentile.csv",
+ ClientLatencyDistributionSummaryPath: "/home/gyuho/client-latency-distribution-summary.csv",
+ ClientLatencyByKeyNumberPath: "/home/gyuho/client-latency-by-key-number.csv",
+ ServerDatasizeOnDiskSummaryPath: "/home/gyuho/server-data-size-on-disk-summary.csv",
+ GoogleCloudProjectName: "etcd-development",
+ GoogleCloudStorageKeyPath: "config-dbtester-gcloud-key.json",
+ GoogleCloudStorageKey: "test-key",
+ GoogleCloudStorageBucketName: "dbtester-results",
+ GoogleCloudStorageSubDirectory: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
+ },
+ AllDatabaseIDList: []string{"etcdv3", "zookeeper", "consul"},
+ DatabaseIDToTestGroup: map[string]TestGroup{
+ "etcdv3": {
+ DatabaseID: "etcdv3",
+ DatabaseTag: "etcd-v3.1-go1.7.4",
+ DatabaseDescription: "etcd v3.1 (Go 1.7.4)",
+ PeerIPs: []string{"10.240.0.20", "10.240.0.21", "10.240.0.22"},
+ PeerIPsString: "10.240.0.20___10.240.0.21___10.240.0.22",
+ DatabasePortToConnect: 2379,
+ DatabaseEndpoints: []string{"10.240.0.20:2379", "10.240.0.21:2379", "10.240.0.22:2379"},
+ AgentPortToConnect: 3500,
+ AgentEndpoints: []string{"10.240.0.20:3500", "10.240.0.21:3500", "10.240.0.22:3500"},
+ Etcdv3: Etcdv3{
+ SnapCount: 100000,
+ QuotaSizeBytes: 8000000000,
+ },
+ BenchmarkOptions: BenchmarkOptions{
+ Type: "write",
+ RequestNumber: 1000000,
+ ConnectionNumber: 0,
+ ClientNumber: 0,
+ ConnectionClientNumbers: []int64{1, 10, 50, 100, 300, 500, 700, 1000},
+ RateLimitRequestsPerSecond: 0,
+ SameKey: false,
+ KeySizeBytes: 256,
+ ValueSizeBytes: 1024,
+ StaleRead: false,
+ },
+ BenchmarkSteps: BenchmarkSteps{
+ Step1StartDatabase: true,
+ Step2StressDatabase: true,
+ Step3StopDatabase: true,
+ Step4UploadLogs: true,
+ },
+ },
+ "zookeeper": {
+ DatabaseID: "zookeeper",
+ DatabaseTag: "zookeeper-r3.4.9-java8",
+ DatabaseDescription: "Zookeeper r3.4.9 (Java 8)",
+ PeerIPs: []string{"10.240.0.25", "10.240.0.27", "10.240.0.28"},
+ PeerIPsString: "10.240.0.25___10.240.0.27___10.240.0.28",
+ DatabasePortToConnect: 2181,
+ DatabaseEndpoints: []string{"10.240.0.25:2181", "10.240.0.27:2181", "10.240.0.28:2181"},
+ AgentPortToConnect: 3500,
+ AgentEndpoints: []string{"10.240.0.25:3500", "10.240.0.27:3500", "10.240.0.28:3500"},
+ Zookeeper: Zookeeper{
+ TickTime: 2000,
+ InitLimit: 5,
+ SyncLimit: 5,
+ SnapCount: 100000,
+ MaxClientConnections: 5000,
+ },
+ BenchmarkOptions: BenchmarkOptions{
+ Type: "write",
+ RequestNumber: 1000000,
+ ConnectionNumber: 0,
+ ClientNumber: 0,
+ ConnectionClientNumbers: []int64{1, 10, 50, 100, 300, 500, 700, 1000},
+ RateLimitRequestsPerSecond: 0,
+ SameKey: false,
+ KeySizeBytes: 256,
+ ValueSizeBytes: 1024,
+ StaleRead: false,
+ },
+ BenchmarkSteps: BenchmarkSteps{
+ Step1StartDatabase: true,
+ Step2StressDatabase: true,
+ Step3StopDatabase: true,
+ Step4UploadLogs: true,
+ },
+ },
+ "consul": {
+ DatabaseID: "consul",
+ DatabaseTag: "consul-v0.7.3-go1.7.4",
+ DatabaseDescription: "Consul v0.7.3 (Go 1.7.4)",
+ PeerIPs: []string{"10.240.0.30", "10.240.0.31", "10.240.0.33"},
+ PeerIPsString: "10.240.0.30___10.240.0.31___10.240.0.33",
+ DatabasePortToConnect: 8500,
+ DatabaseEndpoints: []string{"10.240.0.30:8500", "10.240.0.31:8500", "10.240.0.33:8500"},
+ AgentPortToConnect: 3500,
+ AgentEndpoints: []string{"10.240.0.30:3500", "10.240.0.31:3500", "10.240.0.33:3500"},
+ BenchmarkOptions: BenchmarkOptions{
+ Type: "write",
+ RequestNumber: 1000000,
+ ConnectionNumber: 0,
+ ClientNumber: 0,
+ ConnectionClientNumbers: []int64{1, 10, 50, 100, 300, 500, 700, 1000},
+ RateLimitRequestsPerSecond: 0,
+ SameKey: false,
+ KeySizeBytes: 256,
+ ValueSizeBytes: 1024,
+ StaleRead: false,
+ },
+ BenchmarkSteps: BenchmarkSteps{
+ Step1StartDatabase: true,
+ Step2StressDatabase: true,
+ Step3StopDatabase: true,
+ Step4UploadLogs: true,
+ },
+ },
+ },
+ DatabaseIDToTestData: map[string]TestData{
+ "etcdv3": {
+ DatabaseID: "etcdv3",
+ DatabaseTag: "etcd-v3.1-go1.7.4",
+ DatabaseDescription: "etcd v3.1 (Go 1.7.4)",
+ PathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4",
+
+ ClientSystemMetricsInterpolatedPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv",
+ ClientLatencyThroughputTimeseriesPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-throughput-timeseries.csv",
+ ClientLatencyDistributionAllPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-distribution-all.csv",
+ ClientLatencyDistributionPercentilePath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-distribution-percentile.csv",
+ ClientLatencyDistributionSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-distribution-summary.csv",
+ ClientLatencyByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-by-key-number.csv",
+ ServerMemoryByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-server-memory-by-key-number.csv",
+ ServerDatasizeOnDiskSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-server-data-size-on-disk-summary.csv",
+ ServerSystemMetricsInterpolatedPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-server-system-metrics-interpolated.csv",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-server-system-metrics-interpolated.csv",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-server-system-metrics-interpolated.csv",
+ },
+ AllAggregatedOutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-all-aggregated.csv",
+ },
+ "zookeeper": {
+ DatabaseID: "zookeeper",
+ DatabaseTag: "zookeeper-r3.4.9-java8",
+ DatabaseDescription: "Zookeeper r3.4.9 (Java 8)",
+ PathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8",
+
+ ClientSystemMetricsInterpolatedPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv",
+ ClientLatencyThroughputTimeseriesPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-throughput-timeseries.csv",
+ ClientLatencyDistributionAllPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-distribution-all.csv",
+ ClientLatencyDistributionPercentilePath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-distribution-percentile.csv",
+ ClientLatencyDistributionSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-distribution-summary.csv",
+ ClientLatencyByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-by-key-number.csv",
+ ServerMemoryByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-server-memory-by-key-number.csv",
+ ServerDatasizeOnDiskSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-server-data-size-on-disk-summary.csv",
+ ServerSystemMetricsInterpolatedPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-server-system-metrics-interpolated.csv",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-server-system-metrics-interpolated.csv",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-server-system-metrics-interpolated.csv",
+ },
+ AllAggregatedOutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-all-aggregated.csv",
+ },
+ "consul": {
+ DatabaseID: "consul",
+ DatabaseTag: "consul-v0.7.3-go1.7.4",
+ DatabaseDescription: "Consul v0.7.3 (Go 1.7.4)",
+ PathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4",
+
+ ClientSystemMetricsInterpolatedPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv",
+ ClientLatencyThroughputTimeseriesPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-throughput-timeseries.csv",
+ ClientLatencyDistributionAllPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-distribution-all.csv",
+ ClientLatencyDistributionPercentilePath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-distribution-percentile.csv",
+ ClientLatencyDistributionSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-distribution-summary.csv",
+ ClientLatencyByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-by-key-number.csv",
+ ServerMemoryByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-server-memory-by-key-number.csv",
+ ServerDatasizeOnDiskSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-server-data-size-on-disk-summary.csv",
+ ServerSystemMetricsInterpolatedPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-1-server-system-metrics-interpolated.csv",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-2-server-system-metrics-interpolated.csv",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-3-server-system-metrics-interpolated.csv",
+ },
+ AllAggregatedOutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-all-aggregated.csv",
+ },
+ },
+ Analyze: Analyze{
+ AllAggregatedOutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.csv",
+ AllAggregatedOutputPathTXT: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.txt",
+ },
+ PlotPathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
+ PlotList: []Plot{
+ {
+ Column: "AVG-LATENCY-MS",
+ XAxis: "Second",
+ YAxis: "Latency(millisecond)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.png",
+ },
+ },
+ {
+ Column: "AVG-THROUGHPUT",
+ XAxis: "Second",
+ YAxis: "Throughput(Requests/Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.png",
+ },
+ },
+ {
+ Column: "AVG-VOLUNTARY-CTXT-SWITCHES",
+ XAxis: "Second",
+ YAxis: "Voluntary Context Switches",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png",
+ },
+ },
+ {
+ Column: "AVG-NON-VOLUNTARY-CTXT-SWITCHES",
+ XAxis: "Second",
+ YAxis: "Non-voluntary Context Switches",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png",
+ },
+ },
+ {
+ Column: "AVG-CPU",
+ XAxis: "Second",
+ YAxis: "CPU(%)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.png",
+ },
+ },
+ {
+ Column: "AVG-VMRSS-MB",
+ XAxis: "Second",
+ YAxis: "Memory(MB)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.png",
+ },
+ },
+ {
+ Column: "AVG-READS-COMPLETED-DELTA",
+ XAxis: "Second",
+ YAxis: "Disk Reads (Delta per Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png",
+ },
+ },
+ {
+ Column: "AVG-SECTORS-READ-DELTA",
+ XAxis: "Second",
+ YAxis: "Sectors Read (Delta per Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png",
+ },
+ },
+ {
+ Column: "AVG-WRITES-COMPLETED-DELTA",
+ XAxis: "Second",
+ YAxis: "Disk Writes (Delta per Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png",
+ },
+ },
+ {
+ Column: "AVG-SECTORS-WRITTEN-DELTA",
+ XAxis: "Second",
+ YAxis: "Sectors Written (Delta per Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png",
+ },
+ },
+ {
+ Column: "AVG-RECEIVE-BYTES-NUM-DELTA",
+ XAxis: "Second",
+ YAxis: "Network Receive(bytes) (Delta per Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png",
+ },
+ },
+ {
+ Column: "AVG-TRANSMIT-BYTES-NUM-DELTA",
+ XAxis: "Second",
+ YAxis: "Network Transmit(bytes) (Delta per Second)",
+ OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.csv",
+ OutputPathList: []string{
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg",
+ "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png",
+ },
+ },
+ },
+ README: README{
+ OutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md",
+
+ Images: []Image{
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg",
+ Type: "remote",
+ },
+ {
+ Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA",
+ Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg",
+ Type: "remote",
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(cfg, expected) {
+ t.Fatalf("configuration expected\n%+v\n, got\n%+v\n", expected, cfg)
+ }
+
+ req1, err := cfg.ToRequest("etcdv3", dbtesterpb.Request_Start, 0)
+ if err != nil {
+ t.Fatal(err)
+ }
+ expected1 := &dbtesterpb.Request{
+ Operation: dbtesterpb.Request_Start,
+ TriggerLogUpload: true,
+ DatabaseID: dbtesterpb.Request_etcdv3,
+ DatabaseTag: "etcd-v3.1-go1.7.4",
+ PeerIPsString: "10.240.0.20___10.240.0.21___10.240.0.22",
+ IpIndex: 0,
+ CurrentClientNumber: 0,
+ Control: &dbtesterpb.Request_Control{
+ GoogleCloudProjectName: "etcd-development",
+ GoogleCloudStorageKey: "test-key",
+ GoogleCloudStorageBucketName: "dbtester-results",
+ GoogleCloudStorageSubDirectory: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
+ },
+ Etcdv3Config: &dbtesterpb.Request_Etcdv3{
+ SnapCount: 100000,
+ QuotaSizeBytes: 8000000000,
+ },
+ }
+ if !reflect.DeepEqual(req1, expected1) {
+ t.Fatalf("configuration expected\n%+v\n, got\n%+v\n", expected1, req1)
+ }
+
+ req2, err := cfg.ToRequest("zookeeper", dbtesterpb.Request_Start, 2)
+ if err != nil {
+ t.Fatal(err)
+ }
+ expected2 := &dbtesterpb.Request{
+ Operation: dbtesterpb.Request_Start,
+ TriggerLogUpload: true,
+ DatabaseID: dbtesterpb.Request_zookeeper,
+ DatabaseTag: "zookeeper-r3.4.9-java8",
+ PeerIPsString: "10.240.0.25___10.240.0.27___10.240.0.28",
+ IpIndex: 2,
+ CurrentClientNumber: 0,
+ Control: &dbtesterpb.Request_Control{
+ GoogleCloudProjectName: "etcd-development",
+ GoogleCloudStorageKey: "test-key",
+ GoogleCloudStorageBucketName: "dbtester-results",
+ GoogleCloudStorageSubDirectory: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
+ },
+ ZookeeperConfig: &dbtesterpb.Request_Zookeeper{
+ MyID: 3,
+ TickTime: 2000,
+ ClientPort: 2181,
+ InitLimit: 5,
+ SyncLimit: 5,
+ SnapCount: 100000,
+ MaxClientConnections: 5000,
+ },
+ }
+ if !reflect.DeepEqual(req2, expected2) {
+ t.Fatalf("configuration expected\n%+v\n, got\n%+v\n", expected2, req2)
+ }
+}
diff --git a/config_dbtester_test.yaml b/config_dbtester_test.yaml
new file mode 100644
index 00000000..6b6b1b9d
--- /dev/null
+++ b/config_dbtester_test.yaml
@@ -0,0 +1,340 @@
+test_title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
+test_description: |
+ - Google Cloud Compute Engine
+ - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+ - Ubuntu 16.10
+ - etcd v3.1 (Go 1.7.4)
+ - Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+ - Consul v0.7.3 (Go 1.7.4)
+
+# common control options for all client machines
+control:
+ # if not empty, all test data paths are prefixed
+ path_prefix: /home/gyuho
+ log_path: client-control.log
+ client_system_metrics_path: client-system-metrics.csv
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+
+ # (optional) to automatically upload all files in client machine
+ google_cloud_project_name: etcd-development
+ # set this in 'control' machine, to automate log uploading in remote 'agent' machines
+ # google_cloud_storage_key_path: /home/gyuho/gcloud-key.json
+ google_cloud_storage_key_path: config-dbtester-gcloud-key.json
+ google_cloud_storage_bucket_name: dbtester-results
+ google_cloud_storage_sub_directory: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable
+
+all_database_id_list: [etcdv3, zookeeper, consul]
+
+datatbase_id_to_test_group:
+ etcdv3:
+ database_description: etcd v3.1 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.20
+ - 10.240.0.21
+ - 10.240.0.22
+ database_port_to_connect: 2379
+ agent_port_to_connect: 3500
+
+ etcdv3:
+ # --snapshot-count
+ snap_count: 100000
+ # --quota-backend-bytes; 8 GB
+ quota_size_bytes: 8000000000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 0
+ client_number: 0
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ zookeeper:
+ database_description: Zookeeper r3.4.9 (Java 8)
+ peer_ips:
+ - 10.240.0.25
+ - 10.240.0.27
+ - 10.240.0.28
+ database_port_to_connect: 2181
+ agent_port_to_connect: 3500
+
+ # http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
+ zookeeper:
+ # tickTime; the length of a single tick, which is the basic time unit used by ZooKeeper,
+ # as measured in milliseconds.
+ tick_time: 2000
+
+ # initLimit; Amount of time, in ticks to allow followers to connect and sync to a leader
+ # increased this value as needed, if the amount of data managed by ZooKeeper is large.
+ # (default 5)
+ init_limit: 5
+
+ # syncLimit; Amount of time, in ticks to allow followers to sync with ZooKeeper.
+ # (default 5)
+ sync_limit: 5
+
+ # snapCount; After snapCount transactions are written to a log file a snapshot
+ # is started and a new transaction log file is created. The default snapCount is 100,000.
+ snap_count: 100000
+
+ # maxClientCnxns; Limits the number of concurrent connections (at the socket level)
+ # that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
+ max_client_connections: 5000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 0
+ client_number: 0
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ consul:
+ database_description: Consul v0.7.3 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.30
+ - 10.240.0.31
+ - 10.240.0.33
+ database_port_to_connect: 8500
+ agent_port_to_connect: 3500
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 0
+ client_number: 0
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+
+datatbase_id_to_test_data:
+ etcdv3:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ zookeeper:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ consul:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+analyze:
+ all_aggregated_output_path_csv: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.csv
+ all_aggregated_output_path_txt: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.txt
+
+plot_path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable
+plot_list:
+- column: AVG-LATENCY-MS
+ x_axis: Second
+ y_axis: Latency(millisecond)
+
+- column: AVG-THROUGHPUT
+ x_axis: Second
+ y_axis: Throughput(Requests/Second)
+
+- column: AVG-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Voluntary Context Switches
+
+- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Non-voluntary Context Switches
+
+- column: AVG-CPU
+ x_axis: Second
+ y_axis: CPU(%)
+
+- column: AVG-VMRSS-MB
+ x_axis: Second
+ y_axis: Memory(MB)
+
+- column: AVG-READS-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Reads (Delta per Second)
+
+- column: AVG-SECTORS-READ-DELTA
+ x_axis: Second
+ y_axis: Sectors Read (Delta per Second)
+
+- column: AVG-WRITES-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Writes (Delta per Second)
+
+- column: AVG-SECTORS-WRITTEN-DELTA
+ x_axis: Second
+ y_axis: Sectors Written (Delta per Second)
+
+- column: AVG-RECEIVE-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Receive(bytes) (Delta per Second)
+
+- column: AVG-TRANSMIT-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Transmit(bytes) (Delta per Second)
+
+readme:
+ output_path: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md
+
+ images:
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
+ type: remote
diff --git a/config_etcdv2.go b/config_etcdv2.go
new file mode 100644
index 00000000..409b5616
--- /dev/null
+++ b/config_etcdv2.go
@@ -0,0 +1,21 @@
+// Copyright 2017 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 dbtester
+
+// Etcdv2 is etcdv2-specific flags
+// (https://github.com/coreos/etcd/blob/master/etcdmain/help.go).
+type Etcdv2 struct {
+ // no options needed yet
+}
diff --git a/config_etcdv3.go b/config_etcdv3.go
new file mode 100644
index 00000000..0ab44c9e
--- /dev/null
+++ b/config_etcdv3.go
@@ -0,0 +1,22 @@
+// Copyright 2017 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 dbtester
+
+// Etcdv3 is etcdv3-specific flags
+// (https://github.com/coreos/etcd/blob/master/etcdmain/help.go).
+type Etcdv3 struct {
+ SnapCount int64 `yaml:"snap_count"`
+ QuotaSizeBytes int64 `yaml:"quota_size_bytes"`
+}
diff --git a/config_zetcd.go b/config_zetcd.go
new file mode 100644
index 00000000..2480f923
--- /dev/null
+++ b/config_zetcd.go
@@ -0,0 +1,21 @@
+// Copyright 2017 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 dbtester
+
+// Zetcd is zetcd-specific flags
+// (https://github.com/coreos/zetcd).
+type Zetcd struct {
+ // no options needed yet
+}
diff --git a/config_zookeeper.go b/config_zookeeper.go
new file mode 100644
index 00000000..169998e8
--- /dev/null
+++ b/config_zookeeper.go
@@ -0,0 +1,25 @@
+// Copyright 2017 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 dbtester
+
+// Zookeeper is Zookeeper-specific flags
+// (http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html).
+type Zookeeper struct {
+ TickTime int64 `yaml:"tick_time"`
+ InitLimit int64 `yaml:"init_limit"`
+ SyncLimit int64 `yaml:"sync_limit"`
+ SnapCount int64 `yaml:"snap_count"`
+ MaxClientConnections int64 `yaml:"max_client_connections"`
+}
diff --git a/control/command.go b/control/command.go
index 7e65209b..8dff77ff 100644
--- a/control/command.go
+++ b/control/command.go
@@ -16,11 +16,11 @@ package control
import (
"fmt"
- "io/ioutil"
"os"
- "strings"
"time"
+ "github.com/coreos/dbtester"
+ "github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/netutil"
"github.com/coreos/dbtester/pkg/ntp"
"github.com/gyuho/psn"
@@ -34,6 +34,7 @@ var Command = &cobra.Command{
RunE: commandFunc,
}
+var databaseID string
var configPath string
var diskDevice string
var networkInterface string
@@ -52,17 +53,15 @@ func init() {
nt = k
break
}
+
+ Command.PersistentFlags().StringVar(&databaseID, "database-id", "etcdv3", "etcdv2, etcdv3, zookeeper, consul, zetcd, cetcd.")
Command.PersistentFlags().StringVarP(&configPath, "config", "c", "", "YAML configuration file path.")
Command.PersistentFlags().StringVar(&diskDevice, "disk-device", dn, "Disk device to collect disk statistics metrics from.")
Command.PersistentFlags().StringVar(&networkInterface, "network-interface", nt, "Network interface to record in/outgoing packets.")
}
func commandFunc(cmd *cobra.Command, args []string) error {
- cfg, err := ReadConfig(configPath)
- if err != nil {
- return err
- }
- switch cfg.Database {
+ switch databaseID {
case "etcdv2":
case "etcdv3":
case "zookeeper":
@@ -70,30 +69,32 @@ func commandFunc(cmd *cobra.Command, args []string) error {
case "consul":
case "cetcd":
default:
- return fmt.Errorf("%q is not supported", cfg.Database)
+ return fmt.Errorf("%q is not supported", databaseID)
}
- if !cfg.Step2.SkipStressDatabase {
- switch cfg.Step2.BenchType {
+ cfg, err := dbtester.ReadConfig(configPath, false)
+ if err != nil {
+ return err
+ }
+
+ gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
+ if !ok {
+ return fmt.Errorf("%q is not found", databaseID)
+ }
+
+ if gcfg.BenchmarkSteps.Step2StressDatabase {
+ switch gcfg.BenchmarkOptions.Type {
case "write":
case "read":
case "read-oneshot":
default:
- return fmt.Errorf("%q is not supported", cfg.Step2.BenchType)
+ return fmt.Errorf("%q is not supported", gcfg.BenchmarkOptions.Type)
}
}
- if cfg.Step4.UploadLogs {
- bts, err := ioutil.ReadFile(cfg.Step4.GoogleCloudStorageKeyPath)
- if err != nil {
- return err
- }
- cfg.Step4.GoogleCloudStorageKey = string(bts)
- }
-
pid := int64(os.Getpid())
- plog.Infof("starting collecting system metrics at %q [disk device: %q | network interface: %q | PID: %d]", cfg.ClientSystemMetrics, diskDevice, networkInterface, pid)
- if err = os.RemoveAll(cfg.ClientSystemMetrics); err != nil {
+ plog.Infof("starting collecting system metrics at %q [disk device: %q | network interface: %q | PID: %d]", cfg.Control.ClientSystemMetricsPath, diskDevice, networkInterface, pid)
+ if err = os.RemoveAll(cfg.Control.ClientSystemMetricsPath); err != nil {
return err
}
tcfg := &psn.TopConfig{
@@ -103,7 +104,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
}
var metricsCSV *psn.CSV
metricsCSV, err = psn.NewCSV(
- cfg.ClientSystemMetrics,
+ cfg.Control.ClientSystemMetricsPath,
pid,
diskDevice,
networkInterface,
@@ -125,7 +126,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
}
case <-donec:
- plog.Infof("finishing collecting system metrics; saving CSV at %q", cfg.ClientSystemMetrics)
+ plog.Infof("finishing collecting system metrics; saving CSV at %q", cfg.Control.ClientSystemMetricsPath)
if err := metricsCSV.Save(); err != nil {
plog.Errorf("psn.CSV.Save(%q) error %v", metricsCSV.FilePath, err)
@@ -137,7 +138,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
if err != nil {
plog.Fatalf("psn.CSV.Interpolate(%q) failed with %v", metricsCSV.FilePath, err)
}
- interpolated.FilePath = cfg.ClientSystemMetricsInterpolated
+ interpolated.FilePath = cfg.Control.ClientSystemMetricsInterpolatedPath
if err := interpolated.Save(); err != nil {
plog.Errorf("psn.CSV.Save(%q) error %v", interpolated.FilePath, err)
} else {
@@ -151,60 +152,89 @@ func commandFunc(cmd *cobra.Command, args []string) error {
}
}()
- // protoc sorts the 'repeated' type data
- // encode in string to enforce ordering of IPs
- cfg.PeerIPString = strings.Join(cfg.PeerIPs, "___")
- cfg.AgentEndpoints = make([]string, len(cfg.PeerIPs))
- cfg.DatabaseEndpoints = make([]string, len(cfg.PeerIPs))
- for i := range cfg.PeerIPs {
- cfg.AgentEndpoints[i] = fmt.Sprintf("%s:%d", cfg.PeerIPs[i], cfg.AgentPort)
- }
- for i := range cfg.PeerIPs {
- cfg.DatabaseEndpoints[i] = fmt.Sprintf("%s:%d", cfg.PeerIPs[i], cfg.DatabasePort)
- }
-
no, nerr := ntp.DefaultSync()
plog.Infof("npt update output: %q", no)
plog.Infof("npt update error: %v", nerr)
println()
- if !cfg.Step1.SkipStartDatabase {
+ if gcfg.BenchmarkSteps.Step1StartDatabase {
plog.Info("step 1: starting databases...")
- if err = step1StartDatabase(cfg); err != nil {
+ if _, err = cfg.BroadcaseRequest(databaseID, dbtesterpb.Request_Start); err != nil {
return err
}
}
- if !cfg.Step2.SkipStressDatabase {
+ if gcfg.BenchmarkSteps.Step2StressDatabase {
println()
time.Sleep(5 * time.Second)
+ println()
plog.Info("step 2: starting tests...")
- if err = step2StressDatabase(cfg); err != nil {
+ if err = cfg.Stress(databaseID); err != nil {
return err
}
}
- println()
- time.Sleep(5 * time.Second)
- idxToResponse, err := step3StopDatabase(cfg)
- if err != nil {
- plog.Warning(err)
- }
- for idx := range cfg.AgentEndpoints {
- plog.Infof("stop response: %+v", idxToResponse[idx])
- }
+ if gcfg.BenchmarkSteps.Step3StopDatabase {
+ println()
+ time.Sleep(5 * time.Second)
+ println()
+ plog.Info("step 3: stopping tests...")
+ var idxToResp map[int]dbtesterpb.Response
+ for i := 0; i < 5; i++ {
+ idxToResp, err = cfg.BroadcaseRequest(databaseID, dbtesterpb.Request_Stop)
+ if err != nil {
+ plog.Warningf("#%d: STOP failed at %v", i, err)
+ time.Sleep(300 * time.Millisecond)
+ continue
+ }
+ break
+ }
+ for idx := range gcfg.AgentEndpoints {
+ plog.Infof("stop response: %+v", idxToResp[idx])
+ }
- println()
- time.Sleep(time.Second)
- saveDatasizeSummary(cfg, idxToResponse)
+ println()
+ time.Sleep(time.Second)
+ println()
+ plog.Info("step 3: saving responses...")
+ if err = cfg.SaveDatasizeOnDiskSummary(databaseID, idxToResp); err != nil {
+ return err
+ }
+ }
close(donec)
<-sysdonec
- if cfg.Step4.UploadLogs {
+ if gcfg.BenchmarkSteps.Step4UploadLogs {
println()
time.Sleep(3 * time.Second)
- if err := step4UploadLogs(cfg); err != nil {
+ println()
+ plog.Info("step 4: uploading logs...")
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.LogPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientSystemMetricsPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientSystemMetricsInterpolatedPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyThroughputTimeseriesPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyDistributionAllPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyDistributionPercentilePath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyDistributionSummaryPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyByKeyNumberPath); err != nil {
+ return err
+ }
+ if err = cfg.UploadToGoogle(databaseID, cfg.Control.ServerDatasizeOnDiskSummaryPath); err != nil {
return err
}
}
diff --git a/control/config.go b/control/config.go
deleted file mode 100644
index af503fcb..00000000
--- a/control/config.go
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "fmt"
- "io/ioutil"
-
- "github.com/coreos/dbtester/agent/agentpb"
-
- "gopkg.in/yaml.v2"
-)
-
-// Config configures dbtester control clients.
-type Config struct {
- Database string `yaml:"database"`
- TestName string `yaml:"test_name"`
-
- PeerIPs []string `yaml:"peer_ips"`
- PeerIPString string
- AgentPort int `yaml:"agent_port"`
- DatabasePort int `yaml:"database_port"`
-
- AgentEndpoints []string
- DatabaseEndpoints []string
-
- Log string `yaml:"log"`
- DatasizeSummary string `yaml:"data_size_summary"`
- DataLatencyDistributionSummary string `yaml:"data_latency_distribution_summary"`
- DataLatencyDistributionPercentile string `yaml:"data_latency_distribution_percentile"`
- DataLatencyDistributionAll string `yaml:"data_latency_distribution_all"`
- DataLatencyThroughputTimeseries string `yaml:"data_latency_throughput_timeseries"`
- DataLatencyByKeyNumber string `yaml:"data_latency_by_key_number"`
- ClientSystemMetrics string `yaml:"client_system_metrics"`
- ClientSystemMetricsInterpolated string `yaml:"client_system_metrics_interpolated"`
-
- // https://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
- Step1 struct {
- SkipStartDatabase bool `yaml:"skip_start_database"`
- EtcdSnapCount int64 `yaml:"etcd_snap_count"`
- EtcdQuotaSizeBytes int64 `yaml:"etcd_quota_size_bytes"`
- ZookeeperSnapCount int64 `yaml:"zookeeper_snap_count"`
- ZookeeperMaxClientCnxns int64 `yaml:"zookeeper_max_client_connections"`
- } `yaml:"step1"`
-
- Step2 struct {
- SkipStressDatabase bool `yaml:"skip_stress_database"`
- BenchType string `yaml:"bench_type"`
- StaleRead bool `yaml:"stale_read"`
- Connections int `yaml:"connections"`
- Clients int `yaml:"clients"`
- ConnectionsClients []int `yaml:"connections_clients"`
- KeySize int `yaml:"key_size"`
- SameKey bool `yaml:"same_key"`
- ValueSize int `yaml:"value_size"`
- TotalRequests int `yaml:"total_requests"`
- RequestsPerSecond int `yaml:"requests_per_second"`
- } `yaml:"step2"`
-
- Step3 struct {
- Action string `yaml:"action"`
- } `yaml:"step3"`
-
- Step4 struct {
- UploadLogs bool `yaml:"upload_logs"`
- GoogleCloudProjectName string `yaml:"google_cloud_project_name"`
- GoogleCloudStorageKey string
- GoogleCloudStorageKeyPath string `yaml:"google_cloud_storage_key_path"`
- GoogleCloudStorageBucketName string `yaml:"google_cloud_storage_bucket_name"`
- GoogleCloudStorageSubDirectory string `yaml:"google_cloud_storage_sub_directory"`
- } `yaml:"step4"`
-}
-
-var (
- defaultEtcdSnapCount int64 = 100000
- defaultZookeeperSnapCount int64 = 100000
- defaultZookeeperMaxClientCnxns int64 = 5000
-)
-
-// ReadConfig reads control configuration file.
-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
- }
-
- if rs.Step2.Connections != rs.Step2.Clients {
- switch rs.Database {
- case "etcdv2":
- return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
-
- case "etcdv3":
-
- case "zookeeper":
- return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
-
- case "zetcd":
- return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
-
- case "consul":
- return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
-
- case "cetcd":
- return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
- }
- }
-
- if rs.Step1.EtcdSnapCount == 0 {
- rs.Step1.EtcdSnapCount = defaultEtcdSnapCount
- }
- if rs.Step1.ZookeeperSnapCount == 0 {
- rs.Step1.ZookeeperSnapCount = defaultZookeeperSnapCount
- }
- if rs.Step1.ZookeeperMaxClientCnxns == 0 {
- rs.Step1.ZookeeperMaxClientCnxns = defaultZookeeperMaxClientCnxns
- }
-
- return rs, nil
-}
-
-// ToRequest converts control configuration to agent RPC.
-func (cfg *Config) ToRequest() agentpb.Request {
- req := agentpb.Request{}
-
- req.TestName = cfg.TestName
-
- switch cfg.Database {
- case "etcdv2":
- req.Database = agentpb.Request_etcdv2
-
- case "etcdv3":
- req.Database = agentpb.Request_etcdv3
-
- case "zookeeper":
- req.Database = agentpb.Request_ZooKeeper
-
- case "zetcd":
- req.Database = agentpb.Request_zetcd
-
- case "consul":
- req.Database = agentpb.Request_Consul
-
- case "cetcd":
- req.Database = agentpb.Request_cetcd
- }
-
- req.PeerIPString = cfg.PeerIPString
-
- req.EtcdSnapCount = cfg.Step1.EtcdSnapCount
- req.EtcdQuotaSizeBytes = cfg.Step1.EtcdQuotaSizeBytes
- req.ZookeeperSnapCount = cfg.Step1.ZookeeperSnapCount
- req.ZookeeperMaxClientCnxns = cfg.Step1.ZookeeperMaxClientCnxns
-
- req.ClientNum = int64(cfg.Step2.Clients)
-
- req.UploadLogs = cfg.Step4.UploadLogs
- req.GoogleCloudProjectName = cfg.Step4.GoogleCloudProjectName
- req.GoogleCloudStorageKey = cfg.Step4.GoogleCloudStorageKey
- req.GoogleCloudStorageBucketName = cfg.Step4.GoogleCloudStorageBucketName
- req.GoogleCloudStorageSubDirectory = cfg.Step4.GoogleCloudStorageSubDirectory
-
- return req
-}
diff --git a/control/config_test.go b/control/config_test.go
deleted file mode 100644
index 1e15b920..00000000
--- a/control/config_test.go
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "reflect"
- "testing"
-)
-
-func TestReadConfig(t *testing.T) {
- c, err := ReadConfig("config_test.yaml")
- if err != nil {
- t.Fatal(err)
- }
- if c.Database != "etcdv3" {
- t.Fatalf("unexpected %s", c.Database)
- }
- if c.TestName != "01-etcdv3" {
- t.Fatalf("unexpected %s", c.TestName)
- }
- if !reflect.DeepEqual(c.PeerIPs, []string{"10.240.0.13", "10.240.0.14", "10.240.0.15"}) {
- t.Fatalf("unexpected %s", c.PeerIPs)
- }
- if c.AgentPort != 3500 {
- t.Fatalf("unexpected %d", c.AgentPort)
- }
- if c.DatabasePort != 2379 {
- t.Fatalf("unexpected %d", c.DatabasePort)
- }
-
- if c.Log != "control.log" {
- t.Fatalf("unexpected %v", c.Log)
- }
- if c.DatasizeSummary != "data-size-summary.csv" {
- t.Fatalf("unexpected %s", c.DatasizeSummary)
- }
- if c.DataLatencyDistributionSummary != "data-latency-distribution-summary.csv" {
- t.Fatalf("unexpected %s", c.DataLatencyDistributionSummary)
- }
- if c.DataLatencyDistributionPercentile != "data-latency-distribution-percentile.csv" {
- t.Fatalf("unexpected %s", c.DataLatencyDistributionPercentile)
- }
- if c.DataLatencyDistributionAll != "data-latency-distribution-all.csv" {
- t.Fatalf("unexpected %s", c.DataLatencyDistributionAll)
- }
- if c.DataLatencyThroughputTimeseries != "data-latency-throughput-timeseries.csv" {
- t.Fatalf("unexpected %s", c.DataLatencyThroughputTimeseries)
- }
- if c.DataLatencyByKeyNumber != "data-latency-by-key-number.csv" {
- t.Fatalf("unexpected %s", c.DataLatencyByKeyNumber)
- }
- if c.ClientSystemMetrics != "client-system-metrics.csv" {
- t.Fatalf("unexpected %s", c.ClientSystemMetrics)
- }
- if c.ClientSystemMetricsInterpolated != "client-system-metrics-interpolated.csv" {
- t.Fatalf("unexpected %s", c.ClientSystemMetricsInterpolated)
- }
-
- if c.Step1.SkipStartDatabase {
- t.Fatalf("unexpected %v", c.Step1.SkipStartDatabase)
- }
- if c.Step1.EtcdSnapCount != 100000 {
- t.Fatalf("unexpected %d", c.Step1.EtcdSnapCount)
- }
- if c.Step1.EtcdQuotaSizeBytes != 8000000000 {
- t.Fatalf("unexpected %d", c.Step1.EtcdQuotaSizeBytes)
- }
- if c.Step1.ZookeeperSnapCount != 100000 {
- t.Fatalf("unexpected %d", c.Step1.ZookeeperSnapCount)
- }
- if c.Step1.ZookeeperMaxClientCnxns != 5000 {
- t.Fatalf("unexpected %d", c.Step1.ZookeeperMaxClientCnxns)
- }
-
- if c.Step2.SkipStressDatabase {
- t.Fatalf("unexpected %v", c.Step2.SkipStressDatabase)
- }
- if c.Step2.BenchType != "write" {
- t.Fatalf("unexpected %s", c.Step2.BenchType)
- }
- if c.Step2.Clients != 1 {
- t.Fatalf("unexpected %d", c.Step2.Clients)
- }
- if c.Step2.Connections != 1 {
- t.Fatalf("unexpected %d", c.Step2.Connections)
- }
- if !reflect.DeepEqual(c.Step2.ConnectionsClients, []int{1, 3, 5, 10, 50, 100, 500, 700, 1000}) {
- t.Fatalf("unexpected %d", c.Step2.ConnectionsClients)
- }
- if c.Step2.KeySize != 256 {
- t.Fatalf("unexpected %d", c.Step2.KeySize)
- }
- if c.Step2.SameKey {
- t.Fatalf("unexpected %v", c.Step2.SameKey)
- }
- if c.Step2.ValueSize != 1024 {
- t.Fatalf("unexpected %d", c.Step2.ValueSize)
- }
- if !c.Step2.StaleRead {
- t.Fatalf("unexpected %v", c.Step2.StaleRead)
- }
- if c.Step2.TotalRequests != 100000 {
- t.Fatalf("unexpected %d", c.Step2.TotalRequests)
- }
- if c.Step2.RequestsPerSecond != 100 {
- t.Fatalf("unexpected %d", c.Step2.RequestsPerSecond)
- }
-
- if c.Step3.Action != "stop" {
- t.Fatalf("unexpected %v", c.Step3.Action)
- }
-
- if !c.Step4.UploadLogs {
- t.Fatalf("unexpected %v", c.Step4.UploadLogs)
- }
- if c.Step4.GoogleCloudProjectName != "etcd-development" {
- t.Fatalf("unexpected %s", c.Step4.GoogleCloudProjectName)
- }
- if c.Step4.GoogleCloudStorageKeyPath != "$HOME/gcloud-key.json" {
- t.Fatalf("unexpected %s", c.Step4.GoogleCloudStorageKeyPath)
- }
- if c.Step4.GoogleCloudStorageBucketName != "dbtester-results" {
- t.Fatalf("unexpected %s", c.Step4.GoogleCloudStorageBucketName)
- }
- if c.Step4.GoogleCloudStorageSubDirectory != "2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable" {
- t.Fatalf("unexpected %s", c.Step4.GoogleCloudStorageSubDirectory)
- }
-}
diff --git a/control/config_test.yaml b/control/config_test.yaml
deleted file mode 100644
index fb60096f..00000000
--- a/control/config_test.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-database: etcdv3
-test_name: 01-etcdv3
-
-peer_ips:
- - 10.240.0.13
- - 10.240.0.14
- - 10.240.0.15
-
-agent_port: 3500
-database_port: 2379
-
-log: control.log
-data_size_summary: data-size-summary.csv
-data_latency_distribution_summary: data-latency-distribution-summary.csv
-data_latency_distribution_percentile: data-latency-distribution-percentile.csv
-data_latency_distribution_all: data-latency-distribution-all.csv
-data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
-data_latency_by_key_number: data-latency-by-key-number.csv
-
-# client machine's system metrics
-client_system_metrics: client-system-metrics.csv
-client_system_metrics_interpolated: client-system-metrics-interpolated.csv
-
-# start database by sending RPC calls to agents
-step1:
- skip_start_database: false
- etcd_snap_count: 100000
- etcd_quota_size_bytes: 8000000000
- zookeeper_snap_count: 100000
- zookeeper_max_client_connections: 5000
-
-# start benchmark
-step2:
- skip_stress_database: false
- bench_type: write
- stale_read: true
- connections: 1
- clients: 1
- # if specified, connections, clients are overwritten
- connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
- key_size: 256
- value_size: 1024
- total_requests: 100000
- requests_per_second: 100
-
-# after benchmark
-step3:
- action: stop
-
-# upload logs
-step4:
- upload_logs: true
- google_cloud_project_name: etcd-development
- google_cloud_storage_key_path: $HOME/gcloud-key.json
- google_cloud_storage_bucket_name: dbtester-results
- google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable
diff --git a/control/step1_start_database.go b/control/step1_start_database.go
deleted file mode 100644
index 91d4137d..00000000
--- a/control/step1_start_database.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "context"
- "time"
-
- "github.com/coreos/dbtester/agent/agentpb"
- "google.golang.org/grpc"
-)
-
-func bcastReq(cfg Config, op agentpb.Request_Operation) (map[int]agentpb.Response, error) {
- req := cfg.ToRequest()
- req.Operation = op
-
- type result struct {
- idx int
- r agentpb.Response
- }
- donec, errc := make(chan result), make(chan error)
- for i := range cfg.PeerIPs {
- go func(i int) {
- if resp, err := sendReq(cfg.AgentEndpoints[i], req, i); err != nil {
- errc <- err
- } else {
- donec <- result{idx: i, r: *resp}
- }
- }(i)
- time.Sleep(time.Second)
- }
-
- im := make(map[int]agentpb.Response)
-
- var errs []error
- for cnt := 0; cnt != len(cfg.PeerIPs); cnt++ {
- select {
- case rs := <-donec:
- im[rs.idx] = rs.r
- case err := <-errc:
- errs = append(errs, err)
- }
- }
- if len(errs) > 0 {
- return nil, errs[0]
- }
-
- return im, nil
-}
-
-func sendReq(ep string, req agentpb.Request, i int) (*agentpb.Response, error) {
- req.ServerIndex = uint32(i)
- req.ZookeeperMyID = uint32(i + 1)
-
- plog.Infof("sending message [index: %d | operation: %q | database: %q | endpoint: %q]", i, req.Operation, req.Database, ep)
-
- conn, err := grpc.Dial(ep, grpc.WithInsecure())
- if err != nil {
- plog.Errorf("grpc.Dial connecting error (%v) [index: %d | endpoint: %q]", err, i, ep)
- return nil, err
- }
-
- defer conn.Close()
-
- cli := agentpb.NewTransporterClient(conn)
-
- // give enough timeout
- // e.g. uploading logs takes longer
- ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
- resp, err := cli.Transfer(ctx, &req)
- cancel()
- if err != nil {
- plog.Errorf("cli.Transfer error (%v) [index: %d | endpoint: %q]", err, i, ep)
- return nil, err
- }
-
- plog.Infof("got response [index: %d | endpoint: %q | response: %+v]", i, ep, resp)
- return resp, nil
-}
-
-func step1StartDatabase(cfg Config) error {
- _, err := bcastReq(cfg, agentpb.Request_Start)
- return err
-}
diff --git a/control/step2_stress_client_conn.go b/control/step2_stress_client_conn.go
deleted file mode 100644
index e460cd2b..00000000
--- a/control/step2_stress_client_conn.go
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "bufio"
- "fmt"
- "net"
- "net/http"
- "os"
- "strconv"
- "strings"
- "time"
-
- clientv2 "github.com/coreos/etcd/client"
- "github.com/coreos/etcd/clientv3"
- consulapi "github.com/hashicorp/consul/api"
- "github.com/samuel/go-zookeeper/zk"
-)
-
-var (
- zkCreateFlags = int32(0)
- zkCreateAcl = zk.WorldACL(zk.PermAll)
-)
-
-type request struct {
- etcdv2Op etcdv2Op
- etcdv3Op clientv3.Op
- zkOp zkOp
- consulOp consulOp
-}
-
-type etcdv2Op struct {
- key string
- value string
-}
-
-type zkOp struct {
- key string
- value []byte
- staleRead bool
-}
-
-type consulOp struct {
- key string
- value []byte
- staleRead bool
-}
-
-var (
- // dialTotal counts the number of mustCreateConn calls so that endpoint
- // connections can be handed out in round-robin order
- dialTotal int
-)
-
-func mustCreateConnEtcdv3(endpoints []string) *clientv3.Client {
- endpoint := endpoints[dialTotal%len(endpoints)]
- dialTotal++
- cfg := clientv3.Config{
- Endpoints: []string{endpoint},
- }
- client, err := clientv3.New(cfg)
- if err != nil {
- fmt.Fprintf(os.Stderr, "dial error: %v\n", err)
- os.Exit(1)
- }
- return client
-}
-
-type etcdv3ClientCfg struct {
- totalConns int
- totalClients int
-}
-
-func mustCreateClientsEtcdv3(endpoints []string, cfg etcdv3ClientCfg) []*clientv3.Client {
- conns := make([]*clientv3.Client, cfg.totalConns)
- for i := range conns {
- conns[i] = mustCreateConnEtcdv3(endpoints)
- }
-
- clients := make([]*clientv3.Client, cfg.totalClients)
- for i := range clients {
- clients[i] = conns[i%int(cfg.totalConns)]
- }
- return clients
-}
-
-func mustCreateClientsEtcdv2(endpoints []string, total int) []clientv2.KeysAPI {
- cks := make([]clientv2.KeysAPI, total)
- for i := range cks {
- endpoint := endpoints[dialTotal%len(endpoints)]
- dialTotal++
-
- if !strings.HasPrefix(endpoint, "http://") {
- endpoint = "http://" + endpoint
- }
-
- tr := &http.Transport{
- Proxy: http.ProxyFromEnvironment,
- Dial: (&net.Dialer{
- Timeout: 30 * time.Second,
- KeepAlive: 30 * time.Second,
- }).Dial,
- TLSHandshakeTimeout: 10 * time.Second,
- }
- cfg := clientv2.Config{
- Endpoints: []string{endpoint},
- Transport: tr,
- HeaderTimeoutPerRequest: time.Second,
- }
- c, err := clientv2.New(cfg)
- if err != nil {
- plog.Fatal(err)
- }
- kapi := clientv2.NewKeysAPI(c)
-
- cks[i] = kapi
- }
- return cks
-}
-
-func mustCreateConnsZk(endpoints []string, total int) []*zk.Conn {
- zks := make([]*zk.Conn, total)
- for i := range zks {
- endpoint := endpoints[dialTotal%len(endpoints)]
- dialTotal++
- conn, _, err := zk.Connect([]string{endpoint}, time.Second)
- if err != nil {
- plog.Fatal(err)
- }
- zks[i] = conn
- }
- return zks
-}
-
-func mustCreateConnsConsul(endpoints []string, total int) []*consulapi.KV {
- css := make([]*consulapi.KV, total)
- for i := range css {
- endpoint := endpoints[dialTotal%len(endpoints)]
- dialTotal++
-
- dcfg := consulapi.DefaultConfig()
- dcfg.Address = endpoint // x.x.x.x:8500
- cli, err := consulapi.NewClient(dcfg)
- if err != nil {
- plog.Fatal(err)
- }
-
- css[i] = cli.KV()
- }
- return css
-}
-func getTotalKeysEtcdv2(endpoints []string) map[string]int64 {
- rs := make(map[string]int64)
- for _, ep := range endpoints {
- rs[ep] = 0 // not supported in metrics
- }
- return rs
-}
-
-func getTotalKeysEtcdv3(endpoints []string) map[string]int64 {
- rs := make(map[string]int64)
- for _, ep := range endpoints {
- if !strings.HasPrefix(ep, "http://") {
- ep = "http://" + ep
- }
-
- plog.Println("GET", ep+"/metrics")
- resp, err := http.Get(ep + "/metrics")
- if err != nil {
- plog.Println(err)
- rs[ep] = 0
- }
- scanner := bufio.NewScanner(resp.Body)
- for scanner.Scan() {
- txt := scanner.Text()
- if strings.HasPrefix(txt, "#") {
- continue
- }
- ts := strings.SplitN(txt, " ", 2)
- fv := 0.0
- if len(ts) == 2 {
- v, err := strconv.ParseFloat(ts[1], 64)
- if err == nil {
- fv = v
- }
- }
- if ts[0] == "etcd_debugging_mvcc_keys_total" {
- rs[ep] = int64(fv)
- break
- }
- }
- gracefulClose(resp)
- }
-
- plog.Println("getTotalKeysEtcdv3", rs)
- return rs
-}
-
-func getTotalKeysZk(endpoints []string) map[string]int64 {
- rs := make(map[string]int64)
- stats, ok := zk.FLWSrvr(endpoints, 5*time.Second)
- if !ok {
- plog.Printf("getTotalKeysZk failed with %+v", stats)
- for _, ep := range endpoints {
- rs[ep] = 0
- }
- return rs
- }
- for i, s := range stats {
- rs[endpoints[i]] = s.NodeCount
- }
- return rs
-}
-
-func getTotalKeysConsul(endpoints []string) map[string]int64 {
- rs := make(map[string]int64)
- for _, ep := range endpoints {
- rs[ep] = 0 // not supported in consul
- }
- return rs
-}
diff --git a/control/step3_data_size_summary.go b/control/step3_data_size_summary.go
deleted file mode 100644
index ac1712bd..00000000
--- a/control/step3_data_size_summary.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "github.com/coreos/dbtester/agent/agentpb"
- humanize "github.com/dustin/go-humanize"
- "github.com/gyuho/dataframe"
-)
-
-var DataSummaryColumns = []string{
- "INDEX",
- "DATABASE-ENDPOINT",
- "TOTAL-DATA-SIZE",
- "TOTAL-DATA-SIZE-BYTES-NUM",
-}
-
-func saveDatasizeSummary(cfg Config, idxToResponse map[int]agentpb.Response) {
- c1 := dataframe.NewColumn(DataSummaryColumns[0])
- c2 := dataframe.NewColumn(DataSummaryColumns[1])
- c3 := dataframe.NewColumn(DataSummaryColumns[2])
- c4 := dataframe.NewColumn(DataSummaryColumns[3])
- for i := range cfg.DatabaseEndpoints {
- c1.PushBack(dataframe.NewStringValue(i))
- c2.PushBack(dataframe.NewStringValue(cfg.DatabaseEndpoints[i]))
- c3.PushBack(dataframe.NewStringValue(humanize.Bytes(uint64(idxToResponse[i].Datasize))))
- c4.PushBack(dataframe.NewStringValue(idxToResponse[i].Datasize))
- }
- fr := dataframe.New()
- if err := fr.AddColumn(c1); err != nil {
- plog.Fatal(err)
- }
- if err := fr.AddColumn(c2); err != nil {
- plog.Fatal(err)
- }
- if err := fr.AddColumn(c3); err != nil {
- plog.Fatal(err)
- }
- if err := fr.AddColumn(c4); err != nil {
- plog.Fatal(err)
- }
- if err := fr.CSV(cfg.DatasizeSummary); err != nil {
- plog.Fatal(err)
- }
-}
diff --git a/control/step3_stop_database.go b/control/step3_stop_database.go
deleted file mode 100644
index 4c39b347..00000000
--- a/control/step3_stop_database.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "fmt"
- "time"
-
- "github.com/coreos/dbtester/agent/agentpb"
-)
-
-func step3StopDatabase(cfg Config) (map[int]agentpb.Response, error) {
- switch cfg.Step3.Action {
- case "stop":
- plog.Info("step 3: stopping databases...")
- var rm map[int]agentpb.Response
- var err error
- for i := 0; i < 5; i++ {
- if rm, err = bcastReq(cfg, agentpb.Request_Stop); err != nil {
- plog.Warningf("STOP failed at %s", cfg.PeerIPs[i])
- time.Sleep(300 * time.Millisecond)
- continue
- }
- break
- }
- return rm, err
-
- default:
- return nil, fmt.Errorf("unknown %q", cfg.Step3.Action)
- }
-}
diff --git a/control/step4_upload_logs.go b/control/step4_upload_logs.go
deleted file mode 100644
index a818cafb..00000000
--- a/control/step4_upload_logs.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2017 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 control
-
-import (
- "fmt"
- "path/filepath"
- "strings"
- "time"
-
- "github.com/coreos/dbtester/pkg/remotestorage"
-)
-
-func step4UploadLogs(cfg Config) error {
- plog.Info("step 4: uploading logs...")
-
- if err := uploadToGoogle(cfg.Log, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.DatasizeSummary, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.DataLatencyDistributionSummary, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.DataLatencyDistributionPercentile, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.DataLatencyDistributionAll, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.DataLatencyThroughputTimeseries, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.DataLatencyByKeyNumber, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.ClientSystemMetrics, cfg); err != nil {
- return err
- }
- if err := uploadToGoogle(cfg.ClientSystemMetricsInterpolated, cfg); err != nil {
- return err
- }
- return nil
-}
-
-func uploadToGoogle(path string, cfg Config) error {
- if !exist(path) {
- return fmt.Errorf("%q does not exist", path)
- }
- u, err := remotestorage.NewGoogleCloudStorage([]byte(cfg.Step4.GoogleCloudStorageKey), cfg.Step4.GoogleCloudProjectName)
- if err != nil {
- return err
- }
-
- srcPath := path
- dstPath := filepath.Base(path)
- if !strings.HasPrefix(dstPath, cfg.TestName) {
- dstPath = fmt.Sprintf("%s-%s", cfg.TestName, dstPath)
- }
- dstPath = filepath.Join(cfg.Step4.GoogleCloudStorageSubDirectory, dstPath)
-
- var uerr error
- for k := 0; k < 30; k++ {
- if uerr = u.UploadFile(cfg.Step4.GoogleCloudStorageBucketName, srcPath, dstPath); uerr != nil {
- plog.Printf("#%d: error %v while uploading %q", k, uerr, path)
- time.Sleep(2 * time.Second)
- continue
- }
- break
- }
- return uerr
-}
diff --git a/dbtesterpb/message.pb.go b/dbtesterpb/message.pb.go
new file mode 100644
index 00000000..eb723e3f
--- /dev/null
+++ b/dbtesterpb/message.pb.go
@@ -0,0 +1,1631 @@
+// Code generated by protoc-gen-gogo.
+// source: dbtesterpb/message.proto
+// DO NOT EDIT!
+
+/*
+ Package dbtesterpb is a generated protocol buffer package.
+
+ It is generated from these files:
+ dbtesterpb/message.proto
+
+ It has these top-level messages:
+ Request
+ Response
+*/
+package dbtesterpb
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "github.com/gogo/protobuf/gogoproto"
+
+import (
+ context "golang.org/x/net/context"
+ grpc "google.golang.org/grpc"
+)
+
+import io "io"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type Request_Operation int32
+
+const (
+ Request_Start Request_Operation = 0
+ Request_Stop Request_Operation = 1
+ Request_Heartbeat Request_Operation = 2
+)
+
+var Request_Operation_name = map[int32]string{
+ 0: "Start",
+ 1: "Stop",
+ 2: "Heartbeat",
+}
+var Request_Operation_value = map[string]int32{
+ "Start": 0,
+ "Stop": 1,
+ "Heartbeat": 2,
+}
+
+func (x Request_Operation) String() string {
+ return proto.EnumName(Request_Operation_name, int32(x))
+}
+func (Request_Operation) EnumDescriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 0} }
+
+type Request_Database int32
+
+const (
+ Request_etcdv2 Request_Database = 0
+ Request_etcdv3 Request_Database = 1
+ Request_zookeeper Request_Database = 2
+ Request_consul Request_Database = 3
+ Request_zetcd Request_Database = 4
+ Request_cetcd Request_Database = 5
+)
+
+var Request_Database_name = map[int32]string{
+ 0: "etcdv2",
+ 1: "etcdv3",
+ 2: "zookeeper",
+ 3: "consul",
+ 4: "zetcd",
+ 5: "cetcd",
+}
+var Request_Database_value = map[string]int32{
+ "etcdv2": 0,
+ "etcdv3": 1,
+ "zookeeper": 2,
+ "consul": 3,
+ "zetcd": 4,
+ "cetcd": 5,
+}
+
+func (x Request_Database) String() string {
+ return proto.EnumName(Request_Database_name, int32(x))
+}
+func (Request_Database) EnumDescriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 1} }
+
+type Request struct {
+ Operation Request_Operation `protobuf:"varint,1,opt,name=operation,proto3,enum=dbtesterpb.Request_Operation" json:"operation,omitempty"`
+ TriggerLogUpload bool `protobuf:"varint,2,opt,name=triggerLogUpload,proto3" json:"triggerLogUpload,omitempty"`
+ DatabaseID Request_Database `protobuf:"varint,3,opt,name=databaseID,proto3,enum=dbtesterpb.Request_Database" json:"databaseID,omitempty"`
+ DatabaseTag string `protobuf:"bytes,4,opt,name=databaseTag,proto3" json:"databaseTag,omitempty"`
+ PeerIPsString string `protobuf:"bytes,5,opt,name=peerIPsString,proto3" json:"peerIPsString,omitempty"`
+ IpIndex uint32 `protobuf:"varint,6,opt,name=ipIndex,proto3" json:"ipIndex,omitempty"`
+ CurrentClientNumber int64 `protobuf:"varint,7,opt,name=currentClientNumber,proto3" json:"currentClientNumber,omitempty"`
+ Control *Request_Control `protobuf:"bytes,8,opt,name=control" json:"control,omitempty"`
+ Etcdv3Config *Request_Etcdv3 `protobuf:"bytes,9,opt,name=etcdv3Config" json:"etcdv3Config,omitempty"`
+ ZookeeperConfig *Request_Zookeeper `protobuf:"bytes,10,opt,name=zookeeperConfig" json:"zookeeperConfig,omitempty"`
+}
+
+func (m *Request) Reset() { *m = Request{} }
+func (m *Request) String() string { return proto.CompactTextString(m) }
+func (*Request) ProtoMessage() {}
+func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0} }
+
+type Request_Control struct {
+ GoogleCloudProjectName string `protobuf:"bytes,1,opt,name=googleCloudProjectName,proto3" json:"googleCloudProjectName,omitempty"`
+ GoogleCloudStorageKey string `protobuf:"bytes,2,opt,name=googleCloudStorageKey,proto3" json:"googleCloudStorageKey,omitempty"`
+ GoogleCloudStorageBucketName string `protobuf:"bytes,3,opt,name=googleCloudStorageBucketName,proto3" json:"googleCloudStorageBucketName,omitempty"`
+ GoogleCloudStorageSubDirectory string `protobuf:"bytes,4,opt,name=googleCloudStorageSubDirectory,proto3" json:"googleCloudStorageSubDirectory,omitempty"`
+}
+
+func (m *Request_Control) Reset() { *m = Request_Control{} }
+func (m *Request_Control) String() string { return proto.CompactTextString(m) }
+func (*Request_Control) ProtoMessage() {}
+func (*Request_Control) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 0} }
+
+type Request_Etcdv3 struct {
+ SnapCount int64 `protobuf:"varint,1,opt,name=snapCount,proto3" json:"snapCount,omitempty"`
+ QuotaSizeBytes int64 `protobuf:"varint,2,opt,name=quotaSizeBytes,proto3" json:"quotaSizeBytes,omitempty"`
+}
+
+func (m *Request_Etcdv3) Reset() { *m = Request_Etcdv3{} }
+func (m *Request_Etcdv3) String() string { return proto.CompactTextString(m) }
+func (*Request_Etcdv3) ProtoMessage() {}
+func (*Request_Etcdv3) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 1} }
+
+type Request_Zookeeper struct {
+ MyID uint32 `protobuf:"varint,1,opt,name=myID,proto3" json:"myID,omitempty"`
+ TickTime int64 `protobuf:"varint,2,opt,name=tickTime,proto3" json:"tickTime,omitempty"`
+ ClientPort int64 `protobuf:"varint,3,opt,name=clientPort,proto3" json:"clientPort,omitempty"`
+ InitLimit int64 `protobuf:"varint,4,opt,name=initLimit,proto3" json:"initLimit,omitempty"`
+ SyncLimit int64 `protobuf:"varint,5,opt,name=syncLimit,proto3" json:"syncLimit,omitempty"`
+ SnapCount int64 `protobuf:"varint,6,opt,name=snapCount,proto3" json:"snapCount,omitempty"`
+ MaxClientConnections int64 `protobuf:"varint,7,opt,name=maxClientConnections,proto3" json:"maxClientConnections,omitempty"`
+}
+
+func (m *Request_Zookeeper) Reset() { *m = Request_Zookeeper{} }
+func (m *Request_Zookeeper) String() string { return proto.CompactTextString(m) }
+func (*Request_Zookeeper) ProtoMessage() {}
+func (*Request_Zookeeper) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{0, 2} }
+
+type Response struct {
+ Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
+ // DatasizeOnDisk is the data size of the database on disk.
+ // It measures after database is requested to stop.
+ DatasizeOnDisk int64 `protobuf:"varint,2,opt,name=datasizeOnDisk,proto3" json:"datasizeOnDisk,omitempty"`
+}
+
+func (m *Response) Reset() { *m = Response{} }
+func (m *Response) String() string { return proto.CompactTextString(m) }
+func (*Response) ProtoMessage() {}
+func (*Response) Descriptor() ([]byte, []int) { return fileDescriptorMessage, []int{1} }
+
+func init() {
+ proto.RegisterType((*Request)(nil), "dbtesterpb.Request")
+ proto.RegisterType((*Request_Control)(nil), "dbtesterpb.Request.Control")
+ proto.RegisterType((*Request_Etcdv3)(nil), "dbtesterpb.Request.Etcdv3")
+ proto.RegisterType((*Request_Zookeeper)(nil), "dbtesterpb.Request.Zookeeper")
+ proto.RegisterType((*Response)(nil), "dbtesterpb.Response")
+ proto.RegisterEnum("dbtesterpb.Request_Operation", Request_Operation_name, Request_Operation_value)
+ proto.RegisterEnum("dbtesterpb.Request_Database", Request_Database_name, Request_Database_value)
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// Client API for Transporter service
+
+type TransporterClient interface {
+ Transfer(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error)
+}
+
+type transporterClient struct {
+ cc *grpc.ClientConn
+}
+
+func NewTransporterClient(cc *grpc.ClientConn) TransporterClient {
+ return &transporterClient{cc}
+}
+
+func (c *transporterClient) Transfer(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) {
+ out := new(Response)
+ err := grpc.Invoke(ctx, "/dbtesterpb.Transporter/Transfer", in, out, c.cc, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// Server API for Transporter service
+
+type TransporterServer interface {
+ Transfer(context.Context, *Request) (*Response, error)
+}
+
+func RegisterTransporterServer(s *grpc.Server, srv TransporterServer) {
+ s.RegisterService(&_Transporter_serviceDesc, srv)
+}
+
+func _Transporter_Transfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(Request)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(TransporterServer).Transfer(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/dbtesterpb.Transporter/Transfer",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(TransporterServer).Transfer(ctx, req.(*Request))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _Transporter_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "dbtesterpb.Transporter",
+ HandlerType: (*TransporterServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Transfer",
+ Handler: _Transporter_Transfer_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "dbtesterpb/message.proto",
+}
+
+func (m *Request) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Request) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.Operation != 0 {
+ dAtA[i] = 0x8
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.Operation))
+ }
+ if m.TriggerLogUpload {
+ dAtA[i] = 0x10
+ i++
+ if m.TriggerLogUpload {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i++
+ }
+ if m.DatabaseID != 0 {
+ dAtA[i] = 0x18
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.DatabaseID))
+ }
+ if len(m.DatabaseTag) > 0 {
+ dAtA[i] = 0x22
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(len(m.DatabaseTag)))
+ i += copy(dAtA[i:], m.DatabaseTag)
+ }
+ if len(m.PeerIPsString) > 0 {
+ dAtA[i] = 0x2a
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(len(m.PeerIPsString)))
+ i += copy(dAtA[i:], m.PeerIPsString)
+ }
+ if m.IpIndex != 0 {
+ dAtA[i] = 0x30
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.IpIndex))
+ }
+ if m.CurrentClientNumber != 0 {
+ dAtA[i] = 0x38
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.CurrentClientNumber))
+ }
+ if m.Control != nil {
+ dAtA[i] = 0x42
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.Control.Size()))
+ n1, err := m.Control.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n1
+ }
+ if m.Etcdv3Config != nil {
+ dAtA[i] = 0x4a
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.Etcdv3Config.Size()))
+ n2, err := m.Etcdv3Config.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n2
+ }
+ if m.ZookeeperConfig != nil {
+ dAtA[i] = 0x52
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.ZookeeperConfig.Size()))
+ n3, err := m.ZookeeperConfig.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n3
+ }
+ return i, nil
+}
+
+func (m *Request_Control) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Request_Control) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if len(m.GoogleCloudProjectName) > 0 {
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudProjectName)))
+ i += copy(dAtA[i:], m.GoogleCloudProjectName)
+ }
+ if len(m.GoogleCloudStorageKey) > 0 {
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudStorageKey)))
+ i += copy(dAtA[i:], m.GoogleCloudStorageKey)
+ }
+ if len(m.GoogleCloudStorageBucketName) > 0 {
+ dAtA[i] = 0x1a
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudStorageBucketName)))
+ i += copy(dAtA[i:], m.GoogleCloudStorageBucketName)
+ }
+ if len(m.GoogleCloudStorageSubDirectory) > 0 {
+ dAtA[i] = 0x22
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(len(m.GoogleCloudStorageSubDirectory)))
+ i += copy(dAtA[i:], m.GoogleCloudStorageSubDirectory)
+ }
+ return i, nil
+}
+
+func (m *Request_Etcdv3) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Request_Etcdv3) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.SnapCount != 0 {
+ dAtA[i] = 0x8
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.SnapCount))
+ }
+ if m.QuotaSizeBytes != 0 {
+ dAtA[i] = 0x10
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.QuotaSizeBytes))
+ }
+ return i, nil
+}
+
+func (m *Request_Zookeeper) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Request_Zookeeper) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.MyID != 0 {
+ dAtA[i] = 0x8
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.MyID))
+ }
+ if m.TickTime != 0 {
+ dAtA[i] = 0x10
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.TickTime))
+ }
+ if m.ClientPort != 0 {
+ dAtA[i] = 0x18
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.ClientPort))
+ }
+ if m.InitLimit != 0 {
+ dAtA[i] = 0x20
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.InitLimit))
+ }
+ if m.SyncLimit != 0 {
+ dAtA[i] = 0x28
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.SyncLimit))
+ }
+ if m.SnapCount != 0 {
+ dAtA[i] = 0x30
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.SnapCount))
+ }
+ if m.MaxClientConnections != 0 {
+ dAtA[i] = 0x38
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.MaxClientConnections))
+ }
+ return i, nil
+}
+
+func (m *Response) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Response) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ if m.Success {
+ dAtA[i] = 0x8
+ i++
+ if m.Success {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i++
+ }
+ if m.DatasizeOnDisk != 0 {
+ dAtA[i] = 0x10
+ i++
+ i = encodeVarintMessage(dAtA, i, uint64(m.DatasizeOnDisk))
+ }
+ return i, nil
+}
+
+func encodeFixed64Message(dAtA []byte, offset int, v uint64) int {
+ dAtA[offset] = uint8(v)
+ dAtA[offset+1] = uint8(v >> 8)
+ dAtA[offset+2] = uint8(v >> 16)
+ dAtA[offset+3] = uint8(v >> 24)
+ dAtA[offset+4] = uint8(v >> 32)
+ dAtA[offset+5] = uint8(v >> 40)
+ dAtA[offset+6] = uint8(v >> 48)
+ dAtA[offset+7] = uint8(v >> 56)
+ return offset + 8
+}
+func encodeFixed32Message(dAtA []byte, offset int, v uint32) int {
+ dAtA[offset] = uint8(v)
+ dAtA[offset+1] = uint8(v >> 8)
+ dAtA[offset+2] = uint8(v >> 16)
+ dAtA[offset+3] = uint8(v >> 24)
+ return offset + 4
+}
+func encodeVarintMessage(dAtA []byte, offset int, v uint64) int {
+ for v >= 1<<7 {
+ dAtA[offset] = uint8(v&0x7f | 0x80)
+ v >>= 7
+ offset++
+ }
+ dAtA[offset] = uint8(v)
+ return offset + 1
+}
+func (m *Request) Size() (n int) {
+ var l int
+ _ = l
+ if m.Operation != 0 {
+ n += 1 + sovMessage(uint64(m.Operation))
+ }
+ if m.TriggerLogUpload {
+ n += 2
+ }
+ if m.DatabaseID != 0 {
+ n += 1 + sovMessage(uint64(m.DatabaseID))
+ }
+ l = len(m.DatabaseTag)
+ if l > 0 {
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ l = len(m.PeerIPsString)
+ if l > 0 {
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ if m.IpIndex != 0 {
+ n += 1 + sovMessage(uint64(m.IpIndex))
+ }
+ if m.CurrentClientNumber != 0 {
+ n += 1 + sovMessage(uint64(m.CurrentClientNumber))
+ }
+ if m.Control != nil {
+ l = m.Control.Size()
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ if m.Etcdv3Config != nil {
+ l = m.Etcdv3Config.Size()
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ if m.ZookeeperConfig != nil {
+ l = m.ZookeeperConfig.Size()
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ return n
+}
+
+func (m *Request_Control) Size() (n int) {
+ var l int
+ _ = l
+ l = len(m.GoogleCloudProjectName)
+ if l > 0 {
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ l = len(m.GoogleCloudStorageKey)
+ if l > 0 {
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ l = len(m.GoogleCloudStorageBucketName)
+ if l > 0 {
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ l = len(m.GoogleCloudStorageSubDirectory)
+ if l > 0 {
+ n += 1 + l + sovMessage(uint64(l))
+ }
+ return n
+}
+
+func (m *Request_Etcdv3) Size() (n int) {
+ var l int
+ _ = l
+ if m.SnapCount != 0 {
+ n += 1 + sovMessage(uint64(m.SnapCount))
+ }
+ if m.QuotaSizeBytes != 0 {
+ n += 1 + sovMessage(uint64(m.QuotaSizeBytes))
+ }
+ return n
+}
+
+func (m *Request_Zookeeper) Size() (n int) {
+ var l int
+ _ = l
+ if m.MyID != 0 {
+ n += 1 + sovMessage(uint64(m.MyID))
+ }
+ if m.TickTime != 0 {
+ n += 1 + sovMessage(uint64(m.TickTime))
+ }
+ if m.ClientPort != 0 {
+ n += 1 + sovMessage(uint64(m.ClientPort))
+ }
+ if m.InitLimit != 0 {
+ n += 1 + sovMessage(uint64(m.InitLimit))
+ }
+ if m.SyncLimit != 0 {
+ n += 1 + sovMessage(uint64(m.SyncLimit))
+ }
+ if m.SnapCount != 0 {
+ n += 1 + sovMessage(uint64(m.SnapCount))
+ }
+ if m.MaxClientConnections != 0 {
+ n += 1 + sovMessage(uint64(m.MaxClientConnections))
+ }
+ return n
+}
+
+func (m *Response) Size() (n int) {
+ var l int
+ _ = l
+ if m.Success {
+ n += 2
+ }
+ if m.DatasizeOnDisk != 0 {
+ n += 1 + sovMessage(uint64(m.DatasizeOnDisk))
+ }
+ return n
+}
+
+func sovMessage(x uint64) (n int) {
+ for {
+ n++
+ x >>= 7
+ if x == 0 {
+ break
+ }
+ }
+ return n
+}
+func sozMessage(x uint64) (n int) {
+ return sovMessage(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+func (m *Request) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Operation", wireType)
+ }
+ m.Operation = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Operation |= (Request_Operation(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TriggerLogUpload", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.TriggerLogUpload = bool(v != 0)
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DatabaseID", wireType)
+ }
+ m.DatabaseID = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.DatabaseID |= (Request_Database(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DatabaseTag", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ 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 ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DatabaseTag = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PeerIPsString", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ 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 ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PeerIPsString = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IpIndex", wireType)
+ }
+ m.IpIndex = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.IpIndex |= (uint32(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 7:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CurrentClientNumber", wireType)
+ }
+ m.CurrentClientNumber = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.CurrentClientNumber |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Control", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Control == nil {
+ m.Control = &Request_Control{}
+ }
+ if err := m.Control.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 9:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Etcdv3Config", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Etcdv3Config == nil {
+ m.Etcdv3Config = &Request_Etcdv3{}
+ }
+ if err := m.Etcdv3Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 10:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ZookeeperConfig", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.ZookeeperConfig == nil {
+ m.ZookeeperConfig = &Request_Zookeeper{}
+ }
+ if err := m.ZookeeperConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessage(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessage
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Request_Control) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Control: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Control: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudProjectName", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ 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 ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.GoogleCloudProjectName = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudStorageKey", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ 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 ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.GoogleCloudStorageKey = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudStorageBucketName", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ 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 ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.GoogleCloudStorageBucketName = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GoogleCloudStorageSubDirectory", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ 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 ErrInvalidLengthMessage
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.GoogleCloudStorageSubDirectory = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessage(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessage
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Request_Etcdv3) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Etcdv3: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Etcdv3: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SnapCount", wireType)
+ }
+ m.SnapCount = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.SnapCount |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field QuotaSizeBytes", wireType)
+ }
+ m.QuotaSizeBytes = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.QuotaSizeBytes |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessage(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessage
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Request_Zookeeper) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Zookeeper: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Zookeeper: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MyID", wireType)
+ }
+ m.MyID = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.MyID |= (uint32(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TickTime", wireType)
+ }
+ m.TickTime = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.TickTime |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClientPort", wireType)
+ }
+ m.ClientPort = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.ClientPort |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InitLimit", wireType)
+ }
+ m.InitLimit = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.InitLimit |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 5:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SyncLimit", wireType)
+ }
+ m.SyncLimit = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.SyncLimit |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SnapCount", wireType)
+ }
+ m.SnapCount = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.SnapCount |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 7:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MaxClientConnections", wireType)
+ }
+ m.MaxClientConnections = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.MaxClientConnections |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessage(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessage
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Response) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Success = bool(v != 0)
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DatasizeOnDisk", wireType)
+ }
+ m.DatasizeOnDisk = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.DatasizeOnDisk |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessage(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessage
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func skipMessage(dAtA []byte) (n int, err error) {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ wireType := int(wire & 0x7)
+ switch wireType {
+ case 0:
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ iNdEx++
+ if dAtA[iNdEx-1] < 0x80 {
+ break
+ }
+ }
+ return iNdEx, nil
+ case 1:
+ iNdEx += 8
+ return iNdEx, nil
+ case 2:
+ var length int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ length |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ iNdEx += length
+ if length < 0 {
+ return 0, ErrInvalidLengthMessage
+ }
+ return iNdEx, nil
+ case 3:
+ for {
+ var innerWire uint64
+ var start int = iNdEx
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessage
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ innerWire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ innerWireType := int(innerWire & 0x7)
+ if innerWireType == 4 {
+ break
+ }
+ next, err := skipMessage(dAtA[start:])
+ if err != nil {
+ return 0, err
+ }
+ iNdEx = start + next
+ }
+ return iNdEx, nil
+ case 4:
+ return iNdEx, nil
+ case 5:
+ iNdEx += 4
+ return iNdEx, nil
+ default:
+ return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
+ }
+ }
+ panic("unreachable")
+}
+
+var (
+ ErrInvalidLengthMessage = fmt.Errorf("proto: negative length found during unmarshaling")
+ ErrIntOverflowMessage = fmt.Errorf("proto: integer overflow")
+)
+
+func init() { proto.RegisterFile("dbtesterpb/message.proto", fileDescriptorMessage) }
+
+var fileDescriptorMessage = []byte{
+ // 742 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x4f, 0x6f, 0xeb, 0x44,
+ 0x10, 0x8f, 0xeb, 0x36, 0xb1, 0xa7, 0xf4, 0x61, 0xed, 0x2b, 0xc8, 0x0a, 0x25, 0x8a, 0x22, 0x84,
+ 0x22, 0x24, 0x52, 0x94, 0xf2, 0xe7, 0x00, 0xe2, 0xd0, 0x84, 0x07, 0x15, 0x55, 0x5f, 0xb5, 0x29,
+ 0x17, 0x6e, 0x6b, 0x67, 0x6a, 0x96, 0xc6, 0xbb, 0x7e, 0xbb, 0x6b, 0xf4, 0x92, 0x2b, 0x5f, 0x82,
+ 0x8f, 0xd4, 0x03, 0x07, 0x3e, 0x02, 0x94, 0x13, 0xdf, 0x02, 0x79, 0x6d, 0xe7, 0x4f, 0x6b, 0x78,
+ 0xb7, 0x99, 0xdf, 0xef, 0x37, 0xb3, 0x3b, 0xb3, 0x33, 0x0b, 0xe1, 0x3c, 0x32, 0xa8, 0x0d, 0xaa,
+ 0x2c, 0x3a, 0x4d, 0x51, 0x6b, 0x96, 0xe0, 0x28, 0x53, 0xd2, 0x48, 0x02, 0x1b, 0xa6, 0xfb, 0x71,
+ 0xc2, 0xcd, 0x4f, 0x79, 0x34, 0x8a, 0x65, 0x7a, 0x9a, 0xc8, 0x44, 0x9e, 0x5a, 0x49, 0x94, 0xdf,
+ 0x5a, 0xcf, 0x3a, 0xd6, 0x2a, 0x43, 0x07, 0xbf, 0xfb, 0xd0, 0xa1, 0xf8, 0x2a, 0x47, 0x6d, 0xc8,
+ 0x97, 0xe0, 0xcb, 0x0c, 0x15, 0x33, 0x5c, 0x8a, 0xd0, 0xe9, 0x3b, 0xc3, 0x67, 0xe3, 0xf7, 0x47,
+ 0x9b, 0xd4, 0xa3, 0x4a, 0x37, 0x7a, 0x59, 0x8b, 0xe8, 0x46, 0x4f, 0x3e, 0x82, 0xc0, 0x28, 0x9e,
+ 0x24, 0xa8, 0x2e, 0x65, 0xf2, 0x43, 0xb6, 0x90, 0x6c, 0x1e, 0xee, 0xf5, 0x9d, 0xa1, 0x47, 0x9f,
+ 0xe0, 0xe4, 0x2b, 0x80, 0x39, 0x33, 0x2c, 0x62, 0x1a, 0x2f, 0xa6, 0xa1, 0x6b, 0x4f, 0x3a, 0x69,
+ 0x3a, 0x69, 0x5a, 0xa9, 0xe8, 0x96, 0x9e, 0xf4, 0xe1, 0xb0, 0xf6, 0x6e, 0x58, 0x12, 0xee, 0xf7,
+ 0x9d, 0xa1, 0x4f, 0xb7, 0x21, 0xf2, 0x01, 0x1c, 0x65, 0x88, 0xea, 0xe2, 0x5a, 0xcf, 0x8c, 0xe2,
+ 0x22, 0x09, 0x0f, 0xac, 0x66, 0x17, 0x24, 0x21, 0x74, 0x78, 0x76, 0x21, 0xe6, 0xf8, 0x3a, 0x6c,
+ 0xf7, 0x9d, 0xe1, 0x11, 0xad, 0x5d, 0xf2, 0x09, 0x3c, 0x8f, 0x73, 0xa5, 0x50, 0x98, 0xc9, 0x82,
+ 0xa3, 0x30, 0x57, 0x79, 0x1a, 0xa1, 0x0a, 0x3b, 0x7d, 0x67, 0xe8, 0xd2, 0x26, 0x8a, 0x7c, 0x06,
+ 0x9d, 0x58, 0x0a, 0xa3, 0xe4, 0x22, 0xf4, 0xfa, 0xce, 0xf0, 0x70, 0xfc, 0x5e, 0x53, 0x39, 0x93,
+ 0x52, 0x42, 0x6b, 0x2d, 0xf9, 0x1a, 0xde, 0x42, 0x13, 0xcf, 0x7f, 0x39, 0x9b, 0x48, 0x71, 0xcb,
+ 0x93, 0xd0, 0xb7, 0xb1, 0xdd, 0xa6, 0xd8, 0x6f, 0xac, 0x8e, 0xee, 0xe8, 0xc9, 0xb7, 0xf0, 0xf6,
+ 0x4a, 0xca, 0x3b, 0xc4, 0x0c, 0x55, 0x95, 0x02, 0x6c, 0x8a, 0xc6, 0x77, 0xfb, 0xb1, 0x96, 0xd2,
+ 0xc7, 0x51, 0xdd, 0x5f, 0xf7, 0xa0, 0x53, 0xdd, 0x8e, 0x7c, 0x0e, 0xef, 0x26, 0x52, 0x26, 0x0b,
+ 0x9c, 0x2c, 0x64, 0x3e, 0xbf, 0x56, 0xf2, 0x67, 0x8c, 0xcd, 0x15, 0x4b, 0xd1, 0xce, 0x84, 0x4f,
+ 0xff, 0x83, 0x25, 0x9f, 0xc2, 0x3b, 0x5b, 0xcc, 0xcc, 0x48, 0xc5, 0x12, 0xfc, 0x1e, 0x97, 0x76,
+ 0x0c, 0x7c, 0xda, 0x4c, 0x92, 0x73, 0x38, 0x79, 0x4a, 0x9c, 0xe7, 0xf1, 0x1d, 0x96, 0x67, 0xba,
+ 0x36, 0xf8, 0x7f, 0x35, 0xe4, 0x05, 0xf4, 0x9e, 0xf2, 0xb3, 0x3c, 0x9a, 0x72, 0x85, 0xb1, 0x91,
+ 0x6a, 0x59, 0x0d, 0xc9, 0x1b, 0x54, 0xdd, 0x2b, 0x68, 0x97, 0x6d, 0x26, 0x27, 0xe0, 0x6b, 0xc1,
+ 0xb2, 0x89, 0xcc, 0x85, 0xb1, 0x65, 0xbb, 0x74, 0x03, 0x90, 0x0f, 0xe1, 0xd9, 0xab, 0x5c, 0x1a,
+ 0x36, 0xe3, 0x2b, 0x3c, 0x5f, 0x1a, 0xd4, 0xb6, 0x44, 0x97, 0x3e, 0x42, 0xbb, 0xff, 0x38, 0xe0,
+ 0xaf, 0x9b, 0x4e, 0x08, 0xec, 0xa7, 0xcb, 0x8b, 0xa9, 0x4d, 0x77, 0x44, 0xad, 0x4d, 0xba, 0xe0,
+ 0x19, 0x1e, 0xdf, 0xdd, 0xf0, 0x14, 0xab, 0x1c, 0x6b, 0x9f, 0xf4, 0x00, 0x62, 0x3b, 0x63, 0xd7,
+ 0x52, 0x19, 0xdb, 0x07, 0x97, 0x6e, 0x21, 0xc5, 0x1d, 0xb9, 0xe0, 0xe6, 0x92, 0xa7, 0xdc, 0xd8,
+ 0x02, 0x5d, 0xba, 0x01, 0x6c, 0x05, 0x4b, 0x11, 0x97, 0xec, 0x41, 0x55, 0x41, 0x0d, 0xec, 0xd6,
+ 0xd7, 0x7e, 0x5c, 0xdf, 0x18, 0x8e, 0x53, 0xf6, 0xba, 0x1c, 0xf0, 0x89, 0x14, 0x02, 0xe3, 0x62,
+ 0xc5, 0x75, 0xb5, 0x00, 0x8d, 0xdc, 0xe0, 0x14, 0xfc, 0xf5, 0xbf, 0x40, 0x7c, 0x38, 0x98, 0x19,
+ 0xa6, 0x4c, 0xd0, 0x22, 0x1e, 0xec, 0xcf, 0x8c, 0xcc, 0x02, 0x87, 0x1c, 0x81, 0xff, 0x1d, 0x32,
+ 0x65, 0x22, 0x64, 0x26, 0xd8, 0x1b, 0xcc, 0xc0, 0xab, 0xd7, 0x9b, 0x00, 0xb4, 0xed, 0x5c, 0x8f,
+ 0x83, 0xd6, 0xda, 0x3e, 0x2b, 0x43, 0xd6, 0x93, 0x1a, 0xec, 0x15, 0x54, 0x2c, 0x85, 0xce, 0x17,
+ 0x81, 0x5b, 0x1c, 0xb1, 0x2a, 0x74, 0xc1, 0x7e, 0x61, 0xc6, 0xd6, 0x3c, 0x18, 0x5c, 0x82, 0x47,
+ 0x51, 0x67, 0x52, 0x68, 0x2c, 0xf6, 0x5b, 0xe7, 0x71, 0x8c, 0x5a, 0xdb, 0x96, 0x7b, 0xb4, 0x76,
+ 0x8b, 0xf7, 0x2b, 0xbe, 0x0b, 0xcd, 0x57, 0xf8, 0x52, 0x4c, 0xb9, 0xbe, 0xab, 0xdf, 0x6f, 0x17,
+ 0x1d, 0xbf, 0x80, 0xc3, 0x1b, 0xc5, 0x84, 0xce, 0xa4, 0x32, 0xa8, 0xc8, 0x17, 0xe0, 0x59, 0xf7,
+ 0x16, 0x15, 0x79, 0xde, 0xb0, 0x60, 0xdd, 0xe3, 0x5d, 0xb0, 0xbc, 0xc7, 0xa0, 0x75, 0x7e, 0x7c,
+ 0xff, 0x57, 0xaf, 0x75, 0xff, 0xd0, 0x73, 0xfe, 0x78, 0xe8, 0x39, 0x7f, 0x3e, 0xf4, 0x9c, 0xdf,
+ 0xfe, 0xee, 0xb5, 0xa2, 0xb6, 0xfd, 0x81, 0xcf, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x93, 0xb5,
+ 0x0d, 0x1a, 0xd8, 0x05, 0x00, 0x00,
+}
diff --git a/dbtesterpb/message.proto b/dbtesterpb/message.proto
new file mode 100644
index 00000000..6ce003b5
--- /dev/null
+++ b/dbtesterpb/message.proto
@@ -0,0 +1,70 @@
+syntax = "proto3";
+package dbtesterpb;
+
+import "github.com/gogo/protobuf/gogoproto/gogo.proto";
+
+option (gogoproto.marshaler_all) = true;
+option (gogoproto.sizer_all) = true;
+option (gogoproto.unmarshaler_all) = true;
+option (gogoproto.goproto_getters_all) = false;
+
+service Transporter {
+ rpc Transfer(Request) returns (Response) {}
+}
+
+message Request {
+ enum Operation {
+ Start = 0;
+ Stop = 1;
+ Heartbeat = 2;
+ }
+ enum Database {
+ etcdv2 = 0;
+ etcdv3 = 1;
+ zookeeper = 2;
+ consul = 3;
+ zetcd = 4;
+ cetcd = 5;
+ }
+ message Control {
+ string googleCloudProjectName = 1;
+ string googleCloudStorageKey = 2;
+ string googleCloudStorageBucketName = 3;
+ string googleCloudStorageSubDirectory = 4;
+ }
+ message Etcdv3 {
+ int64 snapCount = 1;
+ int64 quotaSizeBytes = 2;
+ }
+ message Zookeeper {
+ uint32 myID = 1;
+ int64 tickTime = 2;
+ int64 clientPort = 3;
+ int64 initLimit = 4;
+ int64 syncLimit = 5;
+ int64 snapCount = 6;
+ int64 maxClientConnections = 7;
+ }
+
+ Operation operation = 1;
+ bool triggerLogUpload = 2;
+ Database databaseID = 3;
+ string databaseTag = 4;
+
+ string peerIPsString = 5;
+ uint32 ipIndex = 6;
+
+ int64 currentClientNumber = 7;
+
+ Control control = 8;
+ Etcdv3 etcdv3Config = 9;
+ Zookeeper zookeeperConfig = 10;
+}
+
+message Response {
+ bool success = 1;
+
+ // DatasizeOnDisk is the data size of the database on disk.
+ // It measures after database is requested to stop.
+ int64 datasizeOnDisk = 2;
+}
diff --git a/logger.go b/logger.go
new file mode 100644
index 00000000..5ca32830
--- /dev/null
+++ b/logger.go
@@ -0,0 +1,19 @@
+// Copyright 2017 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 dbtester
+
+import "github.com/coreos/pkg/capnslog"
+
+var plog = capnslog.NewPackageLogger("github.com/coreos/dbtester", "dbtester")
diff --git a/readme.go b/readme.go
new file mode 100644
index 00000000..811c1e48
--- /dev/null
+++ b/readme.go
@@ -0,0 +1,37 @@
+package dbtester
+
+import (
+ "bytes"
+ "fmt"
+ "path/filepath"
+)
+
+// WriteREADME writes README.
+func (cfg *Config) WriteREADME(summary string) error {
+ plog.Printf("writing README at %q", cfg.README.OutputPath)
+
+ buf := new(bytes.Buffer)
+ buf.WriteString("\n\n")
+ buf.WriteString(fmt.Sprintf("
\n##### %s", cfg.TestTitle))
+ buf.WriteString("\n\n")
+ buf.WriteString(cfg.TestDescription)
+ buf.WriteString("\n\n```\n")
+ buf.WriteString(summary)
+ buf.WriteString("```\n\n\n")
+
+ for _, img := range cfg.Images {
+ switch img.Type {
+ case "local":
+ imgPath := "./" + filepath.Base(img.Path)
+ buf.WriteString(fmt.Sprintf("\n\n", img.Title, imgPath))
+ case "remote":
+ buf.WriteString(fmt.Sprintf(`
`, img.Path, img.Title))
+ buf.WriteString("\n\n")
+ default:
+ return fmt.Errorf("%s is not supported", img.Type)
+ }
+ buf.WriteString("\n\n")
+ }
+
+ return toFile(buf.String(), cfg.README.OutputPath)
+}
diff --git a/request.go b/request.go
new file mode 100644
index 00000000..42e225c6
--- /dev/null
+++ b/request.go
@@ -0,0 +1,89 @@
+// Copyright 2017 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 dbtester
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ "github.com/coreos/dbtester/dbtesterpb"
+ "google.golang.org/grpc"
+)
+
+// BroadcaseRequest sends request to all endpoints.
+func (cfg *Config) BroadcaseRequest(databaseID string, op dbtesterpb.Request_Operation) (map[int]dbtesterpb.Response, error) {
+ gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
+ if !ok {
+ return nil, fmt.Errorf("database id %q does not exist", databaseID)
+ }
+
+ type result struct {
+ idx int
+ r dbtesterpb.Response
+ }
+ donec, errc := make(chan result), make(chan error)
+ for i := range gcfg.AgentEndpoints {
+ req, err := cfg.ToRequest(databaseID, op, i)
+ if err != nil {
+ return nil, err
+ }
+ ep := gcfg.AgentEndpoints[i]
+
+ go func(i int, ep string, req *dbtesterpb.Request) {
+ plog.Infof("sending message [index: %d | operation: %q | database: %q | endpoint: %q]", i, op, req.DatabaseID, ep)
+
+ conn, err := grpc.Dial(ep, grpc.WithInsecure())
+ if err != nil {
+ plog.Errorf("grpc.Dial connecting error (%v) [index: %d | endpoint: %q]", err, i, ep)
+ errc <- fmt.Errorf("%v (%q)", err, ep)
+ return
+ }
+ defer conn.Close()
+
+ // give enough timeout
+ // e.g. uploading logs takes longer
+ cli := dbtesterpb.NewTransporterClient(conn)
+ ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
+ resp, err := cli.Transfer(ctx, req)
+ cancel()
+ if err != nil {
+ plog.Errorf("cli.Transfer error (%v) [index: %d | endpoint: %q]", err, i, ep)
+ errc <- fmt.Errorf("%v (%q)", err, ep)
+ return
+ }
+
+ plog.Infof("got response [index: %d | endpoint: %q | response: %+v]", i, ep, resp)
+ donec <- result{idx: i, r: *resp}
+ }(i, ep, req)
+
+ time.Sleep(time.Second)
+ }
+
+ im := make(map[int]dbtesterpb.Response)
+ var errs []error
+ for cnt := 0; cnt != len(gcfg.AgentEndpoints); cnt++ {
+ select {
+ case rs := <-donec:
+ im[rs.idx] = rs.r
+ case err := <-errc:
+ errs = append(errs, err)
+ }
+ }
+ if len(errs) > 0 {
+ return nil, errs[0]
+ }
+ return im, nil
+}
diff --git a/control/step2_stress_report.go b/save_upload.go
similarity index 58%
rename from control/step2_stress_report.go
rename to save_upload.go
index faafa525..464e889a 100644
--- a/control/step2_stress_report.go
+++ b/save_upload.go
@@ -12,146 +12,66 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"fmt"
"math"
+ "path/filepath"
"strings"
- "sync"
"time"
- "github.com/cheggaaa/pb"
+ "github.com/coreos/dbtester/dbtesterpb"
+ "github.com/coreos/dbtester/pkg/remotestorage"
"github.com/coreos/dbtester/pkg/report"
+ humanize "github.com/dustin/go-humanize"
"github.com/gyuho/dataframe"
- "golang.org/x/net/context"
)
-type values struct {
- bytes [][]byte
- strings []string
- sampleSize int
+// DatasizeOnDiskSummaryColumns defines summary columns.
+var DatasizeOnDiskSummaryColumns = []string{
+ "INDEX",
+ "DATABASE-ENDPOINT",
+ "TOTAL-DATA-SIZE",
+ "TOTAL-DATA-SIZE-BYTES-NUM",
}
-func newValues(cfg Config) (v values, rerr error) {
- v.bytes = [][]byte{randBytes(cfg.Step2.ValueSize)}
- v.strings = []string{string(v.bytes[0])}
- v.sampleSize = 1
- return
-}
-
-type benchmark struct {
- bar *pb.ProgressBar
- report report.Report
- reportDone <-chan report.Stats
- stats report.Stats
-
- reqHandlers []ReqHandler
- reqGen func(chan<- request)
- reqDone func()
- wg sync.WaitGroup
-
- mu sync.RWMutex
- inflightReqs chan request
-}
-
-// pass totalN in case that 'cfg' is manipulated
-func newBenchmark(totalN int, clientsN int, reqHandlers []ReqHandler, reqDone func(), reqGen func(chan<- request)) (b *benchmark) {
- b = &benchmark{
- bar: pb.New(totalN),
- reqHandlers: reqHandlers,
- reqGen: reqGen,
- reqDone: reqDone,
- wg: sync.WaitGroup{},
+// SaveDatasizeOnDiskSummary saves data size summary.
+func (cfg *Config) SaveDatasizeOnDiskSummary(databaseID string, idxToResponse map[int]dbtesterpb.Response) error {
+ gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
+ if !ok {
+ return fmt.Errorf("%q does not exist", databaseID)
}
- b.inflightReqs = make(chan request, clientsN)
- b.bar.Format("Bom !")
- b.bar.Start()
- b.report = report.NewReportSample("%4.4f")
- return
-}
-
-// only useful when multiple ranges of requests are run with one report
-func (b *benchmark) reset(clientsN int, reqHandlers []ReqHandler, reqDone func(), reqGen func(chan<- request)) {
- if len(reqHandlers) == 0 {
- panic(fmt.Errorf("got 0 reqHandlers"))
+ c1 := dataframe.NewColumn(DatasizeOnDiskSummaryColumns[0])
+ c2 := dataframe.NewColumn(DatasizeOnDiskSummaryColumns[1])
+ c3 := dataframe.NewColumn(DatasizeOnDiskSummaryColumns[2])
+ c4 := dataframe.NewColumn(DatasizeOnDiskSummaryColumns[3])
+ for i := range gcfg.DatabaseEndpoints {
+ c1.PushBack(dataframe.NewStringValue(i))
+ c2.PushBack(dataframe.NewStringValue(gcfg.DatabaseEndpoints[i]))
+ c3.PushBack(dataframe.NewStringValue(humanize.Bytes(uint64(idxToResponse[i].DatasizeOnDisk))))
+ c4.PushBack(dataframe.NewStringValue(idxToResponse[i].DatasizeOnDisk))
}
- b.reqHandlers = reqHandlers
- b.reqDone = reqDone
- b.reqGen = reqGen
- // inflight requests will be dropped!
- b.mu.Lock()
- b.inflightReqs = make(chan request, clientsN)
- b.mu.Unlock()
-}
-
-func (b *benchmark) getInflightsReqs() (ch chan request) {
- b.mu.RLock()
- ch = b.inflightReqs
- b.mu.RUnlock()
- return
-}
-
-func (b *benchmark) startRequests() {
- for i := range b.reqHandlers {
- b.wg.Add(1)
- go func(rh ReqHandler) {
- defer b.wg.Done()
- for req := range b.getInflightsReqs() {
- if rh == nil {
- panic(fmt.Errorf("got nil rh"))
- }
- st := time.Now()
- err := rh(context.Background(), &req)
- b.report.Results() <- report.Result{Err: err, Start: st, End: time.Now()}
- b.bar.Increment()
- }
- }(b.reqHandlers[i])
+ fr := dataframe.New()
+ if err := fr.AddColumn(c1); err != nil {
+ return err
}
- go b.reqGen(b.getInflightsReqs())
- b.reportDone = b.report.Stats()
-}
-
-func (b *benchmark) waitRequestsEnd() {
- b.wg.Wait()
- if b.reqDone != nil {
- b.reqDone() // cancel connections
+ if err := fr.AddColumn(c2); err != nil {
+ return err
}
-}
-
-func (b *benchmark) finishReports() {
- close(b.report.Results())
- b.bar.Finish()
- st := <-b.reportDone
- b.stats = st
-}
-
-func (b *benchmark) waitAll() {
- b.waitRequestsEnd()
- b.finishReports()
-}
-
-func printStats(st report.Stats) {
- // to be piped to cfg.Log via stdout when dbtester executed
- if len(st.Lats) > 0 {
- fmt.Printf("Total: %v\n", st.Total)
- fmt.Printf("Slowest: %f secs\n", st.Slowest)
- fmt.Printf("Fastest: %f secs\n", st.Fastest)
- fmt.Printf("Average: %f secs\n", st.Average)
- fmt.Printf("Requests/sec: %4.4f\n", st.RPS)
+ if err := fr.AddColumn(c3); err != nil {
+ return err
}
- if len(st.ErrorDist) > 0 {
- for k, v := range st.ErrorDist {
- fmt.Printf("ERROR %q : %d\n", k, v)
- }
- } else {
- fmt.Println("ERRRO: 0")
+ if err := fr.AddColumn(c4); err != nil {
+ return err
}
+
+ return fr.CSV(cfg.Control.ServerDatasizeOnDiskSummaryPath)
}
-func saveDataLatencyDistributionSummary(cfg Config, st report.Stats) {
+func (cfg *Config) saveDataLatencyDistributionSummary(st report.Stats) {
fr := dataframe.New()
c1 := dataframe.NewColumn("TOTAL-SECONDS")
@@ -206,12 +126,12 @@ func saveDataLatencyDistributionSummary(cfg Config, st report.Stats) {
}
}
- if err := fr.CSVHorizontal(cfg.DataLatencyDistributionSummary); err != nil {
+ if err := fr.CSVHorizontal(cfg.Control.ClientLatencyDistributionSummaryPath); err != nil {
plog.Fatal(err)
}
}
-func saveDataLatencyDistributionPercentile(cfg Config, st report.Stats) {
+func (cfg *Config) saveDataLatencyDistributionPercentile(st report.Stats) {
pctls, seconds := report.Percentiles(st.Lats)
c1 := dataframe.NewColumn("LATENCY-PERCENTILE")
c2 := dataframe.NewColumn("LATENCY-MS")
@@ -232,12 +152,12 @@ func saveDataLatencyDistributionPercentile(cfg Config, st report.Stats) {
if err := fr.AddColumn(c2); err != nil {
plog.Fatal(err)
}
- if err := fr.CSV(cfg.DataLatencyDistributionPercentile); err != nil {
+ if err := fr.CSV(cfg.Control.ClientLatencyDistributionPercentilePath); err != nil {
plog.Fatal(err)
}
}
-func saveDataLatencyDistributionAll(cfg Config, st report.Stats) {
+func (cfg *Config) saveDataLatencyDistributionAll(st report.Stats) {
min := int64(math.MaxInt64)
max := int64(-100000)
rm := make(map[int64]int64)
@@ -285,12 +205,12 @@ func saveDataLatencyDistributionAll(cfg Config, st report.Stats) {
if err := fr.AddColumn(c2); err != nil {
plog.Fatal(err)
}
- if err := fr.CSV(cfg.DataLatencyDistributionAll); err != nil {
+ if err := fr.CSV(cfg.Control.ClientLatencyDistributionAllPath); err != nil {
plog.Fatal(err)
}
}
-func saveDataLatencyThroughputTimeseries(cfg Config, st report.Stats, tsToClientN map[int64]int) {
+func (cfg *Config) saveDataLatencyThroughputTimeseries(gcfg TestGroup, st report.Stats, tsToClientN map[int64]int64) {
c1 := dataframe.NewColumn("UNIX-SECOND")
c2 := dataframe.NewColumn("CONTROL-CLIENT-NUM")
c3 := dataframe.NewColumn("MIN-LATENCY-MS")
@@ -302,7 +222,7 @@ func saveDataLatencyThroughputTimeseries(cfg Config, st report.Stats, tsToClient
c1.PushBack(dataframe.NewStringValue(fmt.Sprintf("%d", st.TimeSeries[i].Timestamp)))
if len(tsToClientN) == 0 {
- c2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%d", cfg.Step2.Clients)))
+ c2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%d", gcfg.ClientNumber)))
} else {
c2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%d", tsToClientN[st.TimeSeries[i].Timestamp])))
}
@@ -334,12 +254,12 @@ func saveDataLatencyThroughputTimeseries(cfg Config, st report.Stats, tsToClient
plog.Fatal(err)
}
- if err := fr.CSV(cfg.DataLatencyThroughputTimeseries); err != nil {
+ if err := fr.CSV(cfg.Control.ClientLatencyThroughputTimeseriesPath); err != nil {
plog.Fatal(err)
}
// aggregate latency by the number of keys
- tss := processTimeSeries(st.TimeSeries, 1000, cfg.Step2.TotalRequests)
+ tss := processTimeSeries(st.TimeSeries, 1000, gcfg.RequestNumber)
ctt1 := dataframe.NewColumn("KEYS")
ctt2 := dataframe.NewColumn("MIN-LATENCY-MS")
ctt3 := dataframe.NewColumn("AVG-LATENCY-MS")
@@ -365,30 +285,47 @@ func saveDataLatencyThroughputTimeseries(cfg Config, st report.Stats, tsToClient
plog.Fatal(err)
}
- if err := frr.CSV(cfg.DataLatencyByKeyNumber); err != nil {
+ if err := frr.CSV(cfg.Control.ClientLatencyByKeyNumberPath); err != nil {
plog.Fatal(err)
}
}
-func generateReport(cfg Config, h []ReqHandler, reqDone func(), reqGen func(chan<- request)) {
- b := newBenchmark(cfg.Step2.TotalRequests, cfg.Step2.Clients, h, reqDone, reqGen)
- b.startRequests()
- b.waitAll()
-
- printStats(b.stats)
- saveAllStats(cfg, b.stats, nil)
+func (cfg *Config) saveAllStats(gcfg TestGroup, stats report.Stats, tsToClientN map[int64]int64) {
+ cfg.saveDataLatencyDistributionSummary(stats)
+ cfg.saveDataLatencyDistributionPercentile(stats)
+ cfg.saveDataLatencyDistributionAll(stats)
+ cfg.saveDataLatencyThroughputTimeseries(gcfg, stats, tsToClientN)
}
-func saveAllStats(cfg Config, stats report.Stats, tsToClientN map[int64]int) {
- // cfg.DataLatencyDistributionSummary
- saveDataLatencyDistributionSummary(cfg, stats)
+// UploadToGoogle uploads target file to Google Cloud Storage.
+func (cfg *Config) UploadToGoogle(databaseID string, targetPath string) error {
+ gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
+ if !ok {
+ return fmt.Errorf("%q does not exist", databaseID)
+ }
+ if !exist(targetPath) {
+ return fmt.Errorf("%q does not exist", targetPath)
+ }
+ u, err := remotestorage.NewGoogleCloudStorage([]byte(cfg.Control.GoogleCloudStorageKey), cfg.Control.GoogleCloudProjectName)
+ if err != nil {
+ return err
+ }
- // cfg.DataLatencyDistributionPercentile
- saveDataLatencyDistributionPercentile(cfg, stats)
+ srcPath := targetPath
+ dstPath := filepath.Base(targetPath)
+ if !strings.HasPrefix(dstPath, gcfg.DatabaseTag) {
+ dstPath = fmt.Sprintf("%s-%s", gcfg.DatabaseTag, dstPath)
+ }
+ dstPath = filepath.Join(cfg.Control.GoogleCloudStorageSubDirectory, dstPath)
- // cfg.DataLatencyDistributionAll
- saveDataLatencyDistributionAll(cfg, stats)
-
- // cfg.DataLatencyThroughputTimeseries
- saveDataLatencyThroughputTimeseries(cfg, stats, tsToClientN)
+ var uerr error
+ for k := 0; k < 30; k++ {
+ if uerr = u.UploadFile(cfg.Control.GoogleCloudStorageBucketName, srcPath, dstPath); uerr != nil {
+ plog.Printf("#%d: error %v while uploading %q", k, uerr, targetPath)
+ time.Sleep(2 * time.Second)
+ continue
+ }
+ break
+ }
+ return uerr
}
diff --git a/scripts/genproto.sh b/scripts/genproto.sh
index 2e508001..9c14db4a 100755
--- a/scripts/genproto.sh
+++ b/scripts/genproto.sh
@@ -25,4 +25,4 @@ popd
printf "Generating agent\n"
protoc --gofast_out=plugins=grpc:. \
--proto_path=$GOPATH/src:$GOPATH/src/github.com/gogo/protobuf/protobuf:. \
- agent/agentpb/*.proto;
+ dbtesterpb/*.proto;
diff --git a/scripts/tests.sh b/scripts/tests.sh
index ca63b40d..c2df4546 100755
--- a/scripts/tests.sh
+++ b/scripts/tests.sh
@@ -5,9 +5,8 @@ if ! [[ "$0" =~ "scripts/tests.sh" ]]; then
echo "must be run from repository root"
exit 255
fi
-
-IGNORE_PKGS="(agent|vendor|remotestorage)"
-TESTS=`find . -name \*_test.go | while read a; do dirname $a; done | sort | uniq | egrep -v "$IGNORE_PKGS"`
+gofmt -l -s -d *.go
+TESTS="./analyze ./pkg/fileinspect ./pkg/netutil ./pkg/ntp ./pkg/report ./pkg/types"
echo "Checking gofmt..."
fmtRes=$(gofmt -l -s -d $TESTS)
@@ -15,6 +14,7 @@ if [ -n "${fmtRes}" ]; then
echo -e "gofmt checking failed:\n${fmtRes}"
exit 255
fi
+
echo "Checking govet..."
vetRes=$(go vet $TESTS 2>&1 >/dev/null)
if [ -n "${vetRes}" ]; then
diff --git a/control/step2_stress.go b/stress.go
similarity index 60%
rename from control/step2_stress.go
rename to stress.go
index f0a29871..5b09da3e 100644
--- a/control/step2_stress.go
+++ b/stress.go
@@ -12,16 +12,17 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
+ "fmt"
"math"
"os"
"sort"
"sync"
"time"
- "github.com/coreos/dbtester/agent/agentpb"
+ "github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/report"
"github.com/coreos/etcd/clientv3"
consulapi "github.com/hashicorp/consul/api"
@@ -29,44 +30,52 @@ import (
"golang.org/x/time/rate"
)
-func step2StressDatabase(cfg Config) error {
- vals, err := newValues(cfg)
+// Stress stresses the database.
+func (cfg *Config) Stress(databaseID string) error {
+ gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
+ if !ok {
+ return fmt.Errorf("%q does not exist", databaseID)
+ }
+
+ vals, err := newValues(gcfg)
if err != nil {
return err
}
- switch cfg.Step2.BenchType {
+ switch gcfg.BenchmarkOptions.Type {
case "write":
plog.Println("write generateReport is started...")
// fixed number of client numbers
- if len(cfg.Step2.ConnectionsClients) == 0 {
- h, done := newWriteHandlers(cfg)
- reqGen := func(inflightReqs chan<- request) { generateWrites(cfg, 0, vals, inflightReqs) }
- generateReport(cfg, h, done, reqGen)
+ if len(gcfg.BenchmarkOptions.ConnectionClientNumbers) == 0 {
+ h, done := newWriteHandlers(gcfg)
+ reqGen := func(inflightReqs chan<- request) { generateWrites(gcfg, 0, vals, inflightReqs) }
+ cfg.generateReport(gcfg, h, done, reqGen)
} else {
// variable client numbers
- rs := assignRequest(cfg.Step2.ConnectionsClients, cfg.Step2.TotalRequests)
+ rs := assignRequest(gcfg.BenchmarkOptions.ConnectionClientNumbers, gcfg.BenchmarkOptions.RequestNumber)
var stats []report.Stats
- reqCompleted := 0
+ reqCompleted := int64(0)
for i := 0; i < len(rs); i++ {
- copied := cfg
- copied.Step2.Connections = cfg.Step2.ConnectionsClients[i]
- copied.Step2.Clients = cfg.Step2.ConnectionsClients[i]
- copied.Step2.TotalRequests = rs[i]
+ copied := gcfg
+ copied.BenchmarkOptions.ConnectionNumber = gcfg.BenchmarkOptions.ConnectionClientNumbers[i]
+ copied.BenchmarkOptions.ClientNumber = gcfg.BenchmarkOptions.ConnectionClientNumbers[i]
+ copied.BenchmarkOptions.RequestNumber = rs[i]
+ ncfg := *cfg
+ ncfg.DatabaseIDToTestGroup[databaseID] = copied
go func() {
- plog.Infof("signaling agent with client number %d", copied.Step2.Clients)
- if _, err := bcastReq(copied, agentpb.Request_Heartbeat); err != nil {
+ plog.Infof("signaling agent with client number %d", copied.BenchmarkOptions.ClientNumber)
+ if _, err := (&ncfg).BroadcaseRequest(databaseID, dbtesterpb.Request_Heartbeat); err != nil {
plog.Panic(err)
}
}()
h, done := newWriteHandlers(copied)
reqGen := func(inflightReqs chan<- request) { generateWrites(copied, reqCompleted, vals, inflightReqs) }
- b := newBenchmark(copied.Step2.TotalRequests, copied.Step2.Clients, h, done, reqGen)
+ b := newBenchmark(copied.BenchmarkOptions.RequestNumber, copied.BenchmarkOptions.ClientNumber, h, done, reqGen)
// wait until rs[i] requests are finished
// do not end reports yet
@@ -83,7 +92,7 @@ func step2StressDatabase(cfg Config) error {
}
plog.Info("combining all reports")
- tsToClientN := make(map[int64]int, cfg.Step2.TotalRequests)
+ tsToClientN := make(map[int64]int64, gcfg.BenchmarkOptions.RequestNumber)
combined := report.Stats{ErrorDist: make(map[string]int)}
for i, st := range stats {
combined.AvgTotal += st.AvgTotal
@@ -91,7 +100,7 @@ func step2StressDatabase(cfg Config) error {
combined.Lats = append(combined.Lats, st.Lats...)
combined.TimeSeries = append(combined.TimeSeries, st.TimeSeries...)
- clientsN := cfg.Step2.ConnectionsClients[i]
+ clientsN := gcfg.BenchmarkOptions.ConnectionClientNumbers[i]
for _, v := range st.TimeSeries {
tsToClientN[v.Timestamp] = clientsN
}
@@ -123,14 +132,14 @@ func step2StressDatabase(cfg Config) error {
plog.Info("combined all reports")
printStats(combined)
- saveAllStats(cfg, combined, tsToClientN)
+ cfg.saveAllStats(gcfg, combined, tsToClientN)
}
plog.Println("write generateReport is finished...")
- plog.Println("checking total keys on", cfg.DatabaseEndpoints)
+ plog.Println("checking total keys on", gcfg.DatabaseEndpoints)
var totalKeysFunc func([]string) map[string]int64
- switch cfg.Database {
+ switch gcfg.DatabaseID {
case "etcdv2":
totalKeysFunc = getTotalKeysEtcdv2
case "etcdv3":
@@ -140,37 +149,37 @@ func step2StressDatabase(cfg Config) error {
case "consul", "cetcd":
totalKeysFunc = getTotalKeysConsul
}
- for k, v := range totalKeysFunc(cfg.DatabaseEndpoints) {
+ for k, v := range totalKeysFunc(gcfg.DatabaseEndpoints) {
plog.Infof("expected write total results [expected_total: %d | database: %q | endpoint: %q | number_of_keys: %d]",
- cfg.Step2.TotalRequests, cfg.Database, k, v)
+ gcfg.BenchmarkOptions.RequestNumber, gcfg.DatabaseID, k, v)
}
case "read":
- key, value := sameKey(cfg.Step2.KeySize), vals.strings[0]
+ key, value := sameKey(gcfg.BenchmarkOptions.KeySizeBytes), vals.strings[0]
- switch cfg.Database {
+ switch gcfg.DatabaseID {
case "etcdv2":
- plog.Infof("write started [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write started [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
var err error
for i := 0; i < 7; i++ {
- clients := mustCreateClientsEtcdv2(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ clients := mustCreateClientsEtcdv2(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
_, err = clients[0].Set(context.Background(), key, value, nil)
if err != nil {
continue
}
- plog.Infof("write done [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write done [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
break
}
if err != nil {
- plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
os.Exit(1)
}
case "etcdv3":
- plog.Infof("write started [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write started [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
var err error
for i := 0; i < 7; i++ {
- clients := mustCreateClientsEtcdv3(cfg.DatabaseEndpoints, etcdv3ClientCfg{
+ clients := mustCreateClientsEtcdv3(gcfg.DatabaseEndpoints, etcdv3ClientCfg{
totalConns: 1,
totalClients: 1,
})
@@ -178,68 +187,68 @@ func step2StressDatabase(cfg Config) error {
if err != nil {
continue
}
- plog.Infof("write done [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write done [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
break
}
if err != nil {
- plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
os.Exit(1)
}
case "zookeeper", "zetcd":
- plog.Infof("write started [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write started [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
var err error
for i := 0; i < 7; i++ {
- conns := mustCreateConnsZk(cfg.DatabaseEndpoints, cfg.Step2.Connections)
- _, err = conns[0].Create("/"+key, vals.bytes[0], zkCreateFlags, zkCreateAcl)
+ conns := mustCreateConnsZk(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
+ _, err = conns[0].Create("/"+key, vals.bytes[0], zkCreateFlags, zkCreateACL)
if err != nil {
continue
}
for j := range conns {
conns[j].Close()
}
- plog.Infof("write done [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write done [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
break
}
if err != nil {
- plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
os.Exit(1)
}
case "consul", "cetcd":
- plog.Infof("write started [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write started [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
var err error
for i := 0; i < 7; i++ {
- clients := mustCreateConnsConsul(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ clients := mustCreateConnsConsul(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
_, err = clients[0].Put(&consulapi.KVPair{Key: key, Value: vals.bytes[0]}, nil)
if err != nil {
continue
}
- plog.Infof("write done [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write done [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
break
}
if err != nil {
- plog.Errorf("write done [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Errorf("write done [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
os.Exit(1)
}
}
- h, done := newReadHandlers(cfg)
- reqGen := func(inflightReqs chan<- request) { generateReads(cfg, key, inflightReqs) }
- generateReport(cfg, h, done, reqGen)
+ h, done := newReadHandlers(gcfg)
+ reqGen := func(inflightReqs chan<- request) { generateReads(gcfg, key, inflightReqs) }
+ cfg.generateReport(gcfg, h, done, reqGen)
plog.Println("read generateReport is finished...")
case "read-oneshot":
- key, value := sameKey(cfg.Step2.KeySize), vals.strings[0]
- plog.Infof("writing key for read-oneshot [key: %q | database: %q]", key, cfg.Database)
+ key, value := sameKey(gcfg.BenchmarkOptions.KeySizeBytes), vals.strings[0]
+ plog.Infof("writing key for read-oneshot [key: %q | database: %q]", key, gcfg.DatabaseID)
var err error
- switch cfg.Database {
+ switch gcfg.DatabaseID {
case "etcdv2":
- clients := mustCreateClientsEtcdv2(cfg.DatabaseEndpoints, 1)
+ clients := mustCreateClientsEtcdv2(gcfg.DatabaseEndpoints, 1)
_, err = clients[0].Set(context.Background(), key, value, nil)
case "etcdv3":
- clients := mustCreateClientsEtcdv3(cfg.DatabaseEndpoints, etcdv3ClientCfg{
+ clients := mustCreateClientsEtcdv3(gcfg.DatabaseEndpoints, etcdv3ClientCfg{
totalConns: 1,
totalClients: 1,
})
@@ -247,12 +256,12 @@ func step2StressDatabase(cfg Config) error {
clients[0].Close()
case "zookeeper", "zetcd":
- conns := mustCreateConnsZk(cfg.DatabaseEndpoints, 1)
- _, err = conns[0].Create("/"+key, vals.bytes[0], zkCreateFlags, zkCreateAcl)
+ conns := mustCreateConnsZk(gcfg.DatabaseEndpoints, 1)
+ _, err = conns[0].Create("/"+key, vals.bytes[0], zkCreateFlags, zkCreateACL)
conns[0].Close()
case "consul", "cetcd":
- clients := mustCreateConnsConsul(cfg.DatabaseEndpoints, 1)
+ clients := mustCreateConnsConsul(gcfg.DatabaseEndpoints, 1)
_, err = clients[0].Put(&consulapi.KVPair{Key: key, Value: vals.bytes[0]}, nil)
}
if err != nil {
@@ -260,27 +269,27 @@ func step2StressDatabase(cfg Config) error {
os.Exit(1)
}
- h := newReadOneshotHandlers(cfg)
- reqGen := func(inflightReqs chan<- request) { generateReads(cfg, key, inflightReqs) }
- generateReport(cfg, h, nil, reqGen)
+ h := newReadOneshotHandlers(gcfg)
+ reqGen := func(inflightReqs chan<- request) { generateReads(gcfg, key, inflightReqs) }
+ cfg.generateReport(gcfg, h, nil, reqGen)
plog.Println("read-oneshot generateReport is finished...")
}
return nil
}
-func newReadHandlers(cfg Config) (rhs []ReqHandler, done func()) {
- rhs = make([]ReqHandler, cfg.Step2.Clients)
- switch cfg.Database {
+func newReadHandlers(gcfg TestGroup) (rhs []ReqHandler, done func()) {
+ rhs = make([]ReqHandler, gcfg.BenchmarkOptions.ClientNumber)
+ switch gcfg.DatabaseID {
case "etcdv2":
- conns := mustCreateClientsEtcdv2(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateClientsEtcdv2(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
for i := range conns {
rhs[i] = newGetEtcd2(conns[i])
}
case "etcdv3":
- clients := mustCreateClientsEtcdv3(cfg.DatabaseEndpoints, etcdv3ClientCfg{
- totalConns: cfg.Step2.Connections,
- totalClients: cfg.Step2.Clients,
+ clients := mustCreateClientsEtcdv3(gcfg.DatabaseEndpoints, etcdv3ClientCfg{
+ totalConns: gcfg.BenchmarkOptions.ConnectionNumber,
+ totalClients: gcfg.BenchmarkOptions.ClientNumber,
})
for i := range clients {
rhs[i] = newGetEtcd3(clients[i].KV)
@@ -291,7 +300,7 @@ func newReadHandlers(cfg Config) (rhs []ReqHandler, done func()) {
}
}
case "zookeeper", "zetcd":
- conns := mustCreateConnsZk(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateConnsZk(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
for i := range conns {
rhs[i] = newGetZK(conns[i])
}
@@ -301,7 +310,7 @@ func newReadHandlers(cfg Config) (rhs []ReqHandler, done func()) {
}
}
case "consul", "cetcd":
- conns := mustCreateConnsConsul(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateConnsConsul(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
for i := range conns {
rhs[i] = newGetConsul(conns[i])
}
@@ -309,18 +318,18 @@ func newReadHandlers(cfg Config) (rhs []ReqHandler, done func()) {
return rhs, done
}
-func newWriteHandlers(cfg Config) (rhs []ReqHandler, done func()) {
- rhs = make([]ReqHandler, cfg.Step2.Clients)
- switch cfg.Database {
+func newWriteHandlers(gcfg TestGroup) (rhs []ReqHandler, done func()) {
+ rhs = make([]ReqHandler, gcfg.BenchmarkOptions.ClientNumber)
+ switch gcfg.DatabaseID {
case "etcdv2":
- conns := mustCreateClientsEtcdv2(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateClientsEtcdv2(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
for i := range conns {
rhs[i] = newPutEtcd2(conns[i])
}
case "etcdv3":
- etcdClients := mustCreateClientsEtcdv3(cfg.DatabaseEndpoints, etcdv3ClientCfg{
- totalConns: cfg.Step2.Connections,
- totalClients: cfg.Step2.Clients,
+ etcdClients := mustCreateClientsEtcdv3(gcfg.DatabaseEndpoints, etcdv3ClientCfg{
+ totalConns: gcfg.BenchmarkOptions.ConnectionNumber,
+ totalClients: gcfg.BenchmarkOptions.ClientNumber,
})
for i := range etcdClients {
rhs[i] = newPutEtcd3(etcdClients[i])
@@ -331,32 +340,32 @@ func newWriteHandlers(cfg Config) (rhs []ReqHandler, done func()) {
}
}
case "zookeeper", "zetcd":
- if cfg.Step2.SameKey {
- key := sameKey(cfg.Step2.KeySize)
- valueBts := randBytes(cfg.Step2.ValueSize)
- plog.Infof("write started [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ if gcfg.BenchmarkOptions.SameKey {
+ key := sameKey(gcfg.BenchmarkOptions.KeySizeBytes)
+ valueBts := randBytes(gcfg.BenchmarkOptions.ValueSizeBytes)
+ plog.Infof("write started [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
var err error
for i := 0; i < 7; i++ {
- conns := mustCreateConnsZk(cfg.DatabaseEndpoints, cfg.Step2.Connections)
- _, err = conns[0].Create("/"+key, valueBts, zkCreateFlags, zkCreateAcl)
+ conns := mustCreateConnsZk(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
+ _, err = conns[0].Create("/"+key, valueBts, zkCreateFlags, zkCreateACL)
if err != nil {
continue
}
for j := range conns {
conns[j].Close()
}
- plog.Infof("write done [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Infof("write done [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
break
}
if err != nil {
- plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, cfg.Database)
+ plog.Errorf("write error [request: PUT | key: %q | database: %q]", key, gcfg.DatabaseID)
os.Exit(1)
}
}
- conns := mustCreateConnsZk(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateConnsZk(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
for i := range conns {
- if cfg.Step2.SameKey {
+ if gcfg.BenchmarkOptions.SameKey {
rhs[i] = newPutOverwriteZK(conns[i])
} else {
rhs[i] = newPutCreateZK(conns[i])
@@ -368,7 +377,7 @@ func newWriteHandlers(cfg Config) (rhs []ReqHandler, done func()) {
}
}
case "consul", "cetcd":
- conns := mustCreateConnsConsul(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateConnsConsul(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
for i := range conns {
rhs[i] = newPutConsul(conns[i])
}
@@ -382,20 +391,20 @@ func newWriteHandlers(cfg Config) (rhs []ReqHandler, done func()) {
return
}
-func newReadOneshotHandlers(cfg Config) []ReqHandler {
- rhs := make([]ReqHandler, cfg.Step2.Clients)
- switch cfg.Database {
+func newReadOneshotHandlers(gcfg TestGroup) []ReqHandler {
+ rhs := make([]ReqHandler, gcfg.BenchmarkOptions.ClientNumber)
+ switch gcfg.DatabaseID {
case "etcdv2":
for i := range rhs {
rhs[i] = func(ctx context.Context, req *request) error {
- conns := mustCreateClientsEtcdv2(cfg.DatabaseEndpoints, 1)
+ conns := mustCreateClientsEtcdv2(gcfg.DatabaseEndpoints, 1)
return newGetEtcd2(conns[0])(ctx, req)
}
}
case "etcdv3":
for i := range rhs {
rhs[i] = func(ctx context.Context, req *request) error {
- conns := mustCreateClientsEtcdv3(cfg.DatabaseEndpoints, etcdv3ClientCfg{
+ conns := mustCreateClientsEtcdv3(gcfg.DatabaseEndpoints, etcdv3ClientCfg{
totalConns: 1,
totalClients: 1,
})
@@ -406,7 +415,7 @@ func newReadOneshotHandlers(cfg Config) []ReqHandler {
case "zookeeper", "zetcd":
for i := range rhs {
rhs[i] = func(ctx context.Context, req *request) error {
- conns := mustCreateConnsZk(cfg.DatabaseEndpoints, cfg.Step2.Connections)
+ conns := mustCreateConnsZk(gcfg.DatabaseEndpoints, gcfg.BenchmarkOptions.ConnectionNumber)
defer conns[0].Close()
return newGetZK(conns[0])(ctx, req)
}
@@ -414,7 +423,7 @@ func newReadOneshotHandlers(cfg Config) []ReqHandler {
case "consul", "cetcd":
for i := range rhs {
rhs[i] = func(ctx context.Context, req *request) error {
- conns := mustCreateConnsConsul(cfg.DatabaseEndpoints, 1)
+ conns := mustCreateConnsConsul(gcfg.DatabaseEndpoints, 1)
return newGetConsul(conns[0])(ctx, req)
}
}
@@ -422,41 +431,44 @@ func newReadOneshotHandlers(cfg Config) []ReqHandler {
return rhs
}
-func generateReads(cfg Config, key string, inflightReqs chan<- request) {
+func generateReads(gcfg TestGroup, key string, inflightReqs chan<- request) {
defer close(inflightReqs)
var rateLimiter *rate.Limiter
- if cfg.Step2.RequestsPerSecond > 0 {
- rateLimiter = rate.NewLimiter(rate.Limit(cfg.Step2.RequestsPerSecond), cfg.Step2.RequestsPerSecond)
+ if gcfg.BenchmarkOptions.RateLimitRequestsPerSecond > 0 {
+ rateLimiter = rate.NewLimiter(
+ rate.Limit(gcfg.BenchmarkOptions.RateLimitRequestsPerSecond),
+ int(gcfg.BenchmarkOptions.RateLimitRequestsPerSecond),
+ )
}
- for i := 0; i < cfg.Step2.TotalRequests; i++ {
+ for i := int64(0); i < gcfg.BenchmarkOptions.RequestNumber; i++ {
if rateLimiter != nil {
rateLimiter.Wait(context.TODO())
}
- switch cfg.Database {
+ switch gcfg.DatabaseID {
case "etcdv2":
// serializable read by default
inflightReqs <- request{etcdv2Op: etcdv2Op{key: key}}
case "etcdv3":
opts := []clientv3.OpOption{clientv3.WithRange("")}
- if cfg.Step2.StaleRead {
+ if gcfg.BenchmarkOptions.StaleRead {
opts = append(opts, clientv3.WithSerializable())
}
inflightReqs <- request{etcdv3Op: clientv3.OpGet(key, opts...)}
case "zookeeper", "zetcd":
op := zkOp{key: key}
- if cfg.Step2.StaleRead {
+ if gcfg.BenchmarkOptions.StaleRead {
op.staleRead = true
}
inflightReqs <- request{zkOp: op}
case "consul", "cetcd":
op := consulOp{key: key}
- if cfg.Step2.StaleRead {
+ if gcfg.BenchmarkOptions.StaleRead {
op.staleRead = true
}
inflightReqs <- request{consulOp: op}
@@ -464,10 +476,13 @@ func generateReads(cfg Config, key string, inflightReqs chan<- request) {
}
}
-func generateWrites(cfg Config, startIdx int, vals values, inflightReqs chan<- request) {
+func generateWrites(gcfg TestGroup, startIdx int64, vals values, inflightReqs chan<- request) {
var rateLimiter *rate.Limiter
- if cfg.Step2.RequestsPerSecond > 0 {
- rateLimiter = rate.NewLimiter(rate.Limit(cfg.Step2.RequestsPerSecond), cfg.Step2.RequestsPerSecond)
+ if gcfg.BenchmarkOptions.RateLimitRequestsPerSecond > 0 {
+ rateLimiter = rate.NewLimiter(
+ rate.Limit(gcfg.BenchmarkOptions.RateLimitRequestsPerSecond),
+ int(gcfg.BenchmarkOptions.RateLimitRequestsPerSecond),
+ )
}
var wg sync.WaitGroup
@@ -476,20 +491,20 @@ func generateWrites(cfg Config, startIdx int, vals values, inflightReqs chan<- r
wg.Wait()
}()
- for i := 0; i < cfg.Step2.TotalRequests; i++ {
- k := sequentialKey(cfg.Step2.KeySize, i+startIdx)
- if cfg.Step2.SameKey {
- k = sameKey(cfg.Step2.KeySize)
+ for i := int64(0); i < gcfg.BenchmarkOptions.RequestNumber; i++ {
+ k := sequentialKey(gcfg.BenchmarkOptions.KeySizeBytes, i+startIdx)
+ if gcfg.BenchmarkOptions.SameKey {
+ k = sameKey(gcfg.BenchmarkOptions.KeySizeBytes)
}
- v := vals.bytes[i%vals.sampleSize]
- vs := vals.strings[i%vals.sampleSize]
+ v := vals.bytes[i%int64(vals.sampleSize)]
+ vs := vals.strings[i%int64(vals.sampleSize)]
if rateLimiter != nil {
rateLimiter.Wait(context.TODO())
}
- switch cfg.Database {
+ switch gcfg.DatabaseID {
case "etcdv2":
inflightReqs <- request{etcdv2Op: etcdv2Op{key: k, value: vs}}
case "etcdv3":
diff --git a/analyze/analyze_data_4_aggregate_util.go b/stress_client.go
similarity index 57%
rename from analyze/analyze_data_4_aggregate_util.go
rename to stress_client.go
index f09e8b47..34f53d85 100644
--- a/analyze/analyze_data_4_aggregate_util.go
+++ b/stress_client.go
@@ -12,22 +12,19 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package analyze
+package dbtester
import (
- "fmt"
- "strings"
+ "github.com/coreos/etcd/clientv3"
+ "golang.org/x/net/context"
)
-func makeHeader(column string, tag string) string {
- return fmt.Sprintf("%s-%s", column, tag)
+type request struct {
+ etcdv2Op etcdv2Op
+ etcdv3Op clientv3.Op
+ zkOp zkOp
+ consulOp consulOp
}
-func makeTag(legend string) string {
- legend = strings.ToLower(legend)
- legend = strings.Replace(legend, "go ", "go", -1)
- legend = strings.Replace(legend, "java ", "java", -1)
- legend = strings.Replace(legend, "(", "", -1)
- legend = strings.Replace(legend, ")", "", -1)
- return strings.Replace(legend, " ", "-", -1)
-}
+// ReqHandler wraps request handler.
+type ReqHandler func(ctx context.Context, req *request) error
diff --git a/stress_client_consul.go b/stress_client_consul.go
new file mode 100644
index 00000000..08dd9913
--- /dev/null
+++ b/stress_client_consul.go
@@ -0,0 +1,76 @@
+// Copyright 2017 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 dbtester
+
+import (
+ consulapi "github.com/hashicorp/consul/api"
+ "golang.org/x/net/context"
+)
+
+type consulOp struct {
+ key string
+ value []byte
+ staleRead bool
+}
+
+func mustCreateConnsConsul(endpoints []string, total int64) []*consulapi.KV {
+ css := make([]*consulapi.KV, total)
+ for i := range css {
+ endpoint := endpoints[dialTotal%len(endpoints)]
+ dialTotal++
+
+ dcfg := consulapi.DefaultConfig()
+ dcfg.Address = endpoint // x.x.x.x:8500
+ cli, err := consulapi.NewClient(dcfg)
+ if err != nil {
+ plog.Fatal(err)
+ }
+
+ css[i] = cli.KV()
+ }
+ return css
+}
+
+func newPutConsul(conn *consulapi.KV) ReqHandler {
+ return func(ctx context.Context, req *request) error {
+ op := req.consulOp
+ _, err := conn.Put(&consulapi.KVPair{Key: op.key, Value: op.value}, nil)
+ return err
+ }
+}
+
+func newGetConsul(conn *consulapi.KV) ReqHandler {
+ return func(ctx context.Context, req *request) error {
+ opt := &consulapi.QueryOptions{}
+ if req.consulOp.staleRead {
+ opt.AllowStale = true
+ opt.RequireConsistent = false
+ }
+ if !req.consulOp.staleRead {
+ opt.AllowStale = false
+ opt.RequireConsistent = true
+ }
+ _, _, err := conn.Get(req.consulOp.key, opt)
+ return err
+ }
+}
+
+func getTotalKeysConsul(endpoints []string) map[string]int64 {
+ rs := make(map[string]int64)
+ for _, ep := range endpoints {
+ rs[ep] = 0 // not supported in consul
+ }
+ return rs
+}
diff --git a/stress_client_etcdv2.go b/stress_client_etcdv2.go
new file mode 100644
index 00000000..e1c72154
--- /dev/null
+++ b/stress_client_etcdv2.go
@@ -0,0 +1,87 @@
+// Copyright 2017 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 dbtester
+
+import (
+ "net"
+ "net/http"
+ "strings"
+ "time"
+
+ clientv2 "github.com/coreos/etcd/client"
+ "golang.org/x/net/context"
+)
+
+func mustCreateClientsEtcdv2(endpoints []string, total int64) []clientv2.KeysAPI {
+ cks := make([]clientv2.KeysAPI, total)
+ for i := range cks {
+ endpoint := endpoints[dialTotal%len(endpoints)]
+ dialTotal++
+
+ if !strings.HasPrefix(endpoint, "http://") {
+ endpoint = "http://" + endpoint
+ }
+
+ tr := &http.Transport{
+ Proxy: http.ProxyFromEnvironment,
+ Dial: (&net.Dialer{
+ Timeout: 30 * time.Second,
+ KeepAlive: 30 * time.Second,
+ }).Dial,
+ TLSHandshakeTimeout: 10 * time.Second,
+ }
+ cfg := clientv2.Config{
+ Endpoints: []string{endpoint},
+ Transport: tr,
+ HeaderTimeoutPerRequest: time.Second,
+ }
+ c, err := clientv2.New(cfg)
+ if err != nil {
+ plog.Fatal(err)
+ }
+ kapi := clientv2.NewKeysAPI(c)
+
+ cks[i] = kapi
+ }
+ return cks
+}
+
+type etcdv2Op struct {
+ key string
+ value string
+}
+
+func newPutEtcd2(conn clientv2.KeysAPI) ReqHandler {
+ return func(ctx context.Context, req *request) error {
+ op := req.etcdv2Op
+ _, err := conn.Set(context.Background(), op.key, op.value, nil)
+ return err
+ }
+}
+
+func newGetEtcd2(conn clientv2.KeysAPI) ReqHandler {
+ return func(ctx context.Context, req *request) error {
+ _, err := conn.Get(ctx, req.etcdv2Op.key, nil)
+ return err
+ }
+}
+
+func getTotalKeysEtcdv2(endpoints []string) map[string]int64 {
+ rs := make(map[string]int64)
+ for _, ep := range endpoints {
+ rs[ep] = 0 // not supported in metrics
+ }
+ return rs
+}
diff --git a/stress_client_etcdv3.go b/stress_client_etcdv3.go
new file mode 100644
index 00000000..ac4f6fd4
--- /dev/null
+++ b/stress_client_etcdv3.go
@@ -0,0 +1,116 @@
+// Copyright 2017 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 dbtester
+
+import (
+ "bufio"
+ "fmt"
+ "net/http"
+ "os"
+ "strconv"
+ "strings"
+
+ "github.com/coreos/etcd/clientv3"
+ "golang.org/x/net/context"
+)
+
+func newPutEtcd3(conn clientv3.KV) ReqHandler {
+ return func(ctx context.Context, req *request) error {
+ _, err := conn.Do(ctx, req.etcdv3Op)
+ return err
+ }
+}
+
+// dialTotal counts the number of mustCreateConn calls so that endpoint
+// connections can be handed out in round-robin order
+var dialTotal int
+
+func mustCreateConnEtcdv3(endpoints []string) *clientv3.Client {
+ endpoint := endpoints[dialTotal%len(endpoints)]
+ dialTotal++
+ cfg := clientv3.Config{
+ Endpoints: []string{endpoint},
+ }
+ client, err := clientv3.New(cfg)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "dial error: %v\n", err)
+ os.Exit(1)
+ }
+ return client
+}
+
+type etcdv3ClientCfg struct {
+ totalConns int64
+ totalClients int64
+}
+
+func mustCreateClientsEtcdv3(endpoints []string, cfg etcdv3ClientCfg) []*clientv3.Client {
+ conns := make([]*clientv3.Client, cfg.totalConns)
+ for i := range conns {
+ conns[i] = mustCreateConnEtcdv3(endpoints)
+ }
+
+ clients := make([]*clientv3.Client, cfg.totalClients)
+ for i := range clients {
+ clients[i] = conns[i%int(cfg.totalConns)]
+ }
+ return clients
+}
+
+func newGetEtcd3(conn clientv3.KV) ReqHandler {
+ return func(ctx context.Context, req *request) error {
+ _, err := conn.Do(ctx, req.etcdv3Op)
+ return err
+ }
+}
+
+func getTotalKeysEtcdv3(endpoints []string) map[string]int64 {
+ rs := make(map[string]int64)
+ for _, ep := range endpoints {
+ if !strings.HasPrefix(ep, "http://") {
+ ep = "http://" + ep
+ }
+
+ plog.Println("GET", ep+"/metrics")
+ resp, err := http.Get(ep + "/metrics")
+ if err != nil {
+ plog.Println(err)
+ rs[ep] = 0
+ }
+ scanner := bufio.NewScanner(resp.Body)
+ for scanner.Scan() {
+ txt := scanner.Text()
+ if strings.HasPrefix(txt, "#") {
+ continue
+ }
+ ts := strings.SplitN(txt, " ", 2)
+ fv := 0.0
+ if len(ts) == 2 {
+ v, err := strconv.ParseFloat(ts[1], 64)
+ if err == nil {
+ fv = v
+ }
+ }
+ if ts[0] == "etcd_debugging_mvcc_keys_total" {
+ rs[ep] = int64(fv)
+ break
+ }
+ }
+ gracefulClose(resp)
+ }
+
+ plog.Println("getTotalKeysEtcdv3", rs)
+ return rs
+}
diff --git a/control/step2_stress_client_io.go b/stress_client_zookeeper.go
similarity index 51%
rename from control/step2_stress_client_io.go
rename to stress_client_zookeeper.go
index 89015c74..6144e8b2 100644
--- a/control/step2_stress_client_io.go
+++ b/stress_client_zookeeper.go
@@ -12,33 +12,46 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"errors"
-
"fmt"
+ "time"
- clientv2 "github.com/coreos/etcd/client"
- "github.com/coreos/etcd/clientv3"
- consulapi "github.com/hashicorp/consul/api"
"github.com/samuel/go-zookeeper/zk"
"golang.org/x/net/context"
)
-type ReqHandler func(ctx context.Context, req *request) error
+var (
+ zkCreateFlags = int32(0)
+ zkCreateACL = zk.WorldACL(zk.PermAll)
+)
-func newPutEtcd2(conn clientv2.KeysAPI) ReqHandler {
- return func(ctx context.Context, req *request) error {
- op := req.etcdv2Op
- _, err := conn.Set(context.Background(), op.key, op.value, nil)
- return err
- }
+type zkOp struct {
+ key string
+ value []byte
+ staleRead bool
}
-func newPutEtcd3(conn clientv3.KV) ReqHandler {
+func mustCreateConnsZk(endpoints []string, total int64) []*zk.Conn {
+ zks := make([]*zk.Conn, total)
+ for i := range zks {
+ endpoint := endpoints[dialTotal%len(endpoints)]
+ dialTotal++
+ conn, _, err := zk.Connect([]string{endpoint}, time.Second)
+ if err != nil {
+ plog.Fatal(err)
+ }
+ zks[i] = conn
+ }
+ return zks
+}
+
+func newPutCreateZK(conn *zk.Conn) ReqHandler {
return func(ctx context.Context, req *request) error {
- _, err := conn.Do(ctx, req.etcdv3Op)
+ op := req.zkOp
+ _, err := conn.Create(op.key, op.value, zkCreateFlags, zkCreateACL)
return err
}
}
@@ -52,36 +65,6 @@ func newPutOverwriteZK(conn *zk.Conn) ReqHandler {
}
}
-func newPutCreateZK(conn *zk.Conn) ReqHandler {
- return func(ctx context.Context, req *request) error {
- op := req.zkOp
- _, err := conn.Create(op.key, op.value, zkCreateFlags, zkCreateAcl)
- return err
- }
-}
-
-func newPutConsul(conn *consulapi.KV) ReqHandler {
- return func(ctx context.Context, req *request) error {
- op := req.consulOp
- _, err := conn.Put(&consulapi.KVPair{Key: op.key, Value: op.value}, nil)
- return err
- }
-}
-
-func newGetEtcd2(conn clientv2.KeysAPI) ReqHandler {
- return func(ctx context.Context, req *request) error {
- _, err := conn.Get(ctx, req.etcdv2Op.key, nil)
- return err
- }
-}
-
-func newGetEtcd3(conn clientv3.KV) ReqHandler {
- return func(ctx context.Context, req *request) error {
- _, err := conn.Do(ctx, req.etcdv3Op)
- return err
- }
-}
-
func newGetZK(conn *zk.Conn) ReqHandler {
return func(ctx context.Context, req *request) error {
errt := ""
@@ -105,18 +88,18 @@ func newGetZK(conn *zk.Conn) ReqHandler {
}
}
-func newGetConsul(conn *consulapi.KV) ReqHandler {
- return func(ctx context.Context, req *request) error {
- opt := &consulapi.QueryOptions{}
- if req.consulOp.staleRead {
- opt.AllowStale = true
- opt.RequireConsistent = false
+func getTotalKeysZk(endpoints []string) map[string]int64 {
+ rs := make(map[string]int64)
+ stats, ok := zk.FLWSrvr(endpoints, 5*time.Second)
+ if !ok {
+ plog.Printf("getTotalKeysZk failed with %+v", stats)
+ for _, ep := range endpoints {
+ rs[ep] = 0
}
- if !req.consulOp.staleRead {
- opt.AllowStale = false
- opt.RequireConsistent = true
- }
- _, _, err := conn.Get(req.consulOp.key, opt)
- return err
+ return rs
}
+ for i, s := range stats {
+ rs[endpoints[i]] = s.NodeCount
+ }
+ return rs
}
diff --git a/stress_report.go b/stress_report.go
new file mode 100644
index 00000000..64e2b4b9
--- /dev/null
+++ b/stress_report.go
@@ -0,0 +1,158 @@
+// Copyright 2017 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 dbtester
+
+import (
+ "fmt"
+ "sync"
+ "time"
+
+ "github.com/cheggaaa/pb"
+ "github.com/coreos/dbtester/pkg/report"
+ "golang.org/x/net/context"
+)
+
+type values struct {
+ bytes [][]byte
+ strings []string
+ sampleSize int
+}
+
+func newValues(gcfg TestGroup) (v values, rerr error) {
+ v.bytes = [][]byte{randBytes(gcfg.BenchmarkOptions.ValueSizeBytes)}
+ v.strings = []string{string(v.bytes[0])}
+ v.sampleSize = 1
+ return
+}
+
+type benchmark struct {
+ bar *pb.ProgressBar
+ report report.Report
+ reportDone <-chan report.Stats
+ stats report.Stats
+
+ reqHandlers []ReqHandler
+ reqGen func(chan<- request)
+ reqDone func()
+ wg sync.WaitGroup
+
+ mu sync.RWMutex
+ inflightReqs chan request
+}
+
+// pass totalN in case that 'cfg' is manipulated
+func newBenchmark(totalN int64, clientsN int64, reqHandlers []ReqHandler, reqDone func(), reqGen func(chan<- request)) (b *benchmark) {
+ b = &benchmark{
+ bar: pb.New(int(totalN)),
+ reqHandlers: reqHandlers,
+ reqGen: reqGen,
+ reqDone: reqDone,
+ wg: sync.WaitGroup{},
+ }
+ b.inflightReqs = make(chan request, clientsN)
+
+ b.bar.Format("Bom !")
+ b.bar.Start()
+ b.report = report.NewReportSample("%4.4f")
+ return
+}
+
+// only useful when multiple ranges of requests are run with one report
+func (b *benchmark) reset(clientsN int64, reqHandlers []ReqHandler, reqDone func(), reqGen func(chan<- request)) {
+ if len(reqHandlers) == 0 {
+ panic(fmt.Errorf("got 0 reqHandlers"))
+ }
+ b.reqHandlers = reqHandlers
+ b.reqDone = reqDone
+ b.reqGen = reqGen
+
+ // inflight requests will be dropped!
+ b.mu.Lock()
+ b.inflightReqs = make(chan request, clientsN)
+ b.mu.Unlock()
+}
+
+func (b *benchmark) getInflightsReqs() (ch chan request) {
+ b.mu.RLock()
+ ch = b.inflightReqs
+ b.mu.RUnlock()
+ return
+}
+
+func (b *benchmark) startRequests() {
+ for i := range b.reqHandlers {
+ b.wg.Add(1)
+ go func(rh ReqHandler) {
+ defer b.wg.Done()
+ for req := range b.getInflightsReqs() {
+ if rh == nil {
+ panic(fmt.Errorf("got nil rh"))
+ }
+ st := time.Now()
+ err := rh(context.Background(), &req)
+ b.report.Results() <- report.Result{Err: err, Start: st, End: time.Now()}
+ b.bar.Increment()
+ }
+ }(b.reqHandlers[i])
+ }
+ go b.reqGen(b.getInflightsReqs())
+ b.reportDone = b.report.Stats()
+}
+
+func (b *benchmark) waitRequestsEnd() {
+ b.wg.Wait()
+ if b.reqDone != nil {
+ b.reqDone() // cancel connections
+ }
+}
+
+func (b *benchmark) finishReports() {
+ close(b.report.Results())
+ b.bar.Finish()
+ st := <-b.reportDone
+ b.stats = st
+}
+
+func (b *benchmark) waitAll() {
+ b.waitRequestsEnd()
+ b.finishReports()
+}
+
+func printStats(st report.Stats) {
+ // to be piped to cfg.Log via stdout when dbtester executed
+ if len(st.Lats) > 0 {
+ fmt.Printf("Total: %v\n", st.Total)
+ fmt.Printf("Slowest: %f secs\n", st.Slowest)
+ fmt.Printf("Fastest: %f secs\n", st.Fastest)
+ fmt.Printf("Average: %f secs\n", st.Average)
+ fmt.Printf("Requests/sec: %4.4f\n", st.RPS)
+ }
+ if len(st.ErrorDist) > 0 {
+ for k, v := range st.ErrorDist {
+ fmt.Printf("ERROR %q : %d\n", k, v)
+ }
+ } else {
+ fmt.Println("ERRRO: 0")
+ }
+}
+
+func (cfg *Config) generateReport(gcfg TestGroup, h []ReqHandler, reqDone func(), reqGen func(chan<- request)) {
+ b := newBenchmark(gcfg.RequestNumber, gcfg.ClientNumber, h, reqDone, reqGen)
+ b.startRequests()
+ b.waitAll()
+
+ printStats(b.stats)
+ cfg.saveAllStats(gcfg, b.stats, nil)
+}
diff --git a/control/step2_stress_report_aggregate.go b/stress_report_aggregate.go
similarity index 92%
rename from control/step2_stress_report_aggregate.go
rename to stress_report_aggregate.go
index c37d907b..18f4c193 100644
--- a/control/step2_stress_report_aggregate.go
+++ b/stress_report_aggregate.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"sort"
@@ -36,7 +36,7 @@ import (
// If unis is 1000 and the average throughput per second is 30,000
// and its average latency is 10ms, it will have 30 data points with
// latency 10ms.
-func processTimeSeries(tss report.TimeSeries, unit int64, totalRequests int) keyNumToAvgLatencys {
+func processTimeSeries(tss report.TimeSeries, unit int64, totalRequests int64) keyNumToAvgLatencys {
sort.Sort(tss)
cumulKeyN := int64(0)
@@ -63,13 +63,13 @@ func processTimeSeries(tss report.TimeSeries, unit int64, totalRequests int) key
}
// fill-in empty rows
- for i := maxKey; i < int64(totalRequests); i += unit {
+ for i := maxKey; i < totalRequests; i += unit {
if _, ok := rm[i]; !ok {
rm[i] = keyNumToAvgLatency{}
}
}
- if _, ok := rm[int64(totalRequests)]; !ok {
- rm[int64(totalRequests)] = keyNumToAvgLatency{}
+ if _, ok := rm[totalRequests]; !ok {
+ rm[totalRequests] = keyNumToAvgLatency{}
}
kss := []keyNumToAvgLatency{}
diff --git a/control/step2_stress_report_aggregate_test.go b/stress_report_aggregate_test.go
similarity index 99%
rename from control/step2_stress_report_aggregate_test.go
rename to stress_report_aggregate_test.go
index 7dd5f2c2..df2f1a95 100644
--- a/control/step2_stress_report_aggregate_test.go
+++ b/stress_report_aggregate_test.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"reflect"
diff --git a/test-configs/01-write-1M-keys-client-variable.yaml b/test-configs/01-write-1M-keys-client-variable.yaml
new file mode 100644
index 00000000..8a960f85
--- /dev/null
+++ b/test-configs/01-write-1M-keys-client-variable.yaml
@@ -0,0 +1,339 @@
+test_title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
+test_description: |
+ - Google Cloud Compute Engine
+ - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+ - Ubuntu 16.10
+ - etcd v3.1 (Go 1.7.4)
+ - Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+ - Consul v0.7.3 (Go 1.7.4)
+
+# common control options for all client machines
+control:
+ # if not empty, all test data paths are prefixed
+ path_prefix: /home/gyuho
+ log_path: client-control.log
+ client_system_metrics_path: client-system-metrics.csv
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+
+ # (optional) to automatically upload all files in client machine
+ google_cloud_project_name: etcd-development
+ # set this in 'control' machine, to automate log uploading in remote 'agent' machines
+ google_cloud_storage_key_path: /home/gyuho/gcloud-key.json
+ google_cloud_storage_bucket_name: dbtester-results
+ google_cloud_storage_sub_directory: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable
+
+all_database_id_list: [etcdv3, zookeeper, consul]
+
+datatbase_id_to_test_group:
+ etcdv3:
+ database_description: etcd v3.1 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.20
+ - 10.240.0.21
+ - 10.240.0.22
+ database_port_to_connect: 2379
+ agent_port_to_connect: 3500
+
+ etcdv3:
+ # --snapshot-count
+ snap_count: 100000
+ # --quota-backend-bytes; 8 GB
+ quota_size_bytes: 8000000000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 0
+ client_number: 0
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ zookeeper:
+ database_description: Zookeeper r3.4.9 (Java 8)
+ peer_ips:
+ - 10.240.0.25
+ - 10.240.0.27
+ - 10.240.0.28
+ database_port_to_connect: 2181
+ agent_port_to_connect: 3500
+
+ # http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
+ zookeeper:
+ # tickTime; the length of a single tick, which is the basic time unit used by ZooKeeper,
+ # as measured in milliseconds.
+ tick_time: 2000
+
+ # initLimit; Amount of time, in ticks to allow followers to connect and sync to a leader
+ # increased this value as needed, if the amount of data managed by ZooKeeper is large.
+ # (default 5)
+ init_limit: 5
+
+ # syncLimit; Amount of time, in ticks to allow followers to sync with ZooKeeper.
+ # (default 5)
+ sync_limit: 5
+
+ # snapCount; After snapCount transactions are written to a log file a snapshot
+ # is started and a new transaction log file is created. The default snapCount is 100,000.
+ snap_count: 100000
+
+ # maxClientCnxns; Limits the number of concurrent connections (at the socket level)
+ # that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
+ max_client_connections: 5000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 0
+ client_number: 0
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ consul:
+ database_description: Consul v0.7.3 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.30
+ - 10.240.0.31
+ - 10.240.0.33
+ database_port_to_connect: 8500
+ agent_port_to_connect: 3500
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 0
+ client_number: 0
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+
+datatbase_id_to_test_data:
+ etcdv3:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ zookeeper:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ consul:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+analyze:
+ all_aggregated_output_path_csv: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.csv
+ all_aggregated_output_path_txt: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.txt
+
+plot_path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable
+plot_list:
+- column: AVG-LATENCY-MS
+ x_axis: Second
+ y_axis: Latency(millisecond)
+
+- column: AVG-THROUGHPUT
+ x_axis: Second
+ y_axis: Throughput(Requests/Second)
+
+- column: AVG-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Voluntary Context Switches
+
+- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Non-voluntary Context Switches
+
+- column: AVG-CPU
+ x_axis: Second
+ y_axis: CPU(%)
+
+- column: AVG-VMRSS-MB
+ x_axis: Second
+ y_axis: Memory(MB)
+
+- column: AVG-READS-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Reads (Delta per Second)
+
+- column: AVG-SECTORS-READ-DELTA
+ x_axis: Second
+ y_axis: Sectors Read (Delta per Second)
+
+- column: AVG-WRITES-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Writes (Delta per Second)
+
+- column: AVG-SECTORS-WRITTEN-DELTA
+ x_axis: Second
+ y_axis: Sectors Written (Delta per Second)
+
+- column: AVG-RECEIVE-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Receive(bytes) (Delta per Second)
+
+- column: AVG-TRANSMIT-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Transmit(bytes) (Delta per Second)
+
+readme:
+ output_path: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md
+
+ images:
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
+ type: remote
diff --git a/test-configs/02-write-1M-keys-best-throughput.yaml b/test-configs/02-write-1M-keys-best-throughput.yaml
new file mode 100644
index 00000000..ffed7da8
--- /dev/null
+++ b/test-configs/02-write-1M-keys-best-throughput.yaml
@@ -0,0 +1,339 @@
+test_title: Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
+test_description: |
+ - Google Cloud Compute Engine
+ - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+ - Ubuntu 16.10
+ - etcd v3.1 (Go 1.7.4)
+ - Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+ - Consul v0.7.3 (Go 1.7.4)
+
+# common control options for all client machines
+control:
+ # if not empty, all test data paths are prefixed
+ path_prefix: /home/gyuho
+ log_path: client-control.log
+ client_system_metrics_path: client-system-metrics.csv
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+
+ # (optional) to automatically upload all files in client machine
+ google_cloud_project_name: etcd-development
+ # set this in 'control' machine, to automate log uploading in remote 'agent' machines
+ google_cloud_storage_key_path: /home/gyuho/gcloud-key.json
+ google_cloud_storage_bucket_name: dbtester-results
+ google_cloud_storage_sub_directory: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
+
+all_database_id_list: [etcdv3, zookeeper, consul]
+
+datatbase_id_to_test_group:
+ etcdv3:
+ database_description: etcd v3.1 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.20
+ - 10.240.0.21
+ - 10.240.0.22
+ database_port_to_connect: 2379
+ agent_port_to_connect: 3500
+
+ etcdv3:
+ # --snapshot-count
+ snap_count: 100000
+ # --quota-backend-bytes; 8 GB
+ quota_size_bytes: 8000000000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 700 # for best throughput
+ client_number: 700 # for best throughput
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ zookeeper:
+ database_description: Zookeeper r3.4.9 (Java 8)
+ peer_ips:
+ - 10.240.0.25
+ - 10.240.0.27
+ - 10.240.0.28
+ database_port_to_connect: 2181
+ agent_port_to_connect: 3500
+
+ # http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
+ zookeeper:
+ # tickTime; the length of a single tick, which is the basic time unit used by ZooKeeper,
+ # as measured in milliseconds.
+ tick_time: 2000
+
+ # initLimit; Amount of time, in ticks to allow followers to connect and sync to a leader
+ # increased this value as needed, if the amount of data managed by ZooKeeper is large.
+ # (default 5)
+ init_limit: 5
+
+ # syncLimit; Amount of time, in ticks to allow followers to sync with ZooKeeper.
+ # (default 5)
+ sync_limit: 5
+
+ # snapCount; After snapCount transactions are written to a log file a snapshot
+ # is started and a new transaction log file is created. The default snapCount is 100,000.
+ snap_count: 100000
+
+ # maxClientCnxns; Limits the number of concurrent connections (at the socket level)
+ # that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
+ max_client_connections: 5000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 300 # for best throughput
+ client_number: 300 # for best throughput
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ consul:
+ database_description: Consul v0.7.3 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.30
+ - 10.240.0.31
+ - 10.240.0.33
+ database_port_to_connect: 8500
+ agent_port_to_connect: 3500
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 500 # for best throughput
+ client_number: 500 # for best throughput
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+
+datatbase_id_to_test_data:
+ etcdv3:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ zookeeper:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ consul:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+analyze:
+ all_aggregated_output_path_csv: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/all-aggregated.csv
+ all_aggregated_output_path_txt: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/all-aggregated.txt
+
+plot_path_prefix: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
+plot_list:
+- column: AVG-LATENCY-MS
+ x_axis: Second
+ y_axis: Latency(millisecond)
+
+- column: AVG-THROUGHPUT
+ x_axis: Second
+ y_axis: Throughput(Requests/Second)
+
+- column: AVG-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Voluntary Context Switches
+
+- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Non-voluntary Context Switches
+
+- column: AVG-CPU
+ x_axis: Second
+ y_axis: CPU(%)
+
+- column: AVG-VMRSS-MB
+ x_axis: Second
+ y_axis: Memory(MB)
+
+- column: AVG-READS-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Reads (Delta per Second)
+
+- column: AVG-SECTORS-READ-DELTA
+ x_axis: Second
+ y_axis: Sectors Read (Delta per Second)
+
+- column: AVG-WRITES-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Writes (Delta per Second)
+
+- column: AVG-SECTORS-WRITTEN-DELTA
+ x_axis: Second
+ y_axis: Sectors Written (Delta per Second)
+
+- column: AVG-RECEIVE-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Receive(bytes) (Delta per Second)
+
+- column: AVG-TRANSMIT-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Transmit(bytes) (Delta per Second)
+
+readme:
+ output_path: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/README.md
+
+ images:
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
+ type: remote
diff --git a/test-configs/03-write-1M-keys-1000-client.yaml b/test-configs/03-write-1M-keys-1000-client.yaml
new file mode 100644
index 00000000..3cf0299a
--- /dev/null
+++ b/test-configs/03-write-1M-keys-1000-client.yaml
@@ -0,0 +1,339 @@
+test_title: Write 1M keys, 256-byte key, 1KB value, 1,000 client
+test_description: |
+ - Google Cloud Compute Engine
+ - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+ - Ubuntu 16.10
+ - etcd v3.1 (Go 1.7.4)
+ - Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+ - Consul v0.7.3 (Go 1.7.4)
+
+# common control options for all client machines
+control:
+ # if not empty, all test data paths are prefixed
+ path_prefix: /home/gyuho
+ log_path: client-control.log
+ client_system_metrics_path: client-system-metrics.csv
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+
+ # (optional) to automatically upload all files in client machine
+ google_cloud_project_name: etcd-development
+ # set this in 'control' machine, to automate log uploading in remote 'agent' machines
+ google_cloud_storage_key_path: /home/gyuho/gcloud-key.json
+ google_cloud_storage_bucket_name: dbtester-results
+ google_cloud_storage_sub_directory: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client
+
+all_database_id_list: [etcdv3, zookeeper, consul]
+
+datatbase_id_to_test_group:
+ etcdv3:
+ database_description: etcd v3.1 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.20
+ - 10.240.0.21
+ - 10.240.0.22
+ database_port_to_connect: 2379
+ agent_port_to_connect: 3500
+
+ etcdv3:
+ # --snapshot-count
+ snap_count: 100000
+ # --quota-backend-bytes; 8 GB
+ quota_size_bytes: 8000000000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 1000
+ client_number: 1000
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ zookeeper:
+ database_description: Zookeeper r3.4.9 (Java 8)
+ peer_ips:
+ - 10.240.0.25
+ - 10.240.0.27
+ - 10.240.0.28
+ database_port_to_connect: 2181
+ agent_port_to_connect: 3500
+
+ # http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
+ zookeeper:
+ # tickTime; the length of a single tick, which is the basic time unit used by ZooKeeper,
+ # as measured in milliseconds.
+ tick_time: 2000
+
+ # initLimit; Amount of time, in ticks to allow followers to connect and sync to a leader
+ # increased this value as needed, if the amount of data managed by ZooKeeper is large.
+ # (default 5)
+ init_limit: 5
+
+ # syncLimit; Amount of time, in ticks to allow followers to sync with ZooKeeper.
+ # (default 5)
+ sync_limit: 5
+
+ # snapCount; After snapCount transactions are written to a log file a snapshot
+ # is started and a new transaction log file is created. The default snapCount is 100,000.
+ snap_count: 100000
+
+ # maxClientCnxns; Limits the number of concurrent connections (at the socket level)
+ # that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
+ max_client_connections: 5000
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 1000
+ client_number: 1000
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ consul:
+ database_description: Consul v0.7.3 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.30
+ - 10.240.0.31
+ - 10.240.0.33
+ database_port_to_connect: 8500
+ agent_port_to_connect: 3500
+
+ benchmark_options:
+ type: write
+ request_number: 1000000
+ connection_number: 1000
+ client_number: 1000
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+
+datatbase_id_to_test_data:
+ etcdv3:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ zookeeper:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ consul:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+analyze:
+ all_aggregated_output_path_csv: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/all-aggregated.csv
+ all_aggregated_output_path_txt: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/all-aggregated.txt
+
+plot_path_prefix: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client
+plot_list:
+- column: AVG-LATENCY-MS
+ x_axis: Second
+ y_axis: Latency(millisecond)
+
+- column: AVG-THROUGHPUT
+ x_axis: Second
+ y_axis: Throughput(Requests/Second)
+
+- column: AVG-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Voluntary Context Switches
+
+- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Non-voluntary Context Switches
+
+- column: AVG-CPU
+ x_axis: Second
+ y_axis: CPU(%)
+
+- column: AVG-VMRSS-MB
+ x_axis: Second
+ y_axis: Memory(MB)
+
+- column: AVG-READS-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Reads (Delta per Second)
+
+- column: AVG-SECTORS-READ-DELTA
+ x_axis: Second
+ y_axis: Sectors Read (Delta per Second)
+
+- column: AVG-WRITES-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Writes (Delta per Second)
+
+- column: AVG-SECTORS-WRITTEN-DELTA
+ x_axis: Second
+ y_axis: Sectors Written (Delta per Second)
+
+- column: AVG-RECEIVE-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Receive(bytes) (Delta per Second)
+
+- column: AVG-TRANSMIT-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Transmit(bytes) (Delta per Second)
+
+readme:
+ output_path: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/README.md
+
+ images:
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
+ type: remote
diff --git a/test-configs/04-write-too-many-keys.yaml b/test-configs/04-write-too-many-keys.yaml
new file mode 100644
index 00000000..3e8c266b
--- /dev/null
+++ b/test-configs/04-write-too-many-keys.yaml
@@ -0,0 +1,339 @@
+test_title: Write 3-million keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
+test_description: |
+ - Google Cloud Compute Engine
+ - 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+ - Ubuntu 16.10
+ - etcd v3.1 (Go 1.7.4)
+ - Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+ - Consul v0.7.3 (Go 1.7.4)
+
+# common control options for all client machines
+control:
+ # if not empty, all test data paths are prefixed
+ path_prefix: /home/gyuho
+ log_path: client-control.log
+ client_system_metrics_path: client-system-metrics.csv
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+
+ # (optional) to automatically upload all files in client machine
+ google_cloud_project_name: etcd-development
+ # set this in 'control' machine, to automate log uploading in remote 'agent' machines
+ google_cloud_storage_key_path: /home/gyuho/gcloud-key.json
+ google_cloud_storage_bucket_name: dbtester-results
+ google_cloud_storage_sub_directory: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys
+
+all_database_id_list: [etcdv3, zookeeper, consul]
+
+datatbase_id_to_test_group:
+ etcdv3:
+ database_description: etcd v3.1 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.20
+ - 10.240.0.21
+ - 10.240.0.22
+ database_port_to_connect: 2379
+ agent_port_to_connect: 3500
+
+ etcdv3:
+ # --snapshot-count
+ snap_count: 100000
+ # --quota-backend-bytes; 8 GB
+ quota_size_bytes: 8000000000
+
+ benchmark_options:
+ type: write
+ request_number: 3000000
+ connection_number: 700 # for best throughput
+ client_number: 700 # for best throughput
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ zookeeper:
+ database_description: Zookeeper r3.4.9 (Java 8)
+ peer_ips:
+ - 10.240.0.25
+ - 10.240.0.27
+ - 10.240.0.28
+ database_port_to_connect: 2181
+ agent_port_to_connect: 3500
+
+ # http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
+ zookeeper:
+ # tickTime; the length of a single tick, which is the basic time unit used by ZooKeeper,
+ # as measured in milliseconds.
+ tick_time: 2000
+
+ # initLimit; Amount of time, in ticks to allow followers to connect and sync to a leader
+ # increased this value as needed, if the amount of data managed by ZooKeeper is large.
+ # (default 5)
+ init_limit: 5
+
+ # syncLimit; Amount of time, in ticks to allow followers to sync with ZooKeeper.
+ # (default 5)
+ sync_limit: 5
+
+ # snapCount; After snapCount transactions are written to a log file a snapshot
+ # is started and a new transaction log file is created. The default snapCount is 100,000.
+ snap_count: 100000
+
+ # maxClientCnxns; Limits the number of concurrent connections (at the socket level)
+ # that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
+ max_client_connections: 5000
+
+ benchmark_options:
+ type: write
+ request_number: 3000000
+ connection_number: 300 # for best throughput
+ client_number: 300 # for best throughput
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+ consul:
+ database_description: Consul v0.7.3 (Go 1.7.4)
+ peer_ips:
+ - 10.240.0.30
+ - 10.240.0.31
+ - 10.240.0.33
+ database_port_to_connect: 8500
+ agent_port_to_connect: 3500
+
+ benchmark_options:
+ type: write
+ request_number: 3000000
+ connection_number: 500 # for best throughput
+ client_number: 500 # for best throughput
+ # if specified, overwrite 'connection_number', 'connection_number'
+ connection_client_numbers: []
+
+ # 0, to not rate limit
+ rate_limit_requests_per_second: 0
+
+ # for 'write', 'read'
+ same_key: false
+ key_size_bytes: 256
+ value_size_bytes: 1024
+
+ stale_read: false
+
+ benchmark_steps:
+ step1_start_database: true
+ step2_stress_database: true
+ step3_stop_database: true
+ step4_upload_logs: true
+
+
+datatbase_id_to_test_data:
+ etcdv3:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ zookeeper:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+ consul:
+ # if not empty, all test data paths are prefixed
+ path_prefix: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4
+ client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
+ client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
+ client_latency_distribution_all_path: client-latency-distribution-all.csv
+ client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
+ client_latency_distribution_summary_path: client-latency-distribution-summary.csv
+ client_latency_by_key_number_path: client-latency-by-key-number.csv
+ server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
+ server_memory_by_key_number_path: server-memory-by-key-number.csv
+ server_system_metrics_interpolated_path_list:
+ - 1-server-system-metrics-interpolated.csv
+ - 2-server-system-metrics-interpolated.csv
+ - 3-server-system-metrics-interpolated.csv
+ all_aggregated_output_path: all-aggregated.csv
+
+analyze:
+ all_aggregated_output_path_csv: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/all-aggregated.csv
+ all_aggregated_output_path_txt: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/all-aggregated.txt
+
+plot_path_prefix: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys
+plot_list:
+- column: AVG-LATENCY-MS
+ x_axis: Second
+ y_axis: Latency(millisecond)
+
+- column: AVG-THROUGHPUT
+ x_axis: Second
+ y_axis: Throughput(Requests/Second)
+
+- column: AVG-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Voluntary Context Switches
+
+- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ x_axis: Second
+ y_axis: Non-voluntary Context Switches
+
+- column: AVG-CPU
+ x_axis: Second
+ y_axis: CPU(%)
+
+- column: AVG-VMRSS-MB
+ x_axis: Second
+ y_axis: Memory(MB)
+
+- column: AVG-READS-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Reads (Delta per Second)
+
+- column: AVG-SECTORS-READ-DELTA
+ x_axis: Second
+ y_axis: Sectors Read (Delta per Second)
+
+- column: AVG-WRITES-COMPLETED-DELTA
+ x_axis: Second
+ y_axis: Disk Writes (Delta per Second)
+
+- column: AVG-SECTORS-WRITTEN-DELTA
+ x_axis: Second
+ y_axis: Sectors Written (Delta per Second)
+
+- column: AVG-RECEIVE-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Receive(bytes) (Delta per Second)
+
+- column: AVG-TRANSMIT-BYTES-NUM-DELTA
+ x_axis: Second
+ y_axis: Network Transmit(bytes) (Delta per Second)
+
+readme:
+ output_path: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/README.md
+
+ images:
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
+ type: remote
+
+ - title: 2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
+ path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
+ type: remote
diff --git a/bench-configuration/02-install-cetcd.sh b/test-configs/install-cetcd.sh
similarity index 100%
rename from bench-configuration/02-install-cetcd.sh
rename to test-configs/install-cetcd.sh
diff --git a/bench-configuration/02-install-consul.sh b/test-configs/install-consul.sh
similarity index 100%
rename from bench-configuration/02-install-consul.sh
rename to test-configs/install-consul.sh
diff --git a/bench-configuration/03-install-dbtester.sh b/test-configs/install-dbtester.sh
similarity index 81%
rename from bench-configuration/03-install-dbtester.sh
rename to test-configs/install-dbtester.sh
index c0e196b9..044b84a5 100755
--- a/bench-configuration/03-install-dbtester.sh
+++ b/test-configs/install-dbtester.sh
@@ -8,7 +8,7 @@ rm -rf $HOME/go/src/github.com/coreos/dbtester
git clone https://github.com/$USER_NAME/dbtester --branch $BRANCH_NAME $HOME/go/src/github.com/coreos/dbtester
cd $HOME
-go install -v ./go/src/github.com/coreos/dbtester
+go install -v ./go/src/github.com/coreos/dbtester/cmd/dbtester
dbtester agent -h
dbtester control -h
diff --git a/bench-configuration/01-install-etcd.sh b/test-configs/install-etcd.sh
similarity index 100%
rename from bench-configuration/01-install-etcd.sh
rename to test-configs/install-etcd.sh
diff --git a/bench-configuration/00-install-go.sh b/test-configs/install-go.sh
similarity index 100%
rename from bench-configuration/00-install-go.sh
rename to test-configs/install-go.sh
diff --git a/bench-configuration/02-install-zetcd.sh b/test-configs/install-zetcd.sh
similarity index 100%
rename from bench-configuration/02-install-zetcd.sh
rename to test-configs/install-zetcd.sh
diff --git a/bench-configuration/02-install-zookeeper-ubuntu.sh b/test-configs/install-zookeeper-ubuntu.sh
similarity index 100%
rename from bench-configuration/02-install-zookeeper-ubuntu.sh
rename to test-configs/install-zookeeper-ubuntu.sh
diff --git a/bench-configuration/04-run-dbtester.sh b/test-configs/run-dbtester.sh
similarity index 63%
rename from bench-configuration/04-run-dbtester.sh
rename to test-configs/run-dbtester.sh
index 418da072..2d55011c 100755
--- a/bench-configuration/04-run-dbtester.sh
+++ b/test-configs/run-dbtester.sh
@@ -7,9 +7,11 @@ nohup dbtester agent --network-interface ens4 --disk-device sda1 --agent-port
# control; specify 'control' configuration file (client number, key number, key-value size),
# this starts database stressing, and shuts down the database when done
-nohup dbtester control -c config.yaml > $HOME/control.log 2>&1 &
+nohup dbtester control --database-id etcdv3 --config config.yaml > $HOME/control.log 2>&1 &
+nohup dbtester control --database-id zookeeper --config config.yaml > $HOME/control.log 2>&1 &
+nohup dbtester control --database-id consul --config config.yaml > $HOME/control.log 2>&1 &
# analyze; get all data from remote machines
# and specify 'analyze' configuration file,
# this aggregates data, generates all graphs, texts
-dbtester analyze --config analyze.yaml
+dbtester analyze --config config.yaml
diff --git a/test-results/2017Q1-00-etcd-zookeeper-consul/README.md b/test-results/2017Q1-00-etcd-zookeeper-consul/README.md
new file mode 100644
index 00000000..d73274a9
--- /dev/null
+++ b/test-results/2017Q1-00-etcd-zookeeper-consul/README.md
@@ -0,0 +1,496 @@
+
+
+
+##### Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 345.7743 sec | 320.9959 sec | 676.6576 sec |
+| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
+| MAX-THROUGHPUT | 35,245 req/sec | 37,580 req/sec | 15,488 req/sec |
+| AVG-THROUGHPUT | 2,892 req/sec | 3,108 req/sec | 1,477 req/sec |
+| MIN-THROUGHPUT | 23 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 1.0942 ms | 0.9952 ms | 3.0193 ms |
+| AVG-LATENCY | 14.0207 ms | 34.9720 ms | 44.3717 ms |
+| SLOWEST-LATENCY | 101.5395 ms | 2334.6007 ms | 3475.2713 ms |
+| Latency p10 | 2.308513 ms | 2.378813 ms | 3.971904 ms |
+| Latency p25 | 5.879109 ms | 3.595997 ms | 7.811056 ms |
+| Latency p50 | 10.100823 ms | 6.320842 ms | 20.224796 ms |
+| Latency p75 | 17.160120 ms | 12.677824 ms | 56.790033 ms |
+| Latency p90 | 28.890553 ms | 21.506040 ms | 89.507900 ms |
+| Latency p95 | 44.861387 ms | 30.713207 ms | 106.807611 ms |
+| Latency p99 | 62.570152 ms | 1186.951737 ms | 301.241777 ms |
+| Latency p99.9 | 87.467729 ms | 2241.127019 ms | 2634.872172 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.4 GB | 5.5 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.4 GB | 4.3 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 271 MB | 356 MB | 202 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
+| SERVER-MAX-CPU-USAGE | 449.90 % | 558.97 % | 421.60 % |
+| SERVER-MAX-MEMORY-USAGE | 1.4 GB | 3.9 GB | 4.8 GB |
+| CLIENT-MAX-CPU-USAGE | 552.00 % | 617.80 % | 224.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 361 MB | 4.4 GB | 225 MB |
+| CLIENT-ERROR-COUNT | 0 | 2,093 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 3 | 221 | 11 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 1,222,851 | 960,275 | 2,333,199 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 739,936 | 12,769,072 | 4,013,148 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 2.4 GB | 8.8 GB | 3.0 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: connection closed" (count 1,747)
+"zk: could not connect to a server" (count 346)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+##### Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 37.4731 sec | 63.8379 sec | 309.0797 sec |
+| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
+| MAX-THROUGHPUT | 32,555 req/sec | 38,537 req/sec | 16,919 req/sec |
+| AVG-THROUGHPUT | 26,685 req/sec | 15,656 req/sec | 3,235 req/sec |
+| MIN-THROUGHPUT | 15,350 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 4.5030 ms | 2.3895 ms | 14.5025 ms |
+| AVG-LATENCY | 26.1688 ms | 17.9204 ms | 154.4720 ms |
+| SLOWEST-LATENCY | 205.8298 ms | 3471.7581 ms | 21463.6662 ms |
+| Latency p10 | 10.580892 ms | 5.948893 ms | 29.430795 ms |
+| Latency p25 | 12.626734 ms | 6.817741 ms | 34.096243 ms |
+| Latency p50 | 18.452075 ms | 7.718642 ms | 42.522161 ms |
+| Latency p75 | 26.930691 ms | 8.659562 ms | 63.027422 ms |
+| Latency p90 | 49.843748 ms | 9.750484 ms | 263.017095 ms |
+| Latency p95 | 67.991988 ms | 10.757740 ms | 601.571541 ms |
+| Latency p99 | 135.153213 ms | 114.903303 ms | 1237.545701 ms |
+| Latency p99.9 | 160.393852 ms | 2248.915050 ms | 11496.380241 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 4.9 GB | 5.4 GB | 14 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.8 GB | 4.3 GB | 12 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 274 MB | 351 MB | 211 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.4 GB | 1.4 GB | 1.5 GB |
+| SERVER-MAX-CPU-USAGE | 416.67 % | 710.17 % | 410.67 % |
+| SERVER-MAX-MEMORY-USAGE | 1.2 GB | 4.6 GB | 5.9 GB |
+| CLIENT-MAX-CPU-USAGE | 448.00 % | 365.00 % | 223.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 219 MB | 1.9 GB | 90 MB |
+| CLIENT-ERROR-COUNT | 0 | 509 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 3 | 253 | 162 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 110,436 | 101,558 | 665,193 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 371,988 | 9,306,936 | 37,002,460 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 2.8 GB | 7.1 GB | 2.9 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: could not connect to a server" (count 208)
+"zk: connection closed" (count 301)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+##### Write 1M keys, 256-byte key, 1KB value, 1,000 client
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 36.5547 sec | 59.5935 sec | 244.8620 sec |
+| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
+| MAX-THROUGHPUT | 35,025 req/sec | 47,693 req/sec | 15,146 req/sec |
+| AVG-THROUGHPUT | 27,356 req/sec | 16,697 req/sec | 4,083 req/sec |
+| MIN-THROUGHPUT | 228 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 4.1857 ms | 1.4036 ms | 27.1684 ms |
+| AVG-LATENCY | 36.4506 ms | 46.1962 ms | 244.4663 ms |
+| SLOWEST-LATENCY | 233.1590 ms | 6787.1829 ms | 30479.0204 ms |
+| Latency p10 | 14.321495 ms | 12.447591 ms | 66.233418 ms |
+| Latency p25 | 17.784730 ms | 16.822188 ms | 74.271576 ms |
+| Latency p50 | 23.783217 ms | 20.026128 ms | 92.736772 ms |
+| Latency p75 | 44.930445 ms | 23.615952 ms | 151.332505 ms |
+| Latency p90 | 67.957086 ms | 31.726640 ms | 338.858136 ms |
+| Latency p95 | 121.316986 ms | 78.842487 ms | 696.780894 ms |
+| Latency p99 | 163.614045 ms | 821.197693 ms | 1887.708027 ms |
+| Latency p99.9 | 187.122508 ms | 2709.006521 ms | 20942.858889 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 5.0 GB | 5.3 GB | 6.6 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.2 GB | 5.4 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 282 MB | 357 MB | 243 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.4 GB | 1.4 GB | 1.5 GB |
+| SERVER-MAX-CPU-USAGE | 451.00 % | 723.67 % | 436.67 % |
+| SERVER-MAX-MEMORY-USAGE | 1.2 GB | 4.7 GB | 4.9 GB |
+| CLIENT-MAX-CPU-USAGE | 554.00 % | 1227.00 % | 218.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 264 MB | 5.5 GB | 114 MB |
+| CLIENT-ERROR-COUNT | 0 | 4,962 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 74 | 315 | 102 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 100,644 | 82,186 | 481,109 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 442,860 | 8,179,180 | 20,434,060 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 2.7 GB | 7.3 GB | 3.0 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: could not connect to a server" (count 3,301)
+"zk: connection closed" (count 1,661)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+##### Write 3-million keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
+
+- Google Cloud Compute Engine
+- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
+- Ubuntu 16.10
+- etcd v3.1 (Go 1.7.4)
+- Zookeeper r3.4.9
+ - Java 8
+ - javac 1.8.0_121
+ - Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+ - Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+- Consul v0.7.3 (Go 1.7.4)
+
+
+```
++----------------------------------------+-------------------+------------------------+-----------------------+
+| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
++----------------------------------------+-------------------+------------------------+-----------------------+
+| TOTAL-SECONDS | 141.1728 sec | 4134.1565 sec | 2979.6229 sec |
+| TOTAL-REQUEST-NUMBER | 3,000,000 | 3,000,000 | 3,000,000 |
+| MAX-THROUGHPUT | 32,215 req/sec | 38,259 req/sec | 15,784 req/sec |
+| AVG-THROUGHPUT | 21,250 req/sec | 465 req/sec | 1,006 req/sec |
+| MIN-THROUGHPUT | 9,081 req/sec | 0 req/sec | 0 req/sec |
+| FASTEST-LATENCY | 3.6479 ms | 1.8912 ms | 10.3322 ms |
+| AVG-LATENCY | 32.9036 ms | 28.5018 ms | 496.5874 ms |
+| SLOWEST-LATENCY | 1030.3392 ms | 4729.8104 ms | 34484.1252 ms |
+| Latency p10 | 10.882650 ms | 5.694308 ms | 35.045139 ms |
+| Latency p25 | 13.005974 ms | 6.357600 ms | 44.711879 ms |
+| Latency p50 | 18.743999 ms | 7.379354 ms | 66.739638 ms |
+| Latency p75 | 31.054943 ms | 8.886502 ms | 116.150396 ms |
+| Latency p90 | 96.027241 ms | 11.474394 ms | 540.305996 ms |
+| Latency p95 | 123.844111 ms | 14.391699 ms | 1209.603980 ms |
+| Latency p99 | 148.837786 ms | 722.847010 ms | 11957.052613 ms |
+| Latency p99.9 | 162.994644 ms | 2457.522611 ms | 26068.610794 ms |
+| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 15 GB | 26 GB | 102 GB |
+| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 12 GB | 24 GB | 98 GB |
+| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 832 MB | 978 MB | 688 MB |
+| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 4.3 GB | 3.3 GB | 4.4 GB |
+| SERVER-MAX-CPU-USAGE | 421.00 % | 752.33 % | 410.67 % |
+| SERVER-MAX-MEMORY-USAGE | 2.8 GB | 7.1 GB | 17 GB |
+| CLIENT-MAX-CPU-USAGE | 442.00 % | 376.00 % | 217.00 % |
+| CLIENT-MAX-MEMORY-USAGE | 265 MB | 1.9 GB | 174 MB |
+| CLIENT-ERROR-COUNT | 0 | 1,076,632 | 0 |
+| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 14 | 309 | 94,864 |
+| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
+| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 333,196 | 360,314 | 3,689,221 |
+| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 1,604,172 | 67,295,610 | 794,919,246 |
+| SERVER-AVG-DATA-SIZE-ON-DISK | 6.5 GB | 27 GB | 8.2 GB |
++----------------------------------------+-------------------+------------------------+-----------------------+
+
+
+zookeeper errors:
+"zk: connection closed" (count 6,678)
+"zk: could not connect to a server" (count 1,069,954)
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/control/util_math.go b/util_math.go
similarity index 82%
rename from control/util_math.go
rename to util_math.go
index 0da7a63f..6c7c477c 100644
--- a/control/util_math.go
+++ b/util_math.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import "time"
@@ -27,7 +27,7 @@ func max(n1, n2 int64) int64 {
return n2
}
-func assignRequest(ranges []int, total int) (rs []int) {
+func assignRequest(ranges []int64, total int64) (rs []int64) {
reqEach := int(float64(total) / float64(len(ranges)))
// truncate 10000th digits
if reqEach > 10000 {
@@ -38,14 +38,14 @@ func assignRequest(ranges []int, total int) (rs []int) {
reqEach = (reqEach / 1000) * 1000
}
- curSum := 0
- rs = make([]int, len(ranges))
+ curSum := int64(0)
+ rs = make([]int64, len(ranges))
for i := range ranges {
if i < len(ranges)-1 {
- rs[i] = reqEach
- curSum += reqEach
+ rs[i] = int64(reqEach)
+ curSum += int64(reqEach)
} else {
- rs[i] = total - curSum
+ rs[i] = int64(total) - curSum
}
}
return
diff --git a/control/util_math_test.go b/util_math_test.go
similarity index 81%
rename from control/util_math_test.go
rename to util_math_test.go
index 623e16a6..f745dedb 100644
--- a/control/util_math_test.go
+++ b/util_math_test.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"reflect"
@@ -20,15 +20,15 @@ import (
)
func Test_assignRequest(t *testing.T) {
- ranges := []int{1, 10, 50, 100, 300, 500, 700, 1000}
- total := 1000000
+ ranges := []int64{1, 10, 50, 100, 300, 500, 700, 1000}
+ total := int64(1000000)
rs := assignRequest(ranges, total)
- expected := []int{120000, 120000, 120000, 120000, 120000, 120000, 120000, 160000}
+ expected := []int64{120000, 120000, 120000, 120000, 120000, 120000, 120000, 160000}
if !reflect.DeepEqual(rs, expected) {
t.Fatalf("expected %+v, got %+v", expected, rs)
}
- cur := 0
+ cur := int64(0)
for _, v := range expected {
cur += v
}
diff --git a/control/util_os.go b/util_os.go
similarity index 99%
rename from control/util_os.go
rename to util_os.go
index 4ebe4de8..08e99a37 100644
--- a/control/util_os.go
+++ b/util_os.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"io"
diff --git a/control/util_random_key.go b/util_random_key.go
similarity index 85%
rename from control/util_random_key.go
rename to util_random_key.go
index 516b05ba..3a35fd6a 100644
--- a/control/util_random_key.go
+++ b/util_random_key.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
import (
"crypto/rand"
@@ -24,20 +24,20 @@ import (
)
// sequentialKey returns '00012' when size is 5 and num is 12.
-func sequentialKey(size, num int) string {
+func sequentialKey(size, num int64) string {
txt := fmt.Sprintf("%d", num)
- if len(txt) > size {
+ if len(txt) > int(size) {
return txt
}
- delta := size - len(txt)
+ delta := int(size) - len(txt)
return strings.Repeat("0", delta) + txt
}
-func sameKey(size int) string {
- return strings.Repeat("a", size)
+func sameKey(size int64) string {
+ return strings.Repeat("a", int(size))
}
-func randBytes(bytesN int) []byte {
+func randBytes(bytesN int64) []byte {
const (
letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
letterIdxBits = 6 // 6 bits to represent a letter index
@@ -70,9 +70,9 @@ func mustRandBytes(n int) []byte {
return rb
}
-func multiRandStrings(keyN, sliceN int) []string {
+func multiRandStrings(keyN, sliceN int64) []string {
m := make(map[string]struct{})
- for len(m) != sliceN {
+ for int64(len(m)) != sliceN {
m[string(randBytes(keyN))] = struct{}{}
}
rs := make([]string, sliceN)
diff --git a/control/util_sort.go b/util_sort.go
similarity index 97%
rename from control/util_sort.go
rename to util_sort.go
index 54dde9a3..2fb3e43e 100644
--- a/control/util_sort.go
+++ b/util_sort.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package control
+package dbtester
type int64Slice []int64