summaryrefslogtreecommitdiff
path: root/bench
diff options
context:
space:
mode:
authorPaul Joseph Davis <davisp@apache.org>2009-11-26 22:45:09 +0000
committerPaul Joseph Davis <davisp@apache.org>2009-11-26 22:45:09 +0000
commit0adab205f7a901cef89c7d67bc05cb5bd091dec8 (patch)
tree9ffc860b2d901aa7dddb991b1ad4bfcf08b24f5b /bench
parent4a4077c5bd4df358fdbf6184750b4d6f8d8d27df (diff)
Updated the benchmarks to use the new cURL adapter.
Moved the bench directory into the tests directory. Refactored the benchmarks to reuse more of the code from the JavaScript CLI test runner. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@884716 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'bench')
-rw-r--r--bench/Makefile.am16
-rw-r--r--bench/bench_lib.js241
-rwxr-xr-xbench/benchbulk.sh69
-rw-r--r--bench/benches.js62
-rwxr-xr-xbench/runner.sh18
5 files changed, 0 insertions, 406 deletions
diff --git a/bench/Makefile.am b/bench/Makefile.am
deleted file mode 100644
index c98f4e01..00000000
--- a/bench/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-## 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.
-
-EXTRA_DIST = \
- bench_lib.js \
- runner.sh \
- benches.js
diff --git a/bench/bench_lib.js b/bench/bench_lib.js
deleted file mode 100644
index be7abcd9..00000000
--- a/bench/bench_lib.js
+++ /dev/null
@@ -1,241 +0,0 @@
-// 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.
-
-// some monkeypatches
-var JSON = {
- parse : function(string) {
- return eval('('+string+')');
- },
- stringify : function(obj) {
- return toJSON(obj||null);
- }
-};
-
-RegExp.escape = function(text) {
- if (!arguments.callee.sRE) {
- var specials = [
- '/', '.', '*', '+', '?', '|',
- '(', ')', '[', ']', '{', '}', '\\'
- ];
- arguments.callee.sRE = new RegExp(
- '(\\' + specials.join('|\\') + ')', 'g'
- );
- }
- return text.replace(arguments.callee.sRE, '\\$1');
-}
-
-// This is a JS wrapper for the curl function made available in couch_js.c,
-// it should be used in other JavaScripts that would like to make HTTP calls.
-
-var HTTP = (function() {
- function parseCurl(string) {
- var parts = string.split(/\r\n\r\n/);
- var body = parts.pop();
- var header = parts.pop();
- var headers = header.split(/\n/);
-
- var status = /HTTP\/1.\d (\d*)/.exec(header)[1];
- return {
- responseText: body,
- status: parseInt(status),
- getResponseHeader: function(key) {
- var keymatcher = new RegExp(RegExp.escape(key), "i");
- for (var i in headers) {
- var h = headers[i];
- if (keymatcher.test(h)) {
- var value = h.substr(key.length+2);
- return value.replace(/^\s+|\s+$/g,"");
- }
- }
- return "";
- }
- }
- };
- return {
- GET : function(url, body, headers) {
- var st, urx = url, hx = (headers || null);
- st = gethttp(urx, hx);
- return parseCurl(st);
- },
- HEAD : function(url, body, headers) {
- var st, urx = url, hx = (headers || null);
- st = headhttp(urx, hx);
- return parseCurl(st);
- },
- DELETE : function(url, body, headers) {
- var st, urx = url, hx = (headers || null);
- st = delhttp(urx, hx);
- return parseCurl(st);
- },
- MOVE : function(url, body, headers) {
- var st, urx = url, hx = (headers || null);
- st = movehttp(urx, hx);
- return parseCurl(st);
- },
- COPY : function(url, body, headers) {
- var st, urx = url, hx = (headers || null);
- st = copyhttp(urx, hx);
- return parseCurl(st);
- },
- POST : function(url, body, headers) {
- var st, urx = url, bx = (body || ""), hx = (headers || {});
- hx['Content-Type'] = hx['Content-Type'] || "application/json";
- st = posthttp(urx, bx, hx);
- return parseCurl(st);
- },
- PUT : function(url, body, headers) {
- var st, urx = url, bx = (body || ""), hx = (headers || {});
- hx['Content-Type'] = hx['Content-Type'] || "application/json";
- st = puthttp(urx, bx, hx);
- return parseCurl(st);
- }
- };
-})();
-
-// Monkeypatches to CouchDB client for use of curl.
-
-CouchDB.host = (typeof window == 'undefined' || !window) ? "127.0.0.1:5984" : window;
-
-CouchDB.request = function(method, uri, options) {
- var full_uri = "http://" + CouchDB.host + uri;
- options = options || {};
- var response = HTTP[method](full_uri, options.body, options.headers);
- return response;
-}
-
-
-function toJSON(val) {
- if (typeof(val) == "undefined") {
- throw {error:"bad_value", reason:"Cannot encode 'undefined' value as JSON"};
- }
- var subs = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f',
- '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
- if (typeof(val) == "xml") { // E4X support
- val = val.toXMLString();
- }
- return {
- "Array": function(v) {
- var buf = [];
- for (var i = 0; i < v.length; i++) {
- buf.push(toJSON(v[i]));
- }
- return "[" + buf.join(",") + "]";
- },
- "Boolean": function(v) {
- return v.toString();
- },
- "Date": function(v) {
- var f = function(n) { return n < 10 ? '0' + n : n }
- return '"' + v.getUTCFullYear() + '-' +
- f(v.getUTCMonth() + 1) + '-' +
- f(v.getUTCDate()) + 'T' +
- f(v.getUTCHours()) + ':' +
- f(v.getUTCMinutes()) + ':' +
- f(v.getUTCSeconds()) + 'Z"';
- },
- "Number": function(v) {
- return isFinite(v) ? v.toString() : "null";
- },
- "Object": function(v) {
- if (v === null) return "null";
- var buf = [];
- for (var k in v) {
- if (!v.hasOwnProperty(k) || typeof(k) !== "string" || v[k] === undefined) {
- continue;
- }
- buf.push(toJSON(k, val) + ": " + toJSON(v[k]));
- }
- return "{" + buf.join(",") + "}";
- },
- "String": function(v) {
- if (/["\\\x00-\x1f]/.test(v)) {
- v = v.replace(/([\x00-\x1f\\"])/g, function(a, b) {
- var c = subs[b];
- if (c) return c;
- c = b.charCodeAt();
- return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
- });
- }
- return '"' + v + '"';
- }
- }[val != null ? val.constructor.name : "Object"](val);
-}
-
-
-
-// *************** Test Framework Console Adapter ****************** //
-
-var p = print;
-var numFailures = 0;
-
-function runAllBenchmarksConsole(dur, commit) {
- var numBenches = 0;
- p("Bench Duration: "+dur+"ms\n");
- for (var b in allBenches) {
- p(b);
- numBenches += 1;
- var benchFun = allBenches[b];
- runBenchConsole(benchFun, dur, commit);
- }
- // p("Results: "+numFailures.toString() + " failures in "+numTests+" tests.")
-};
-
-function runBenchConsole(benchFun, duration, commit) {
- var db = new CouchDB("bench_suite_db", {"X-Couch-Full-Commit":commit});
- try {db.createDb();} catch(e) {};
-
- var acc = {
- docs : 0,
- };
- var loops = 0;
- var start = new Date().getTime();
- try {
- while(new Date().getTime() < start+duration) {
- acc = benchFun(db, acc);
- loops++;
- }
- p("OK");
- } catch(e) {
- p("ERROR");
- p("Exception raised: "+e.toString());
- p("Backtrace: "+e.stack);
- }
- var duration = new Date().getTime() - start;
- p(loops+" loops");
- p(acc.docs+" docs");
- p((acc.docs/(duration/1000))+" docs/sec\n");
-};
-
-
-// Use T to perform a test that returns false on failure and if the test fails,
-// display the line that failed.
-// Example:
-// T(MyValue==1);
-function T(arg1, arg2) {
- if (!arg1) {
- p("Assertion failed: "+(arg2 != null ? arg2 : arg1).toString());
- numFailures += 1
- }
-}
-
-p("CouchDB Benchmarks");
-p("Host: "+CouchDB.host);
-
-try {
- p("Version: "+CouchDB.getVersion());
- runAllBenchmarksConsole(10000,"false");
-} catch (e) {
- p("error");
- p(e.toString());
-}
-
-p("Finished");
diff --git a/bench/benchbulk.sh b/bench/benchbulk.sh
deleted file mode 100755
index 22804c64..00000000
--- a/bench/benchbulk.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh -e
-# 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.
-#
-
-# usage: time benchbulk.sh
-# it takes about 30 seconds to run on my old MacBook with bulksize 1000
-
-BULKSIZE=100
-DOCSIZE=10
-INSERTS=10
-ROUNDS=10
-DBURL="http://127.0.0.1:5984/benchbulk"
-POSTURL="$DBURL/_bulk_docs"
-
-function make_bulk_docs() {
- ROW=0
- SIZE=$(($1-1))
- START=$2
- BODYSIZE=$3
-
- BODY=$(printf "%0${BODYSIZE}d")
-
- echo '{"docs":['
- while [ $ROW -lt $SIZE ]; do
- printf '{"_id":"%020d", "body":"'$BODY'"},' $(($ROW + $START))
- let ROW=ROW+1
- done
- printf '{"_id":"%020d", "body":"'$BODY'"}' $(($ROW + $START))
- echo ']}'
-}
-
-echo "Making $INSERTS bulk inserts of $BULKSIZE docs each"
-
-echo "Attempt to delete db at $DBURL"
-curl -X DELETE $DBURL -w\\n
-
-echo "Attempt to create db at $DBURL"
-curl -X PUT $DBURL -w\\n
-
-echo "Running $ROUNDS rounds of $INSERTS concurrent inserts to $POSTURL"
-RUN=0
-while [ $RUN -lt $ROUNDS ]; do
-
- POSTS=0
- while [ $POSTS -lt $INSERTS ]; do
- STARTKEY=$[ POSTS * BULKSIZE + RUN * BULKSIZE * INSERTS ]
- echo "startkey $STARTKEY bulksize $BULKSIZE"
- DOCS=$(make_bulk_docs $BULKSIZE $STARTKEY $DOCSIZE)
- # echo $DOCS
- echo $DOCS | curl -T - -X POST $POSTURL -w%{http_code}\ %{time_total}\ sec\\n >/dev/null 2>&1 &
- let POSTS=POSTS+1
- done
-
- echo "waiting"
- wait
- let RUN=RUN+1
-done
-
-curl $DBURL -w\\n
diff --git a/bench/benches.js b/bench/benches.js
deleted file mode 100644
index 2e0a92db..00000000
--- a/bench/benches.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// 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.
-
-
-var allBenches = {};
-
-allBenches.single_doc_insert = function(db, acc) {
- db.save({"foo":"bar"});
- acc.docs++;
- return acc;
-};
-
-allBenches.batch_ok_doc_insert = function(db, acc) {
- db.save({"foo":"bar"}, {"batch":"ok"});
- acc.docs++;
- return acc;
-};
-
-function makeDocs(n) {
- docs = [];
- for (var i=0; i < n; i++) {
- docs.push({"foo":"bar"});
- };
- return docs;
-};
-
-allBenches.bulk_doc_100 = function(db, acc) {
- var docs = makeDocs(100);
- db.bulkSave(docs);
- acc.docs += 100;
- return acc;
-};
-
-allBenches.bulk_doc_1000 = function(db, acc) {
- var docs = makeDocs(1000);
- db.bulkSave(docs);
- acc.docs += 1000;
- return acc;
-};
-
-allBenches.bulk_doc_5000 = function(db, acc) {
- var docs = makeDocs(5000);
- db.bulkSave(docs);
- acc.docs += 5000;
- return acc;
-};
-
-allBenches.bulk_doc_10000 = function(db, acc) {
- var docs = makeDocs(10000);
- db.bulkSave(docs);
- acc.docs += 10000;
- return acc;
-}; \ No newline at end of file
diff --git a/bench/runner.sh b/bench/runner.sh
deleted file mode 100755
index bdaffab5..00000000
--- a/bench/runner.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh -e
-
-# 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.
-
-cat ../share/www/script/couch.js \
- benches.js \
- bench_lib.js \
- | ../src/couchdb/couchjs -