Browse Source

Fix the redstone test to not fail when there is >1 processor (#3652)

Michael Hixson 7 years ago
parent
commit
25d7508b82

+ 1 - 1
frameworks/Dart/redstone/pubspec.yaml

@@ -3,7 +3,6 @@ description: A benchmark of Redstone.dart, a server-side microframework for Dart
 environment:
   sdk: ">=1.7.0 <2.0.0"
 dependencies:
-  args: 0.10.0+2
   crypto: 0.9.0
   mongo_dart: 0.1.44
   mustache: 0.1.8
@@ -12,4 +11,5 @@ dependencies:
   redstone_mapper: 0.1.9
   redstone_mapper_mongo: 0.1.1+1
   redstone_mapper_pg: 0.1.1
+  system_info: 0.0.16
   yaml: 2.0.1+1

+ 7 - 2
frameworks/Dart/redstone/redstone-mongodb.dockerfile

@@ -1,7 +1,12 @@
 FROM google/dart:1.24
 
-COPY ./ ./
+WORKDIR /redstone
+COPY fortunes.mustache fortunes.mustache
+COPY mongodb.yaml mongodb.yaml
+COPY postgresql.yaml postgresql.yaml
+COPY pubspec.yaml pubspec.yaml
+COPY server.dart server.dart
 
 RUN pub upgrade
 
-CMD dart server.dart -a 0.0.0.0 -p 8080 -d $(nproc) -i $(nproc)
+CMD ["dart", "server.dart"]

+ 7 - 2
frameworks/Dart/redstone/redstone.dockerfile

@@ -1,7 +1,12 @@
 FROM google/dart:1.24
 
-COPY ./ ./
+WORKDIR /redstone
+COPY fortunes.mustache fortunes.mustache
+COPY mongodb.yaml mongodb.yaml
+COPY postgresql.yaml postgresql.yaml
+COPY pubspec.yaml pubspec.yaml
+COPY server.dart server.dart
 
 RUN pub upgrade
 
-CMD dart server.dart -a 0.0.0.0 -p 8080 -d $(nproc) -i $(nproc)
+CMD ["dart", "server.dart"]

+ 34 - 45
frameworks/Dart/redstone/server.dart

@@ -2,7 +2,7 @@ import "dart:core";
 import "dart:io";
 import "dart:isolate";
 import 'dart:async' show Future;
-import 'dart:math' show Random;
+import 'dart:math' show Random, max;
 import "package:redstone/server.dart" as app;
 import "package:redstone_mapper/mapper.dart";
 import "package:redstone_mapper/plugin.dart";
@@ -10,9 +10,11 @@ import "package:redstone_mapper_mongo/manager.dart";
 import "package:redstone_mapper_pg/manager.dart";
 import "package:postgresql/postgresql.dart" as pg;
 import "package:di/di.dart";
-import "package:args/args.dart";
 import 'package:yaml/yaml.dart' as yaml;
 import 'package:mustache/mustache.dart' as mustache;
+import 'package:system_info/system_info.dart';
+
+final _NUM_PROCESSORS = SysInfo.processors.length;
 
 const _WORLD_TABLE_SIZE = 10000;
 
@@ -207,57 +209,45 @@ class MongoTests {
 }
 
 main(List<String> args) {
-  var parser = new ArgParser();
-  parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
-  parser.addOption('port', abbr: 'p', defaultsTo: '8080');
-  parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
-  parser.addOption('isolates', abbr: 'i', defaultsTo: '1');
-  
-  var arguments = parser.parse(args);
-  var isolates = int.parse(arguments['isolates']);
-  var dbConnections = int.parse(arguments['dbconnections']) ~/ isolates;
-
-  ServerSocket
-      .bind(arguments['address'], int.parse(arguments['port']), shared: true)
-      .then((server) {
-        for (int i = 1; i < isolates; i++) {
-          _startServer(server, dbConnections);
-        }
-  });
-  
+  ReceivePort errorPort = new ReceivePort();
+  errorPort.listen((e) => print(e));
+  for (int i = 0; i < _NUM_PROCESSORS; i++) {
+    Isolate.spawn(
+        startInIsolate,
+        [],
+        onError: errorPort.sendPort);
+  }
 }
 
-_startServer(serverSocket, dbConnections) {
+startInIsolate(List args) {
+  _startServer();
+}
+
+_startServer() {
+  var dbConnections = max(1, (256 / _NUM_PROCESSORS).floor());
+
+  var mongoDbManager = new MongoDbManager(
+      "mongodb://tfb-database/hello_world",
+      poolSize: dbConnections);
+
+  var pgSqlManager = new PostgreSqlManager(
+      "postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world",
+      min: dbConnections,
+      max: dbConnections);
 
-  MongoDbManager mongoDbManager;
-  PostgreSqlManager pgSqlManager;
   mustache.Template fortunesTemplate;
   
   Future.wait([
-     
-    //load PostgreSql configuration
-    new File("postgresql.yaml").readAsString().then((config){
-      pgSqlManager = new PostgreSqlManager(
-          new pg.Settings.fromMap(yaml.loadYaml(config)).toUri(),
-          min: dbConnections,
-          max: dbConnections);
-    }),
-    
-    //load MongoDb configuration
-    new File("mongodb.yaml").readAsString().then((config) {
-      var mongoConfig = yaml.loadYaml(config);
-      mongoDbManager = new MongoDbManager(
-          "mongodb://${mongoConfig["host"]}/${mongoConfig["database"]}", 
-          poolSize: dbConnections);
-    }),
-    
-    //load fortunes mustache template
+
+    HttpServer.bind("0.0.0.0", 8080, shared: true),
+
     new File('fortunes.mustache').readAsString().then((template) {
       fortunesTemplate = mustache.parse(template);
     })
-    
-  ]).then((_) {
-    
+
+  ]).then((List waitResults) {
+    var server = waitResults[0];
+
     //app.setupConsoleLog();
     
     //install module for dependency injection
@@ -270,7 +260,6 @@ _startServer(serverSocket, dbConnections) {
     app.addPlugin(getMapperPlugin());
     
     //start the server
-    var server = new HttpServer.listenOn(serverSocket);
     app.serveRequests(server);
     
   });