Browse Source

Merge https://github.com/TechEmpower/FrameworkBenchmarks

Mikael Lindberg 11 years ago
parent
commit
4866ea09ca

BIN
UrWeb/bench.exe


+ 1 - 1
UrWeb/bench.ur

@@ -56,7 +56,7 @@ fun queries oqs =
 fun updates oqs =
 fun updates oqs =
   rows <- List.tabulateM (fn _ => n <- rand; world_find (clamp n)) (parseQueries oqs);
   rows <- List.tabulateM (fn _ => n <- rand; world_find (clamp n)) (parseQueries oqs);
   rows' <- List.mapM (fn r => n <- rand; return (r -- #RandomNumber ++ {RandomNumber = clamp n})) rows;
   rows' <- List.mapM (fn r => n <- rand; return (r -- #RandomNumber ++ {RandomNumber = clamp n})) rows;
-  u <- List.mapM (fn r => dml (UPDATE world SET RandomNumber = {[r.RandomNumber]} WHERE Id = {[r.Id]})) rows';
+  List.app (fn r => dml (UPDATE world SET RandomNumber = {[r.RandomNumber]} WHERE Id = {[r.Id]})) rows';
   returnJson rows'
   returnJson rows'
 
 
 table fortune : {Id : int, Message : string} PRIMARY KEY Id
 table fortune : {Id : int, Message : string} PRIMARY KEY Id

+ 1 - 1
UrWeb/setup.py

@@ -10,7 +10,7 @@ def start(args, logfile, errfile):
                 'password=benchmarkdbpass '
                 'password=benchmarkdbpass '
                 'host=' + args.database_host)
                 'host=' + args.database_host)
   env = {'URWEB_PQ_CON': conn_string}
   env = {'URWEB_PQ_CON': conn_string}
-  subprocess.Popen("./bench.exe -t " + threads,
+  subprocess.Popen("./bench.exe -k -t " + threads,
                    env=env, shell=True, cwd="UrWeb", stderr=errfile, stdout=logfile)
                    env=env, shell=True, cwd="UrWeb", stderr=errfile, stdout=logfile)
   return 0
   return 0
 
 

+ 2 - 1
beego/benchmark_config

@@ -17,7 +17,8 @@
       "database_os": "Linux",
       "database_os": "Linux",
       "display_name": "beego",
       "display_name": "beego",
       "notes": "",
       "notes": "",
-      "versus": "go"
+      "versus": "go",
+      "skip": "true"
     }
     }
   }]
   }]
 }
 }

+ 1 - 1
config/benchmark_profile

@@ -1,7 +1,7 @@
 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
 export RESIN_HOME=~/FrameworkBenchmarks/installs/resin-4.0.36
 export RESIN_HOME=~/FrameworkBenchmarks/installs/resin-4.0.36
 export GRAILS_HOME=~/FrameworkBenchmarks/installs/grails-2.3.3
 export GRAILS_HOME=~/FrameworkBenchmarks/installs/grails-2.3.3
-export VERTX_HOME=~/FrameworkBenchmarks/installs/vert.x-2.1M1
+export VERTX_HOME=~/FrameworkBenchmarks/installs/vert.x-2.1M2
 export GOROOT=~/FrameworkBenchmarks/installs/go
 export GOROOT=~/FrameworkBenchmarks/installs/go
 export GOPATH=~/FrameworkBenchmarks/go:~/FrameworkBenchmarks/webgo:~/FrameworkBenchmarks/revel
 export GOPATH=~/FrameworkBenchmarks/go:~/FrameworkBenchmarks/webgo:~/FrameworkBenchmarks/revel
 export TOMCAT_HOME=~/FrameworkBenchmarks/installs/apache-tomcat-7.0.35
 export TOMCAT_HOME=~/FrameworkBenchmarks/installs/apache-tomcat-7.0.35

+ 8 - 8
dart-start/README.md

@@ -4,14 +4,14 @@ This test adds [Start](https://github.com/lvivski/start), a Sinatra inspired web
 
 
 ## Versions
 ## Versions
 
 
-* [Dart SDK version 0.8.1.2_r28355](https://launchpad.net/~hachre/+archive/dart)
-* [Dart args version 0.8.1](http://pub.dartlang.org/packages/args)
-* [Dart crypto version 0.8.1](http://pub.dartlang.org/packages/crypto)
-* [Dart mustache version 0.1.5](http://pub.dartlang.org/packages/mustache)
-* [Dart mongo_dart version 0.1.30](http://pub.dartlang.org/packages/mongo_dart)
-* [Dart postgresql version 0.2.8](http://pub.dartlang.org/packages/postgresql)
-* [Dart start version 0.0.9+1](http://pub.dartlang.org/packages/start)
-* [Dart yaml version 0.8.1](http://pub.dartlang.org/packages/yaml)
+* [Dart SDK version 1.0.0.7_r30338](https://launchpad.net/~hachre/+archive/dart)
+* [Dart args version 0.9.0](http://pub.dartlang.org/packages/args)
+* [Dart crypto version 0.9.0](http://pub.dartlang.org/packages/crypto)
+* [Dart mustache version 0.1.6](http://pub.dartlang.org/packages/mustache)
+* [Dart mongo_dart version 0.1.35](http://pub.dartlang.org/packages/mongo_dart)
+* [Dart postgresql version 0.2.12](http://pub.dartlang.org/packages/postgresql)
+* [Dart start version 0.1.1](http://pub.dartlang.org/packages/start)
+* [Dart yaml version 0.9.0](http://pub.dartlang.org/packages/yaml)
 
 
 ## Test URLs
 ## Test URLs
 
 

+ 9 - 8
dart-start/pubspec.yaml

@@ -1,11 +1,12 @@
 name: DartStartBenchmark
 name: DartStartBenchmark
 description: A benchmark of Dart Start, a Sinatra inspired web framework
 description: A benchmark of Dart Start, a Sinatra inspired web framework
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
 dependencies:
 dependencies:
-  args: 0.8.1
-  crypto: 0.8.1
-  mongo_dart: 0.1.30
-  mustache: 0.1.5
-  postgresql: 0.2.8
-  start: 0.0.9+1
-  yaml: 0.8.1
-
+  args: 0.9.0
+  crypto: 0.9.0
+  mongo_dart: 0.1.35
+  mustache: 0.1.6
+  postgresql: 0.2.12
+  start: 0.1.1
+  yaml: 0.9.0

+ 24 - 24
dart-start/server.dart

@@ -1,7 +1,7 @@
 import "dart:core";
 import "dart:core";
 import "dart:io";
 import "dart:io";
 import 'dart:async' show Future;
 import 'dart:async' show Future;
-import 'dart:json' as json;
+import 'dart:convert';
 import 'dart:math' show Random;
 import 'dart:math' show Random;
 import "package:start/start.dart";
 import "package:start/start.dart";
 import "package:args/args.dart";
 import "package:args/args.dart";
@@ -53,13 +53,13 @@ class World {
   toJson() => { "id": id, "randomnumber": randomnumber };
   toJson() => { "id": id, "randomnumber": randomnumber };
 }
 }
 
 
-main() {
+main(List<String> args) {
   var parser = new ArgParser();
   var parser = new ArgParser();
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
   parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
   
   
-  var arguments = parser.parse(new Options().arguments);
+  var arguments = parser.parse(args);
   
   
   Future.wait([
   Future.wait([
     new File("postgresql.yaml").readAsString().then((config){
     new File("postgresql.yaml").readAsString().then((config){
@@ -93,7 +93,7 @@ main() {
           };
           };
           
           
           _setJsonHeaders(request.response);
           _setJsonHeaders(request.response);
-          request.response.send(json.stringify(helloWorld));
+          request.response.send(JSON.encode(helloWorld));
         });
         });
         
         
         
         
@@ -103,7 +103,7 @@ main() {
           _setJsonHeaders(request.response);
           _setJsonHeaders(request.response);
           
           
           _query().then((data) {
           _query().then((data) {
-            request.response.send(json.stringify(data));
+            request.response.send(JSON.encode(data));
           });
           });
         });
         });
         
         
@@ -121,7 +121,7 @@ main() {
                   growable: false
                   growable: false
                 )
                 )
             )
             )
-            .then((response) => request.response.send(json.stringify(response)));
+            .then((response) => request.response.send(JSON.encode(response)));
         });
         });
         
         
         // Fortunes test
         // Fortunes test
@@ -129,7 +129,7 @@ main() {
           _setHtmlHeaders(request.response);
           _setHtmlHeaders(request.response);
           
           
           _connectionPool.connect().then((connection) {
           _connectionPool.connect().then((connection) {
-            return connection.query('SELECT "id", "message" FROM "Fortune";')
+            return connection.query('SELECT id, message FROM fortune;')
                 .map((row) => new Fortune(row[0], row[1]))
                 .map((row) => new Fortune(row[0], row[1]))
                 .toList()
                 .toList()
                 .whenComplete(() { connection.close(); });
                 .whenComplete(() { connection.close(); });
@@ -159,7 +159,7 @@ main() {
                   return _connectionPool.connect()
                   return _connectionPool.connect()
                       .then((connection) {
                       .then((connection) {
                         return connection.execute(
                         return connection.execute(
-                              'UPDATE "World" SET "randomnumber" = @randomnumber WHERE "id" = @id;',
+                              'UPDATE world SET randomnumber = @randomnumber WHERE id = @id;',
                               { 
                               { 
                                 'randomnumber': world.randomnumber,
                                 'randomnumber': world.randomnumber,
                                 'id': world.id 
                                 'id': world.id 
@@ -170,7 +170,7 @@ main() {
                       .then((_) => world);
                       .then((_) => world);
                 });
                 });
           }, growable: false))
           }, growable: false))
-          .then((worlds) => request.response.send(json.stringify(worlds)));
+          .then((worlds) => request.response.send(JSON.encode(worlds)));
         });
         });
         
         
         // Plain text test
         // Plain text test
@@ -186,8 +186,8 @@ main() {
             .then((_) {
             .then((_) {
               var collectionData = new List.generate(_WORLD_TABLE_SIZE, (index) {
               var collectionData = new List.generate(_WORLD_TABLE_SIZE, (index) {
                 return {
                 return {
-                  "id": index + 1,
-                  "randomnumber": _RANDOM.nextInt(_WORLD_TABLE_SIZE)
+                  "_id": index + 1,
+                  "randomNumber": _RANDOM.nextInt(_WORLD_TABLE_SIZE)
                 };
                 };
               });
               });
               return _worldCollection.insertAll(collectionData); 
               return _worldCollection.insertAll(collectionData); 
@@ -205,7 +205,7 @@ main() {
                 var hash = new MD5();
                 var hash = new MD5();
                 hash.add(_RANDOM.nextInt(_FORTUNE_TABLE_SIZE).toString().codeUnits);
                 hash.add(_RANDOM.nextInt(_FORTUNE_TABLE_SIZE).toString().codeUnits);
                 return {
                 return {
-                  "id": index + 1,
+                  "_id": index + 1,
                   "message": CryptoUtils.bytesToHex(hash.close())
                   "message": CryptoUtils.bytesToHex(hash.close())
                 };
                 };
               });
               });
@@ -224,8 +224,8 @@ main() {
 
 
           _mongoQuery().then((data) {
           _mongoQuery().then((data) {
             request.response.json({
             request.response.json({
-              "id": data["id"],
-              "randomnumber": data["randomnumber"]
+              "id": data["_id"],
+              "randomnumber": data["randomNumber"]
             });
             });
           });
           });
         });
         });
@@ -247,11 +247,11 @@ main() {
             .then((response) {
             .then((response) {
               var results = response.map((world) {
               var results = response.map((world) {
                 return {
                 return {
-                  "id": world["id"],
-                  "randomnumber": world["randomnumber"]
+                  "id": world["_id"],
+                  "randomnumber": world["randomNumber"]
                 };
                 };
               });
               });
-              request.response.send(json.stringify(results.toList()));
+              request.response.send(JSON.encode(results.toList()));
             });
             });
         });
         });
         
         
@@ -264,7 +264,7 @@ main() {
           Future.wait(new List.generate(queries, (index) {
           Future.wait(new List.generate(queries, (index) {
             return _mongoQuery()
             return _mongoQuery()
                 .then((world) {
                 .then((world) {
-                  world["randomnumber"] = _RANDOM.nextInt(_WORLD_TABLE_SIZE);
+                  world["randomNumber"] = _RANDOM.nextInt(_WORLD_TABLE_SIZE);
                   return _worldCollection.update( { "_id": world["_id"] }, world)
                   return _worldCollection.update( { "_id": world["_id"] }, world)
                       .then((_) => world);
                       .then((_) => world);
                 });
                 });
@@ -272,11 +272,11 @@ main() {
           .then((worlds) {
           .then((worlds) {
             var result = worlds.map((world) {
             var result = worlds.map((world) {
               return {
               return {
-                "id": world["id"],
-                "randomnumber": world["randomnumber"]
+                "id": world["_id"],
+                "randomNumber": world["randomNumber"]
               };
               };
             });
             });
-            request.response.send(json.stringify(result.toList()));
+            request.response.send(JSON.encode(result.toList()));
           });
           });
         });
         });
         
         
@@ -288,7 +288,7 @@ main() {
           
           
           _fortuneCollection.find().toList().then((fortunes) {
           _fortuneCollection.find().toList().then((fortunes) {
             fortunes = fortunes.map((fortune) {
             fortunes = fortunes.map((fortune) {
-              return new Fortune(fortune["id"], fortune["message"]);
+              return new Fortune(fortune["_id"], fortune["message"]);
             }).toList();
             }).toList();
             fortunes.add(new Fortune(0, 'Additional fortune added at request time.'));
             fortunes.add(new Fortune(0, 'Additional fortune added at request time.'));
             fortunes.sort();
             fortunes.sort();
@@ -342,7 +342,7 @@ _parseQueriesParam(param) {
 _query() {
 _query() {
   return _connectionPool.connect().then((connection) {
   return _connectionPool.connect().then((connection) {
     return connection
     return connection
-      .query('SELECT "id", "randomnumber" FROM "World" WHERE id = @id;', { 'id': _RANDOM.nextInt(_WORLD_TABLE_SIZE) + 1 })
+      .query('SELECT id, randomnumber FROM world WHERE id = @id;', { 'id': _RANDOM.nextInt(_WORLD_TABLE_SIZE) + 1 })
       .single
       .single
       .then((row) =>new World(row[0], row[1]))
       .then((row) =>new World(row[0], row[1]))
       .whenComplete(() {
       .whenComplete(() {
@@ -354,6 +354,6 @@ _query() {
 // runs a mongo query and returns a promise
 // runs a mongo query and returns a promise
 _mongoQuery() {
 _mongoQuery() {
   return _worldCollection.findOne({
   return _worldCollection.findOne({
-    "id": _RANDOM.nextInt(_WORLD_TABLE_SIZE) + 1
+    "_id": _RANDOM.nextInt(_WORLD_TABLE_SIZE) + 1
   });
   });
 }
 }

+ 1 - 1
dart-start/setup.py

@@ -10,7 +10,7 @@ def start(args, logfile, errfile):
     #
     #
     # install dart dependencies
     # install dart dependencies
     #
     #
-    subprocess.check_call('pub install', shell=True, cwd='dart-start', stderr=errfile, stdout=logfile)
+    subprocess.check_call('pub upgrade', shell=True, cwd='dart-start', stderr=errfile, stdout=logfile)
     #
     #
     # start dart servers
     # start dart servers
     #
     #

+ 7 - 7
dart-stream/README.md

@@ -4,13 +4,13 @@ This test adds [Stream](https://github.com/rikulo/stream), a lightweight Dart we
 
 
 ## Versions
 ## Versions
 
 
-* [Dart SDK version 0.8.1.2_r28355](https://launchpad.net/~hachre/+archive/dart)
-* [Dart args version 0.8.1](http://pub.dartlang.org/packages/args)
-* [Dart crypto version 0.8.1](http://pub.dartlang.org/packages/crypto)
-* [Dart mongo_dart version 0.1.30](http://pub.dartlang.org/packages/mongo_dart)
-* [Dart postgresql version 0.2.8](http://pub.dartlang.org/packages/postgresql)
-* [Dart stream version 0.8.4](http://pub.dartlang.org/packages/start)
-* [Dart yaml version 0.8.1](http://pub.dartlang.org/packages/yaml)
+* [Dart SDK version 1.0.0.3_r30188](https://launchpad.net/~hachre/+archive/dart)
+* [Dart args version 0.9.0](http://pub.dartlang.org/packages/args)
+* [Dart crypto version 0.9.0](http://pub.dartlang.org/packages/crypto)
+* [Dart mongo_dart version 0.1.35](http://pub.dartlang.org/packages/mongo_dart)
+* [Dart postgresql version 0.2.12](http://pub.dartlang.org/packages/postgresql)
+* [Dart stream version 1.0.0](http://pub.dartlang.org/packages/start)
+* [Dart yaml version 0.9.0](http://pub.dartlang.org/packages/yaml)
 
 
 ## Test URLs
 ## Test URLs
 
 

+ 9 - 6
dart-stream/pubspec.yaml

@@ -1,9 +1,12 @@
 name: DartStreamBenchmark
 name: DartStreamBenchmark
 description: A benchmark for Stream, a lightweight Dart web server
 description: A benchmark for Stream, a lightweight Dart web server
+environment:
+  sdk: '>=0.8.7'
 dependencies:
 dependencies:
-  args: 0.8.1
-  crypto: 0.8.1
-  mongo_dart: 0.1.30
-  postgresql: 0.2.8
-  stream: 0.8.4
-  yaml: 0.8.1
+  args: 0.9.0
+  crypto: 0.9.0
+  mongo_dart: 0.1.35
+  postgresql: 0.2.12
+  rikulo_commons: 1.0.0
+  stream: 1.0.0
+  yaml: 0.9.0

+ 16 - 14
dart-stream/server.dart

@@ -3,7 +3,7 @@ library stream_benchmark;
 import "dart:core";
 import "dart:core";
 import "dart:io";
 import "dart:io";
 import 'dart:async' show Future;
 import 'dart:async' show Future;
-import 'dart:json' as json;
+import 'dart:convert';
 import 'dart:math' show Random;
 import 'dart:math' show Random;
 import "package:stream/stream.dart";
 import "package:stream/stream.dart";
 import "package:args/args.dart";
 import "package:args/args.dart";
@@ -84,13 +84,15 @@ class World {
   toJson() => { "id": id, "randomNumber": randomnumber };
   toJson() => { "id": id, "randomNumber": randomnumber };
 }
 }
 
 
-main() {
+main(List<String> args) {
+  
   var parser = new ArgParser();
   var parser = new ArgParser();
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
   parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
   
   
-  var arguments = parser.parse(new Options().arguments);
+  var arguments = parser.parse(args);
+  
   Future.wait([
   Future.wait([
      new File("postgresql.yaml").readAsString().then((config){
      new File("postgresql.yaml").readAsString().then((config){
        _connectionPool = new pgpool.Pool(
        _connectionPool = new pgpool.Pool(
@@ -118,13 +120,13 @@ _jsonTest(HttpConnect connect) {
       "message": "Hello, World!"
       "message": "Hello, World!"
   };
   };
   
   
-  connect.response.write(json.stringify(helloWorld));
+  connect.response.write(JSON.encode(helloWorld));
 }
 }
 
 
 _dbTest(HttpConnect connect) {
 _dbTest(HttpConnect connect) {
   
   
   return _query().then((data) {
   return _query().then((data) {
-    connect.response.write(json.stringify(data));
+    connect.response.write(JSON.encode(data));
   });
   });
 }
 }
 
 
@@ -138,7 +140,7 @@ _queriesTest(HttpConnect connect) {
             growable: false
             growable: false
         )
         )
     )
     )
-    .then((response) => connect.response.write(json.stringify(response)));
+    .then((response) => connect.response.write(JSON.encode(response)));
 }
 }
 
 
 _updatesTest(HttpConnect connect) {
 _updatesTest(HttpConnect connect) {
@@ -151,7 +153,7 @@ _updatesTest(HttpConnect connect) {
             return _connectionPool.connect()
             return _connectionPool.connect()
               .then((connection) {
               .then((connection) {
                 return connection.execute(
                 return connection.execute(
-                      'UPDATE "World" SET "randomnumber" = @randomnumber WHERE "id" = @id;',
+                      'UPDATE world SET randomnumber = @randomnumber WHERE id = @id;',
                       { 
                       { 
                         'randomnumber': world.randomnumber,
                         'randomnumber': world.randomnumber,
                         'id': world.id 
                         'id': world.id 
@@ -162,13 +164,13 @@ _updatesTest(HttpConnect connect) {
                 .then((_) => world);
                 .then((_) => world);
           });
           });
     }, growable: false))
     }, growable: false))
-    .then((worlds) => connect.response.write(json.stringify(worlds)));
+    .then((worlds) => connect.response.write(JSON.encode(worlds)));
 }
 }
 
 
 _fortunesTest(HttpConnect connect) {
 _fortunesTest(HttpConnect connect) {
   
   
   return _connectionPool.connect().then((connection) {
   return _connectionPool.connect().then((connection) {
-    return connection.query('SELECT "id", "message" FROM "Fortune";')
+    return connection.query('SELECT id, message FROM fortune;')
         .map((row) => new Fortune(row[0], row[1]))
         .map((row) => new Fortune(row[0], row[1]))
           .toList()
           .toList()
             .whenComplete(() { connection.close(); });
             .whenComplete(() { connection.close(); });
@@ -187,7 +189,7 @@ _plaintextTest(HttpConnect connect) {
 _dbMongoTest(HttpConnect connect) {
 _dbMongoTest(HttpConnect connect) {
   
   
   return _mongoQuery().then((data) {
   return _mongoQuery().then((data) {
-    connect.response.write(json.stringify({
+    connect.response.write(JSON.encode({
       "id": data["_id"],
       "id": data["_id"],
       "randomNumber": data["randomNumber"]
       "randomNumber": data["randomNumber"]
     }));
     }));
@@ -211,7 +213,7 @@ _queriesMongoTest(HttpConnect connect) {
           "randomNumber": world["randomNumber"]
           "randomNumber": world["randomNumber"]
         };
         };
       });
       });
-      connect.response.write(json.stringify(results.toList()));
+      connect.response.write(JSON.encode(results.toList()));
     });
     });
 }
 }
 
 
@@ -233,7 +235,7 @@ _updatesMongoTest(HttpConnect connect) {
           "randomNumber": world["randomNumber"]
           "randomNumber": world["randomNumber"]
         };
         };
       });
       });
-      connect.response.write(json.stringify(result.toList()));
+      connect.response.write(JSON.encode(result.toList()));
     });
     });
 }
 }
 
 
@@ -282,14 +284,14 @@ _htmlHeadersFilter(HttpConnect connect, Future chain(HttpConnect conn)) {
 
 
 // parse queries param
 // parse queries param
 _parseQueriesParam(param) {
 _parseQueriesParam(param) {
-  return param.isEmpty ? 1 : int.parse(param, radix: 10, onError: (_) => 1).clamp(1, 500);
+  return (param == null || param.isEmpty) ? 1 : int.parse(param, radix: 10, onError: (_) => 1).clamp(1, 500);
 }
 }
 
 
 // runs a query and returns a promise
 // runs a query and returns a promise
 _query() {
 _query() {
   return _connectionPool.connect().then((connection) {
   return _connectionPool.connect().then((connection) {
     return connection
     return connection
-      .query('SELECT "id", "randomnumber" FROM "World" WHERE id = @id;', { 'id': _RANDOM.nextInt(_WORLD_TABLE_SIZE) + 1 })
+      .query('SELECT id, randomnumber FROM world WHERE id = @id;', { 'id': _RANDOM.nextInt(_WORLD_TABLE_SIZE) + 1 })
       .single
       .single
       .then((row) =>new World(row[0], row[1]))
       .then((row) =>new World(row[0], row[1]))
       .whenComplete(() {
       .whenComplete(() {

+ 1 - 1
dart-stream/setup.py

@@ -10,7 +10,7 @@ def start(args, logfile, errfile):
     #
     #
     # install dart dependencies
     # install dart dependencies
     #
     #
-    subprocess.check_call('pub install', shell=True, cwd='dart-stream', stderr=errfile, stdout=logfile)
+    subprocess.check_call('pub upgrade', shell=True, cwd='dart-stream', stderr=errfile, stdout=logfile)
     #
     #
     # start dart servers
     # start dart servers
     #
     #

+ 6 - 6
dart/README.md

@@ -4,12 +4,12 @@ This is the dart portion of a [benchmarking test suite](../) comparing a variety
 
 
 ## Versions
 ## Versions
 
 
-* [Dart SDK version 0.5.13.1_r23552](http://www.dartlang.org/)
-* [Dart args version 0.5.9](http://pub.dartlang.org/packages/args)
-* [Dart crypto version 0.5.13](http://pub.dartlang.org/packages/crypto)
-* [Dart mustache version 0.1.5](http://pub.dartlang.org/packages/mustache)
-* [Dart postgresql version 0.2.7](http://pub.dartlang.org/packages/postgresql)
-* [Dart yaml version 0.5.7](http://pub.dartlang.org/packages/yaml)
+* [Dart SDK version 1.0.0.7_r30338](http://www.dartlang.org/)
+* [Dart args version 0.9.0](http://pub.dartlang.org/packages/args)
+* [Dart crypto version 0.9.0](http://pub.dartlang.org/packages/crypto)
+* [Dart mustache version 0.1.6](http://pub.dartlang.org/packages/mustache)
+* [Dart postgresql version 0.2.12](http://pub.dartlang.org/packages/postgresql)
+* [Dart yaml version 0.9.0](http://pub.dartlang.org/packages/yaml)
 
 
 ## Test URLs
 ## Test URLs
 
 

+ 2 - 0
dart/pubspec.yaml

@@ -1,5 +1,7 @@
 name: dartbenchmark
 name: dartbenchmark
 description: A benchmark of dart
 description: A benchmark of dart
+environment:
+  sdk: '>=0.8.10+6 <2.0.0'
 dependencies:
 dependencies:
   args: 0.9.0
   args: 0.9.0
   crypto: 0.9.0
   crypto: 0.9.0

+ 1 - 1
dart/server.dart

@@ -12,7 +12,7 @@ import 'package:yaml/yaml.dart' as yaml;
 /// address and port for incoming connections is configurable via command line
 /// address and port for incoming connections is configurable via command line
 /// arguments, as is the number of database connections to be maintained in the
 /// arguments, as is the number of database connections to be maintained in the
 /// connection pool.
 /// connection pool.
-main(args) {
+main(List<String> args) {
   var parser = new ArgParser();
   var parser = new ArgParser();
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');

+ 1 - 1
dart/setup.py

@@ -9,7 +9,7 @@ def start(args, logfile, errfile):
     #
     #
     # install dart dependencies
     # install dart dependencies
     #
     #
-    subprocess.check_call('pub install', shell=True, cwd='dart', stderr=errfile, stdout=logfile)
+    subprocess.check_call('pub upgrade', shell=True, cwd='dart', stderr=errfile, stdout=logfile)
     #
     #
     # start dart servers
     # start dart servers
     #
     #

+ 2 - 2
netty/README.md

@@ -8,7 +8,7 @@ This is the netty portion of a [benchmarking test suite](../) comparing a variet
 ## Versions
 ## Versions
 
 
 * [Java OpenJDK 1.7.0_09](http://openjdk.java.net/)
 * [Java OpenJDK 1.7.0_09](http://openjdk.java.net/)
-* [Netty 4.0.0.Beta2](http://netty.io/)
+* [Netty 4.0.14.Beta1](http://netty.io/)
 
 
 ## References
 ## References
 * https://github.com/netty/netty/tree/master/example/src/main/java/io/netty/example/http/snoop
 * https://github.com/netty/netty/tree/master/example/src/main/java/io/netty/example/http/snoop
@@ -17,4 +17,4 @@ This is the netty portion of a [benchmarking test suite](../) comparing a variet
 
 
 ### JSON Encoding Test
 ### JSON Encoding Test
 
 
-    http://localhost:8080/json
+    http://localhost:8080/json

+ 1 - 1
netty/benchmark_config

@@ -3,7 +3,7 @@
   "tests": [{
   "tests": [{
     "default": {
     "default": {
       "setup_file": "setup",
       "setup_file": "setup",
-      "json_url": "/",
+      "json_url": "/json",
       "plaintext_url": "/plaintext",
       "plaintext_url": "/plaintext",
       "port": 8080,
       "port": 8080,
       "approach": "Realistic",
       "approach": "Realistic",

+ 25 - 25
netty/pom.xml

@@ -10,36 +10,36 @@
 
 
   <dependencies>
   <dependencies>
     <dependency>
     <dependency>
-    	<groupId>io.netty</groupId>
-    	<artifactId>netty-codec-http</artifactId>
-    	<version>4.0.0.CR7</version>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-codec-http</artifactId>
+      <version>4.0.14.Beta1</version>
     </dependency>
     </dependency>
-	 <dependency>
-		<groupId>com.fasterxml.jackson.core</groupId>
-		<artifactId>jackson-databind</artifactId>
-		<version>2.1.1</version>
-	</dependency>
     <dependency>
     <dependency>
-        <groupId>org.javassist</groupId>
-        <artifactId>javassist</artifactId>
-        <version>3.18.0-GA</version>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>2.1.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.javassist</groupId>
+      <artifactId>javassist</artifactId>
+      <version>3.18.0-GA</version>
     </dependency>
     </dependency>
   </dependencies>
   </dependencies>
   
   
   <build>
   <build>
     <plugins>
     <plugins>
-			<plugin>
-				<inherited>true</inherited>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.3.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<optimize>true</optimize>
-					<debug>false</debug>
-				</configuration>
-			</plugin>
+      <plugin>
+        <inherited>true</inherited>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.7</source>
+          <target>1.7</target>
+          <optimize>true</optimize>
+          <debug>false</debug>
+        </configuration>
+      </plugin>
       <plugin>
       <plugin>
         <artifactId>maven-assembly-plugin</artifactId>
         <artifactId>maven-assembly-plugin</artifactId>
         <configuration>
         <configuration>
@@ -62,6 +62,6 @@
           </execution>
           </execution>
         </executions>
         </executions>
       </plugin>
       </plugin>
-       </plugins>
+    </plugins>
   </build>
   </build>
-</project>
+</project>

+ 2 - 2
netty/setup.py

@@ -6,7 +6,7 @@ import os
 def start(args, logfile, errfile):
 def start(args, logfile, errfile):
   try:
   try:
     subprocess.check_call("mvn clean compile assembly:single", shell=True, cwd="netty", stderr=errfile, stdout=logfile)
     subprocess.check_call("mvn clean compile assembly:single", shell=True, cwd="netty", stderr=errfile, stdout=logfile)
-    subprocess.Popen("java -Dio.netty.noResourceLeakDetection=true -jar netty-example-0.1-jar-with-dependencies.jar".rsplit(" "), cwd="netty/target", stderr=errfile, stdout=logfile)
+    subprocess.Popen("java -jar netty-example-0.1-jar-with-dependencies.jar".rsplit(" "), cwd="netty/target", stderr=errfile, stdout=logfile)
     return 0
     return 0
   except subprocess.CalledProcessError:
   except subprocess.CalledProcessError:
     return 1
     return 1
@@ -20,4 +20,4 @@ def stop(logfile, errfile):
       if 'netty-example' in line:
       if 'netty-example' in line:
         pid = int(line.split(None, 2)[1])
         pid = int(line.split(None, 2)[1])
         os.kill(pid, 9)
         os.kill(pid, 9)
-  return 0
+  return 0

+ 78 - 91
netty/src/main/java/hello/HelloServerHandler.java

@@ -2,135 +2,122 @@ package hello;
 
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.buffer.Unpooled;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+import com.fasterxml.jackson.databind.*;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelFutureListener;
 import io.netty.channel.ChannelFutureListener;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.MessageList;
 import io.netty.channel.SimpleChannelInboundHandler;
 import io.netty.channel.SimpleChannelInboundHandler;
-import io.netty.handler.codec.http.Cookie;
-import io.netty.handler.codec.http.CookieDecoder;
 import io.netty.handler.codec.http.DefaultFullHttpResponse;
 import io.netty.handler.codec.http.DefaultFullHttpResponse;
 import io.netty.handler.codec.http.FullHttpResponse;
 import io.netty.handler.codec.http.FullHttpResponse;
 import io.netty.handler.codec.http.HttpHeaders;
 import io.netty.handler.codec.http.HttpHeaders;
 import io.netty.handler.codec.http.HttpRequest;
 import io.netty.handler.codec.http.HttpRequest;
-import io.netty.handler.codec.http.HttpResponse;
-import io.netty.handler.codec.http.ServerCookieEncoder;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Set;
-
-import java.io.*;
-
-import com.fasterxml.jackson.databind.*;
+import io.netty.handler.codec.http.HttpResponseStatus;
+import io.netty.handler.codec.http.HttpVersion;
 import io.netty.util.CharsetUtil;
 import io.netty.util.CharsetUtil;
 
 
-import static io.netty.handler.codec.http.HttpHeaders.Names.*;
-import static io.netty.handler.codec.http.HttpHeaders.*;
-import static io.netty.handler.codec.http.HttpResponseStatus.*;
-import static io.netty.handler.codec.http.HttpVersion.*;
 
 
-public class HelloServerHandler extends SimpleChannelInboundHandler<Object>{
+public class HelloServerHandler extends SimpleChannelInboundHandler<Object> {
+    private final SimpleDateFormat format = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
+    private CharSequence date;
 
 
-    /** Buffer that stores the response content */
-    private static final ObjectMapper mapper = new ObjectMapper();
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+    private final ByteBuf buffer = Unpooled.directBuffer().writeBytes("Hello, World!".getBytes(CharsetUtil.UTF_8));
+    private final CharSequence contentLength = HttpHeaders.newEntity(String.valueOf(buffer.readableBytes()));
 
 
-    private MessageList<Object> out;
+    private static final CharSequence TYPE_PLAIN = HttpHeaders.newEntity("text/plain; charset=UTF-8");
+    private static final CharSequence TYPE_JSON = HttpHeaders.newEntity("application/json; charset=UTF-8");
 
 
-    @Override
-    public void beginMessageReceived(ChannelHandlerContext ctx) throws Exception {
-        out = MessageList.newInstance();
-        super.beginMessageReceived(ctx);
-    }
+    private static final CharSequence SERVER_NAME = HttpHeaders.newEntity("Netty");
+    private static final CharSequence CONTENT_TYPE_ENTITY = HttpHeaders.newEntity(HttpHeaders.Names.CONTENT_TYPE);
+    private static final CharSequence DATE_ENTITY = HttpHeaders.newEntity(HttpHeaders.Names.DATE);
+    private static final CharSequence CONTENT_LENGTH_ENTITY = HttpHeaders.newEntity(HttpHeaders.Names.CONTENT_LENGTH);
+    private static final CharSequence SERVER_ENTITY = HttpHeaders.newEntity(HttpHeaders.Names.SERVER);
 
 
     @Override
     @Override
-    public void messageReceived(ChannelHandlerContext ctx, Object msg) throws Exception {
+    public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
         if (msg instanceof HttpRequest) {
         if (msg instanceof HttpRequest) {
             HttpRequest request = (HttpRequest) msg;
             HttpRequest request = (HttpRequest) msg;
-
-            if (is100ContinueExpected(request)) {
-                send100Continue(out);
+            String uri = request.getUri();
+            switch (uri) {
+                case "/plaintext":
+                    writeResponse(ctx, request, buffer.duplicate().retain(), TYPE_PLAIN, contentLength);
+                    return;
+                case "/json":
+                    byte[] json = MAPPER.writeValueAsBytes(Collections.singletonMap("message", "Hello, World!"));
+                    writeResponse(ctx, request, ctx.alloc().buffer(json.length).writeBytes(json), TYPE_JSON,
+                            String.valueOf(json.length));
+                    return;
             }
             }
-            ByteBuf buf = ctx.alloc().buffer();
-            if("/plaintext".equals(request.getUri())) {
-                buf.writeBytes("Hello, World!".getBytes(CharsetUtil.UTF_8));
-            } else {
-                Map<String, String> data = new HashMap<String, String>();
-                data.put("message", "Hello, world");
-
-                try
-                {
-                  buf.writeBytes(HelloServerHandler.mapper.writeValueAsBytes(data));
-                }
-                catch (IOException ex)
-                {
-                  // do nothing
-                }
-            }
-            writeResponse(ctx, request, buf, out);
+            FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.NOT_FOUND, Unpooled.EMPTY_BUFFER, false);
+            ctx.write(response).addListener(ChannelFutureListener.CLOSE);
         }
         }
     }
     }
 
 
-    private void writeResponse(ChannelHandlerContext ctx, HttpRequest request, ByteBuf buf, MessageList<Object> out) {
+    private void writeResponse(ChannelHandlerContext ctx, HttpRequest request, ByteBuf buf,
+                               CharSequence contentType, CharSequence contentLength) {
         // Decide whether to close the connection or not.
         // Decide whether to close the connection or not.
-        boolean keepAlive = isKeepAlive(request);
+        boolean keepAlive = HttpHeaders.isKeepAlive(request);
         // Build the response object.
         // Build the response object.
         FullHttpResponse response = new DefaultFullHttpResponse(
         FullHttpResponse response = new DefaultFullHttpResponse(
-                HTTP_1_1, OK, buf);
-
-        response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
+                HttpVersion.HTTP_1_1, HttpResponseStatus.OK, buf, false);
+        HttpHeaders headers = response.headers();
+        headers.set(CONTENT_TYPE_ENTITY, contentType);
+        headers.set(SERVER_ENTITY, SERVER_NAME);
+        headers.set(DATE_ENTITY, date);
 
 
         if (keepAlive) {
         if (keepAlive) {
-            // Add 'Content-Length' header only for a keep-alive connection.
-            response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
-            // Add keep alive header as per:
-            // - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
-            response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
-        }
-
-        // Encode the cookie.
-        String cookieString = request.headers().get(COOKIE);
-        if (cookieString != null) {
-            Set<Cookie> cookies = CookieDecoder.decode(cookieString);
-            if (!cookies.isEmpty()) {
-                // Reset the cookies if necessary.
-                for (Cookie cookie: cookies) {
-                    response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
-                }
-            }
-        } else {
-            // Browser sent no cookie. Add some.
-            response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key1", "value1"));
-            response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key2", "value2"));
+            headers.set(CONTENT_LENGTH_ENTITY, contentLength);
         }
         }
 
 
-        // Write the response.
-        out.add(response);
-
         // Close the non-keep-alive connection after the write operation is done.
         // Close the non-keep-alive connection after the write operation is done.
         if (!keepAlive) {
         if (!keepAlive) {
-            this.out = MessageList.newInstance();
-            ctx.write(out).addListener(ChannelFutureListener.CLOSE);
+            ctx.write(response).addListener(ChannelFutureListener.CLOSE);
+        } else {
+            ctx.write(response, ctx.voidPromise());
         }
         }
     }
     }
 
 
-    private void send100Continue(MessageList<Object> out) {
-        HttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, CONTINUE, Unpooled.EMPTY_BUFFER);
-        out.add(response);
+    @Override
+    public void exceptionCaught(
+            ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        ctx.close();
     }
     }
 
 
     @Override
     @Override
-    public void endMessageReceived(ChannelHandlerContext ctx) throws Exception {
-        if (out != null) {
-            MessageList<Object> msgs = out;
-            this.out = null;
-            ctx.write(msgs);
-        }
+    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+        ctx.flush();
     }
     }
 
 
     @Override
     @Override
-    public void exceptionCaught(
-            ChannelHandlerContext ctx, Throwable cause) throws Exception {
-        cause.printStackTrace();
-        ctx.close();
+    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
+        super.handlerRemoved(ctx);
+        buffer.release();
+    }
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+        date = HttpHeaders.newEntity(format.format(new Date()));
+
+        Channel channel = ctx.channel();
+        final ScheduledFuture<?> future = channel.eventLoop().scheduleWithFixedDelay(new Runnable() {
+            @Override
+            public void run() {
+                date = HttpHeaders.newEntity(format.format(new Date()));
+            }
+        }, 1000, 1000, TimeUnit.MILLISECONDS);
+
+        channel.closeFuture().addListener(new ChannelFutureListener() {
+            @Override
+            public void operationComplete(ChannelFuture channelFuture) throws Exception {
+                future.cancel(false);
+            }
+        });
     }
     }
 }
 }

+ 2 - 13
netty/src/main/java/hello/HelloServerInitializer.java

@@ -9,20 +9,9 @@ import io.netty.handler.codec.http.HttpResponseEncoder;
 public class HelloServerInitializer extends ChannelInitializer<SocketChannel> {
 public class HelloServerInitializer extends ChannelInitializer<SocketChannel> {
     @Override
     @Override
     public void initChannel(SocketChannel ch) throws Exception {
     public void initChannel(SocketChannel ch) throws Exception {
-        // Create a default pipeline implementation.
         ChannelPipeline p = ch.pipeline();
         ChannelPipeline p = ch.pipeline();
-
-        // Uncomment the following line if you want HTTPS
-        //SSLEngine engine = SecureChatSslContextFactory.getServerContext().createSSLEngine();
-        //engine.setUseClientMode(false);
-        //p.addLast("ssl", new SslHandler(engine));
-
-        p.addLast("decoder", new HttpRequestDecoder());
-        // Uncomment the following line if you don't want to handle HttpChunks.
-        //p.addLast("aggregator", new HttpObjectAggregator(1048576));
         p.addLast("encoder", new HttpResponseEncoder());
         p.addLast("encoder", new HttpResponseEncoder());
-        // Remove the following line if you don't want automatic content compression.
-        //p.addLast("deflater", new HttpContentCompressor());
+        p.addLast("decoder", new HttpRequestDecoder(4096, 8192, 8192, false));
         p.addLast("handler", new HelloServerHandler());
         p.addLast("handler", new HelloServerHandler());
     }
     }
-}
+}

+ 16 - 7
netty/src/main/java/hello/HelloWebServer.java

@@ -1,11 +1,19 @@
 package hello;
 package hello;
 
 
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.bootstrap.ServerBootstrap;
+import io.netty.buffer.PooledByteBufAllocator;
 import io.netty.channel.Channel;
 import io.netty.channel.Channel;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
 import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.util.ResourceLeakDetector;
+
 
 
 public class HelloWebServer {
 public class HelloWebServer {
+    static {
+        ResourceLeakDetector.setEnabled(false);
+    }
 
 
     private final int port;
     private final int port;
 
 
@@ -15,17 +23,18 @@ public class HelloWebServer {
 
 
     public void run() throws Exception {
     public void run() throws Exception {
         // Configure the server.
         // Configure the server.
-        ServerBootstrap b = new ServerBootstrap();
-
+        EventLoopGroup group = new NioEventLoopGroup();
         try {
         try {
-            b.group(new NioEventLoopGroup(), new NioEventLoopGroup())
+            ServerBootstrap b = new ServerBootstrap();
+            b.group(group)
+             .childHandler(new HelloServerInitializer())
              .channel(NioServerSocketChannel.class)
              .channel(NioServerSocketChannel.class)
-             .childHandler(new HelloServerInitializer());
-
+             .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
+             
             Channel ch = b.bind(port).sync().channel();
             Channel ch = b.bind(port).sync().channel();
             ch.closeFuture().sync();
             ch.closeFuture().sync();
         } finally {
         } finally {
-            b.shutdown();
+            group.shutdownGracefully().sync();
         }
         }
     }
     }
 
 
@@ -38,4 +47,4 @@ public class HelloWebServer {
         }
         }
         new HelloWebServer(port).run();
         new HelloWebServer(port).run();
     }
     }
-}
+}

+ 1 - 1
rack/Gemfile-jruby

@@ -1,6 +1,6 @@
 source 'http://rubygems.org'
 source 'http://rubygems.org'
 
 
-gem 'torqbox', '0.1.2'
+gem 'torqbox', '0.1.4'
 gem 'json', '1.7.6'
 gem 'json', '1.7.6'
 gem "rubyzip", "~> 1.0.0"
 gem "rubyzip", "~> 1.0.0"
 gem "zip-zip", "~> 0.1"
 gem "zip-zip", "~> 0.1"

+ 1 - 1
rack/README.md

@@ -13,7 +13,7 @@ The tests were run with:
 * [JRuby 1.7.8](http://jruby.org/)
 * [JRuby 1.7.8](http://jruby.org/)
 * [Rack 1.5.1](http://rack.github.com/)
 * [Rack 1.5.1](http://rack.github.com/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
-* [TorqBox 0.1.2](http://torquebox.org/torqbox/)
+* [TorqBox 0.1.4](http://torquebox.org/torqbox/)
 
 
 ## References
 ## References
 * https://github.com/FooBarWidget/passenger/pull/71
 * https://github.com/FooBarWidget/passenger/pull/71

+ 1 - 1
rails-stripped/Gemfile-jruby

@@ -1,7 +1,7 @@
 source 'https://rubygems.org'
 source 'https://rubygems.org'
 
 
 gem 'rails', '3.2.13'
 gem 'rails', '3.2.13'
-gem 'torqbox', '0.1.2'
+gem 'torqbox', '0.1.4'
 gem 'activerecord-jdbcmysql-adapter', '1.2.6'
 gem 'activerecord-jdbcmysql-adapter', '1.2.6'
 gem "rubyzip", "~> 1.0.0"
 gem "rubyzip", "~> 1.0.0"
 gem "zip-zip", "~> 0.1"
 gem "zip-zip", "~> 0.1"

+ 1 - 1
rails-stripped/README.md

@@ -16,7 +16,7 @@ The tests were run with:
 * [JRuby 1.7.8](http://jruby.org/)
 * [JRuby 1.7.8](http://jruby.org/)
 * [Rails 3.2.11](http://rubyonrails.org/)
 * [Rails 3.2.11](http://rubyonrails.org/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
-* [TorqBox 0.1.2](http://torquebox.org/torqbox/)
+* [TorqBox 0.1.4](http://torquebox.org/torqbox/)
 * [MySQL 5.5.29](https://dev.mysql.com/)
 * [MySQL 5.5.29](https://dev.mysql.com/)
 
 
 ## References
 ## References

+ 1 - 1
rails/Gemfile-jruby

@@ -1,7 +1,7 @@
 source 'https://rubygems.org'
 source 'https://rubygems.org'
 
 
 gem 'rails', '3.2.13'
 gem 'rails', '3.2.13'
-gem 'torqbox', '0.1.2'
+gem 'torqbox', '0.1.4'
 gem 'activerecord-jdbcmysql-adapter', '1.2.6'
 gem 'activerecord-jdbcmysql-adapter', '1.2.6'
 gem "rubyzip", "~> 1.0.0"
 gem "rubyzip", "~> 1.0.0"
 gem "zip-zip", "~> 0.1"
 gem "zip-zip", "~> 0.1"

+ 1 - 1
rails/README.md

@@ -16,7 +16,7 @@ The tests were run with:
 * [JRuby 1.7.8](http://jruby.org/)
 * [JRuby 1.7.8](http://jruby.org/)
 * [Rails 3.2.11](http://rubyonrails.org/)
 * [Rails 3.2.11](http://rubyonrails.org/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
-* [TorqBox 0.1.2](http://torquebox.org/torqbox/)
+* [TorqBox 0.1.4](http://torquebox.org/torqbox/)
 * [MySQL 5.5.29](https://dev.mysql.com/)
 * [MySQL 5.5.29](https://dev.mysql.com/)
 
 
 ## References
 ## References

+ 2 - 1
revel-jet/benchmark_config

@@ -20,7 +20,8 @@
       "database_os": "Linux",
       "database_os": "Linux",
       "display_name": "revel-jet",
       "display_name": "revel-jet",
       "notes": "",
       "notes": "",
-      "versus": "go"
+      "versus": "go",
+      "skip": "true"
     }
     }
   }]
   }]
 }
 }

+ 2 - 1
revel-qbs/benchmark_config

@@ -20,7 +20,8 @@
       "database_os": "Linux",
       "database_os": "Linux",
       "display_name": "revel-qbs",
       "display_name": "revel-qbs",
       "notes": "",
       "notes": "",
-      "versus": "go"
+      "versus": "go",
+      "skip": "true"
     }
     }
   }]
   }]
 }
 }

+ 2 - 1
revel/benchmark_config

@@ -22,7 +22,8 @@
       "database_os": "Linux",
       "database_os": "Linux",
       "display_name": "revel",
       "display_name": "revel",
       "notes": "",
       "notes": "",
-      "versus": "go"
+      "versus": "go",
+      "skip": "true"
     }
     }
   }]
   }]
 }
 }

+ 1 - 1
sinatra/Gemfile-jruby

@@ -1,7 +1,7 @@
 source 'https://rubygems.org'
 source 'https://rubygems.org'
 gem 'sinatra', '1.3.4'
 gem 'sinatra', '1.3.4'
 gem 'sinatra-contrib', '1.3.2'
 gem 'sinatra-contrib', '1.3.2'
-gem 'torqbox', '0.1.2'
+gem 'torqbox', '0.1.4'
 gem 'activerecord-jdbcmysql-adapter', '1.2.6'
 gem 'activerecord-jdbcmysql-adapter', '1.2.6'
 gem "sinatra-activerecord", "1.2.2"
 gem "sinatra-activerecord", "1.2.2"
 gem "rubyzip", "~> 1.0.0"
 gem "rubyzip", "~> 1.0.0"

+ 1 - 1
sinatra/README.md

@@ -15,7 +15,7 @@ The tests were run with:
 * [JRuby 1.7.8](http://jruby.org/)
 * [JRuby 1.7.8](http://jruby.org/)
 * [Sinatra 1.3.4](http://www.sinatrarb.com/)
 * [Sinatra 1.3.4](http://www.sinatrarb.com/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
 * [Unicorn 4.6.2](http://unicorn.bogomips.org/)
-* [TorqBox 0.1.2](http://torquebox.org/torqbox/)
+* [TorqBox 0.1.4](http://torquebox.org/torqbox/)
 * [MySQL 5.5.29](https://dev.mysql.com/)
 * [MySQL 5.5.29](https://dev.mysql.com/)
 
 
 ## References
 ## References

+ 10 - 10
toolset/setup/linux/installer.py

@@ -112,8 +112,8 @@ class Installer:
     # go
     # go
     #
     #
 
 
-    self.__download("http://go.googlecode.com/files/go1.2rc3.linux-amd64.tar.gz");
-    self.__run_command("tar xzf go1.2rc3.linux-amd64.tar.gz")
+    self.__download("http://go.googlecode.com/files/go1.2.linux-amd64.tar.gz");
+    self.__run_command("tar xzf go1.2.linux-amd64.tar.gz")
 
 
     #
     #
     # Perl
     # Perl
@@ -202,11 +202,11 @@ class Installer:
     # Ur/Web
     # Ur/Web
     #
     #
 
 
-    self.__download("http://www.impredicative.com/ur/urweb-20130421.tgz")
-    self.__run_command("tar xzf urweb-20130421.tgz")
-    self.__run_command("./configure", cwd="urweb-20130421")
-    self.__run_command("make", cwd="urweb-20130421")
-    self.__run_command("sudo make install", cwd="urweb-20130421")
+    self.__run_command("hg clone http://hg.impredicative.com/urweb/")
+    self.__run_command("./autogen.sh", cwd="urweb")
+    self.__run_command("./configure", cwd="urweb")
+    self.__run_command("make", cwd="urweb")
+    self.__run_command("sudo make install", cwd="urweb")
 
 
     #######################################
     #######################################
     # Webservers
     # Webservers
@@ -290,8 +290,8 @@ class Installer:
     #
     #
     # Vert.x
     # Vert.x
     #
     #
-    self.__download("http://dl.bintray.com/vertx/downloads/vert.x-2.1M1.tar.gz?direct=true", "vert.x-2.1M1.tar.gz")
-    self.__run_command("tar xzf vert.x-2.1M1.tar.gz")
+    self.__download("http://dl.bintray.com/vertx/downloads/vert.x-2.1M2.tar.gz?direct=true", "vert.x-2.1M2.tar.gz")
+    self.__run_command("tar xzf vert.x-2.1M2.tar.gz")
 
 
     #
     #
     # Yesod
     # Yesod
@@ -347,7 +347,7 @@ class Installer:
 
 
     easy_install('simplejson==3.3.1', two=True, three=True, pypy=False)
     easy_install('simplejson==3.3.1', two=True, three=True, pypy=False)
     easy_install('ujson==1.33', three=True)
     easy_install('ujson==1.33', three=True)
-    easy_install('https://github.com/surfly/gevent/releases/download/1.0rc3/gevent-1.0rc3.tar.gz', three=False)
+    easy_install('gevent==1.0')
     easy_install('uwsgi', three=True)  # uwsgi is released too often to stick on single version.
     easy_install('uwsgi', three=True)  # uwsgi is released too often to stick on single version.
 
 
     # Gunicorn
     # Gunicorn

+ 1 - 1
toolset/setup/windows/installer.ps1

@@ -9,7 +9,7 @@ $python_installer_path    = "2.7.5/$python_installer_file"
 $python_version           = "27"
 $python_version           = "27"
 $wincache_installer_file  = "wincache-1.3.4-5.4-nts-vc9-x86.exe"
 $wincache_installer_file  = "wincache-1.3.4-5.4-nts-vc9-x86.exe"
 $wincache_installer_path  = "wincache-1.3.4/$wincache_installer_file"
 $wincache_installer_path  = "wincache-1.3.4/$wincache_installer_file"
-$go_installer_file        = "go1.2rc3.windows-amd64.msi"
+$go_installer_file        = "go1.2.windows-amd64.msi"
 $jre_installer_file       = "jre-7u25-windows-x64.exe"
 $jre_installer_file       = "jre-7u25-windows-x64.exe"
 $jdk_installer_file       = "jdk-7u45-windows-x64.exe"
 $jdk_installer_file       = "jdk-7u45-windows-x64.exe"
 $jdk_master_hash          = "943527ed9111cbb746d4ab2bb2c31cd6" 
 $jdk_master_hash          = "943527ed9111cbb746d4ab2bb2c31cd6" 

+ 1 - 1
tornado/server.py

@@ -5,7 +5,7 @@ import json
 import motor
 import motor
 import tornado.ioloop
 import tornado.ioloop
 import tornado.web
 import tornado.web
-from tornado import gen, escape
+from tornado import gen
 import tornado.options
 import tornado.options
 from tornado.options import options
 from tornado.options import options
 import tornado.httpserver
 import tornado.httpserver

+ 67 - 75
vertx/WebServer.java

@@ -1,25 +1,25 @@
-import java.nio.charset.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.ThreadLocalRandom;
 import org.vertx.java.core.Handler;
 import org.vertx.java.core.Handler;
 import org.vertx.java.core.buffer.Buffer;
 import org.vertx.java.core.buffer.Buffer;
 import org.vertx.java.core.eventbus.Message;
 import org.vertx.java.core.eventbus.Message;
 import org.vertx.java.core.http.HttpServerRequest;
 import org.vertx.java.core.http.HttpServerRequest;
 import org.vertx.java.core.http.HttpServerResponse;
 import org.vertx.java.core.http.HttpServerResponse;
-import org.vertx.java.core.json.JsonObject;
 import org.vertx.java.core.json.JsonArray;
 import org.vertx.java.core.json.JsonArray;
+import org.vertx.java.core.json.JsonObject;
 import org.vertx.java.core.json.impl.Json;
 import org.vertx.java.core.json.impl.Json;
 import org.vertx.java.platform.Verticle;
 import org.vertx.java.platform.Verticle;
 
 
-public class WebServer extends Verticle implements Handler<HttpServerRequest> {
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
 
 
-  private static String helloWorld = "Hello, World!";
-  private static Buffer helloWorldBuffer = new Buffer(helloWorld);
-  private static String helloWorldContentLength = String.valueOf(helloWorldBuffer.length());
-  private static DateFormat DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyyy HH:mm:ss z");
+public class WebServer extends Verticle implements Handler<HttpServerRequest> {
 
 
+  private Buffer helloWorldBuffer = new Buffer("Hello, World!");
+  private String helloWorldContentLength = String.valueOf(helloWorldBuffer.length());
+  private DateFormat DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyyy HH:mm:ss z");
   private String dateString;
   private String dateString;
 
 
   @Override
   @Override
@@ -34,10 +34,6 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
     formatDate();
     formatDate();
   }
   }
 
 
-  private void formatDate() {
-    dateString = DATE_FORMAT.format(new Date());
-  }
-
   @Override
   @Override
   public void handle(HttpServerRequest req) {
   public void handle(HttpServerRequest req) {
     String path = req.path();
     String path = req.path();
@@ -60,45 +56,40 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
     }
     }
   }
   }
 
 
+  private void formatDate() {
+    dateString = DATE_FORMAT.format(new Date());
+  }
+
   private void handlePlainText(HttpServerRequest req) {
   private void handlePlainText(HttpServerRequest req) {
     HttpServerResponse resp = req.response();
     HttpServerResponse resp = req.response();
-    resp.putHeader("Content-Type", "application/json; charset=UTF-8");
-    resp.putHeader("Content-Length", helloWorldContentLength);
-    resp.putHeader("Server", "vert.x");
-    resp.putHeader("Date", dateString);
+    setHeaders(resp, "text/plain", helloWorldContentLength);
     resp.end(helloWorldBuffer);
     resp.end(helloWorldBuffer);
   }
   }
 
 
   private void handleJson(HttpServerRequest req) {
   private void handleJson(HttpServerRequest req) {
-    String result = Json.encode(Collections.singletonMap("message", "Hello, world!"));
-    sendResponse(req, result);
+    Buffer buff = new Buffer(Json.encode(Collections.singletonMap("message", "Hello, world!")));
+    HttpServerResponse resp = req.response();
+    setHeaders(resp, "application/json", String.valueOf(buff.length()));
+    resp.end(buff);
   }
   }
 
 
   private void handleDbMongo(final HttpServerRequest req) {
   private void handleDbMongo(final HttpServerRequest req) {
+    findRandom(ThreadLocalRandom.current(), new Handler<Message<JsonObject>>() {
+      @Override
+      public void handle(Message<JsonObject> reply) {
+        JsonObject world = getResultFromReply(reply);
+        String result = world.encode();
+        sendResponse(req, result);
+      }
+    });
+  }
 
 
-    final Random random = ThreadLocalRandom.current();
-
-    vertx.eventBus().send(
-        "hello.persistor",
-        new JsonObject()
-            .putString("action", "findone")
-            .putString("collection", "World")
-            .putObject("matcher", new JsonObject().putNumber("_id", (random.nextInt(10000) + 1))),
-        new Handler<Message<JsonObject>>() {
-          @Override
-          public void handle(Message<JsonObject> reply) {
-            JsonObject body = reply.body();
-
-            if ("ok".equals(body.getString("status"))) {
-              JsonObject world = body.getObject("result");
-              world.removeField("_id");
-              String result = world.encode();
-              sendResponse(req, result);
-            } else {
-              System.err.println("Failed to execute query");
-            }
-          }
-        });
+  private JsonObject getResultFromReply(Message<JsonObject> reply) {
+    JsonObject body = reply.body();
+    JsonObject world = body.getObject("result");
+    Object id = world.removeField("_id");
+    world.putValue("id", id);
+    return world;
   }
   }
 
 
   private void handleQueriesMongo(final HttpServerRequest req) {
   private void handleQueriesMongo(final HttpServerRequest req) {
@@ -108,21 +99,37 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
     } catch (NumberFormatException e) {
     } catch (NumberFormatException e) {
       e.printStackTrace();
       e.printStackTrace();
     }
     }
-
     final MongoHandler dbh = new MongoHandler(req, queriesParam);
     final MongoHandler dbh = new MongoHandler(req, queriesParam);
     final Random random = ThreadLocalRandom.current();
     final Random random = ThreadLocalRandom.current();
-
     for (int i = 0; i < queriesParam; i++) {
     for (int i = 0; i < queriesParam; i++) {
-      vertx.eventBus().send(
-          "hello.persistor",
-          new JsonObject()
-              .putString("action", "findone")
-              .putString("collection", "World")
-              .putObject("matcher", new JsonObject().putNumber("_id", (random.nextInt(10000) + 1))),
-          dbh);
+      findRandom(random, dbh);
     }
     }
   }
   }
 
 
+  private void findRandom(Random random, Handler<Message<JsonObject>> handler) {
+    vertx.eventBus().send(
+        "hello.persistor",
+        new JsonObject()
+            .putString("action", "findone")
+            .putString("collection", "World")
+            .putObject("matcher", new JsonObject().putNumber("_id", (random.nextInt(10000) + 1))),
+        handler);
+  }
+
+  private void sendResponse(HttpServerRequest req, String result) {
+    Buffer buff = new Buffer(result);
+    HttpServerResponse resp = req.response();
+    setHeaders(resp, "application/json", String.valueOf(buff.length()));
+    resp.end(buff);
+  }
+
+  private void setHeaders(HttpServerResponse resp, String contentType, String contentLength) {
+    resp.putHeader("Content-Type", contentType);
+    resp.putHeader("Content-Length", contentLength);
+    resp.putHeader("Server", "vert.x");
+    resp.putHeader("Date", dateString);
+  }
+
   private class MongoHandler implements Handler<Message<JsonObject>> {
   private class MongoHandler implements Handler<Message<JsonObject>> {
     private final HttpServerRequest req;
     private final HttpServerRequest req;
     private final int queries;
     private final int queries;
@@ -136,30 +143,15 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
 
 
     @Override
     @Override
     public void handle(Message<JsonObject> reply) {
     public void handle(Message<JsonObject> reply) {
-      JsonObject body = reply.body();
-
-      if ("ok".equals(body.getString("status"))) {
-        body.getObject("result").removeField("_id");
-        worlds.add(body.getObject("result"));
-        if (worlds.size() == this.queries) {
-          // All queries have completed; send the response.
-          String result = worlds.encode();
-          sendResponse(req, result);
-        }
-      } else {
-        System.err.println("Failed to execute query");
+      JsonObject world = getResultFromReply(reply);
+      worlds.add(world);
+      if (worlds.size() == this.queries) {
+        // All queries have completed; send the response.
+        String result = worlds.encode();
+        sendResponse(req, result);
       }
       }
     }
     }
   }
   }
-  
-  private void sendResponse(HttpServerRequest req, String result) {
-      int contentLength = result.getBytes(StandardCharsets.UTF_8).length;
-      HttpServerResponse resp = req.response();
-      resp.putHeader("Content-Type", "application/json; charset=UTF-8");
-      resp.putHeader("Content-Length", String.valueOf(contentLength));
-      resp.putHeader("Server", "vert.x");
-      resp.putHeader("Date", dateString);
-      resp.end(result);
-  }
+
 }
 }
 
 

+ 2 - 2
vertx/app.js

@@ -6,9 +6,9 @@ var persistorConf = {
   host: 'localhost'
   host: 'localhost'
 }
 }
 
 
-container.deployModule('io.vertx~mod-mongo-persistor~2.0.0-final', persistorConf, function (err, dep_id) {
+container.deployModule('io.vertx~mod-mongo-persistor~2.1.1', persistorConf, function (err, dep_id) {
   if (!err) {
   if (!err) {
-    container.deployVerticle('WebServer.java', 8);
+    container.deployVerticle('WebServer.java', java.lang.Runtime.getRuntime().availableProcessors() * 2);
   } else {
   } else {
     err.printStackTrace();
     err.printStackTrace();
   }
   }

+ 1 - 1
webgo/benchmark_config

@@ -20,4 +20,4 @@
       "versus": "go"
       "versus": "go"
     }
     }
   }]
   }]
-}
+}

+ 2 - 2
wicket/README.md

@@ -15,7 +15,7 @@ Use [Hibernate](http://www.hibernate.org/) for interaction with MySQL database.
 ## Versions
 ## Versions
 
 
 * [Java OpenJDK 1.7.0_09](http://openjdk.java.net/)
 * [Java OpenJDK 1.7.0_09](http://openjdk.java.net/)
-* [Wicket 6.5.0](http://wicket.apache.org/)
+* [Wicket 6.12.0](http://wicket.apache.org/)
 * [Hibernate 4.1.1](http://www.hibernate.org/)
 * [Hibernate 4.1.1](http://www.hibernate.org/)
 * [MySQL 5.5.29](http://dev.mysql.com/)
 * [MySQL 5.5.29](http://dev.mysql.com/)
 * [Maven 2.2.1](https://maven.apache.org/)
 * [Maven 2.2.1](https://maven.apache.org/)
@@ -29,4 +29,4 @@ Use [Hibernate](http://www.hibernate.org/) for interaction with MySQL database.
 
 
 ### Database Mapping Test
 ### Database Mapping Test
 
 
-    http://localhost:8080/wicket/hello_db?queries=5
+    http://localhost:8080/wicket/hello_db?queries=5

+ 3 - 3
wicket/pom.xml

@@ -20,7 +20,7 @@
 		</license>
 		</license>
 	</licenses>
 	</licenses>
 	<properties>
 	<properties>
-		<wicket.version>6.5.0</wicket.version>
+		<wicket.version>6.12.0</wicket.version>
 		<jetty.version>7.5.0.v20110901</jetty.version>
 		<jetty.version>7.5.0.v20110901</jetty.version>
 	</properties>
 	</properties>
 	<dependencies>
 	<dependencies>
@@ -145,13 +145,13 @@
 							<port>8080</port>
 							<port>8080</port>
 							<maxIdleTime>3600000</maxIdleTime>
 							<maxIdleTime>3600000</maxIdleTime>
 						</connector>
 						</connector>
-						<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
+						<!--connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
 							<port>8443</port>
 							<port>8443</port>
 							<maxIdleTime>3600000</maxIdleTime>
 							<maxIdleTime>3600000</maxIdleTime>
 							<keystore>${project.build.directory}/test-classes/keystore</keystore>
 							<keystore>${project.build.directory}/test-classes/keystore</keystore>
 							<password>wicket</password>
 							<password>wicket</password>
 							<keyPassword>wicket</keyPassword>
 							<keyPassword>wicket</keyPassword>
-						</connector>
+						</connector-->
 					</connectors>
 					</connectors>
 				</configuration>
 				</configuration>
 			</plugin>
 			</plugin>

+ 10 - 1
wicket/src/main/java/hellowicket/HelloDbResponse.java

@@ -40,7 +40,16 @@ public class HelloDbResponse extends AbstractResource
 
 
         try
         try
         {
         {
-          attributes.getResponse().write(HelloDbResponse.mapper.writeValueAsString(worlds));
+          String data;
+          if (queries == 1)
+          {
+              data = HelloDbResponse.mapper.writeValueAsString(worlds[0]);
+          }
+          else
+          {
+              data = HelloDbResponse.mapper.writeValueAsString(worlds);
+          }
+          attributes.getResponse().write(data);
         }
         }
         catch (IOException ex)
         catch (IOException ex)
         {
         {

+ 9 - 3
wicket/src/main/java/hellowicket/WicketApplication.java

@@ -8,7 +8,7 @@ import org.apache.wicket.protocol.http.WebApplication;
  * @see hellowicket.Start#main(String[])
  * @see hellowicket.Start#main(String[])
  */
  */
 public class WicketApplication extends WebApplication
 public class WicketApplication extends WebApplication
-{    	
+{
 	/**
 	/**
 	 * @see org.apache.wicket.Application#getHomePage()
 	 * @see org.apache.wicket.Application#getHomePage()
 	 */
 	 */
@@ -27,7 +27,13 @@ public class WicketApplication extends WebApplication
 		super.init();
 		super.init();
 
 
 		// add your configuration here
 		// add your configuration here
-    mountResource("/json", new HelloJsonReference());
-    mountResource("/db", new HelloDbReference());
+
+		// mount the resources under test
+		mountResource("/json", new HelloJsonReference());
+		mountResource("/db", new HelloDbReference());
+
+		// disable response caching to be more close to other
+		// test applications' behavior
+		getRequestCycleSettings().setBufferResponse(false);
 	}
 	}
 }
 }