diff --git a/cmd/rqbench/README.md b/cmd/rqbench/README.md index 4462d179..2bc91830 100644 --- a/cmd/rqbench/README.md +++ b/cmd/rqbench/README.md @@ -29,9 +29,14 @@ Usage: rqbench [arguments] -x Use explicit transaction per request ``` - ## Example + ## Examples ```sh +$ rqbench -b 10 -m 100 -n 1 -o 'CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)' 'INSERT INTO foo(name) VALUES("fiona")' +Test target: http://localhost:4001/db/execute +Total duration: 10.094572ms +Requests/sec: 99.06 +Statements/sec: 990.63 $ rqbench -b 10 -m 10 -n 100 'INSERT INTO foo(name) VALUES("fiona")' -a localhost:4001 Test target: http://localhost:4001/db/execute 10 requests completed in 16.130142ms diff --git a/cmd/rqbench/main.go b/cmd/rqbench/main.go index bff778aa..02a68f76 100644 --- a/cmd/rqbench/main.go +++ b/cmd/rqbench/main.go @@ -17,6 +17,7 @@ var modPrint int var tx bool var tp string var path string +var oneshot string const name = `rqbench` const desc = `rqbench is a simple load testing utility for rqlite.` @@ -29,6 +30,7 @@ func init() { flag.BoolVar(&tx, "x", false, "Use explicit transaction per request") flag.StringVar(&tp, "t", "http", "Transport to use") flag.StringVar(&path, "p", "/db/execute", "Endpoint to use") + flag.StringVar(&oneshot, "o", "", "One-shot execute statement to preload") flag.Usage = func() { fmt.Fprintf(os.Stderr, "\n%s\n\n", desc) fmt.Fprintf(os.Stderr, "Usage: %s [arguments] \n", name) @@ -50,6 +52,19 @@ func main() { fmt.Fprintf(os.Stderr, "not a valid transport: %s\n", tp) } + if oneshot != "" { + o := NewHTTPTester(addr, "/db/execute") + if err := o.Prepare(oneshot, 1, false); err != nil { + fmt.Println("failed to prepare oneshot:", err.Error()) + os.Exit(1) + } + _, err := run(o, 1) + if err != nil { + fmt.Println("failed to execute oneshot:", err.Error()) + os.Exit(1) + } + } + tester := NewHTTPTester(addr, path) if err := tester.Prepare(stmt, batchSz, tx); err != nil { fmt.Println("failed to prepare test:", err.Error())