Просмотр исходного кода

Kill worker and master process if err

Zane Kansil 10 лет назад
Родитель
Сommit
53e8806ccf

+ 4 - 1
frameworks/JavaScript/nodejs/app.js

@@ -8,7 +8,10 @@ if (cluster.isMaster) {
   }
 
   cluster.on('exit', function (worker, code, signal) {
-    console.log('worker ' + worker.pid + ' died');
+  	console.log([
+  	  'A process exit was triggered, most likely due to a failed database action',
+  	  'NodeJS test server shutting down now'].join('\n'));
+    process.exit(1);
   });
 } else {
   // Task for forked worker

+ 3 - 2
frameworks/JavaScript/nodejs/create-server.js

@@ -5,8 +5,9 @@ var http = require('http');
 var parseurl = require('parseurl'); // faster than native nodejs url package
 
 // Initialize routes & their handlers (once)
-var basicHandler = require('./routing').BasicHandler;
-var queryHandler = require('./routing').QueryHandler;
+var routing = require('./routing')
+var basicHandler = routing.BasicHandler;
+var queryHandler = routing.QueryHandler;
 var routeNotImplemented = require('./helper').responses.routeNotImplemented;
 
 module.exports = http.createServer(function (req, res) {

+ 12 - 9
frameworks/JavaScript/nodejs/handlers/mongodb-raw.js

@@ -1,21 +1,21 @@
 var h = require('../helper');
-var async = require('async')
+var async = require('async');
 var MongoClient = require('mongodb').MongoClient;
 var collections = {
   World: null,
   Fortune: null
 };
 MongoClient.connect('mongodb://127.0.0.1/hello_world?maxPoolSize=5', function (err, db) {
-  if (err) { throw err; }
+  if (err) { return process.exit(1) }
   collections.World = db.collection('world');
   collections.Fortune = db.collection('fortune');
 });
 
+
 function mongodbRandomWorld(callback) {
   collections.World.findOne({
     id: h.randomTfbNumber()
   }, function (err, world) {
-    if (err) { throw err; }
     world._id = undefined; // remove _id from query response
     callback(err, world);
   });
@@ -23,7 +23,6 @@ function mongodbRandomWorld(callback) {
 
 function mongodbGetAllFortunes(callback) {
   collections.Fortune.find().toArray(function (err, fortunes) {
-    if (err) { throw err; }
     callback(err, fortunes);
   })
 }
@@ -34,17 +33,18 @@ function mongodbDriverUpdateQuery(callback) {
   }, [['_id','asc']], {
     $set: {randomNumber: h.randomTfbNumber()}
   }, {}, function (err, world) {
-    if (err) { throw err; }
     world.value._id = undefined; // remove _id from query response
     callback(err, world.value);
   });
 }
 
+
 module.exports = {
 
   SingleQuery: function (req, res) {
     mongodbRandomWorld(function (err, result) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1) }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(result));
     });
@@ -54,7 +54,8 @@ module.exports = {
     var queryFunctions = h.fillArray(mongodbRandomWorld, queries);
 
     async.parallel(queryFunctions, function (err, results) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1) }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(results));
     });
@@ -62,7 +63,8 @@ module.exports = {
 
   Fortunes: function (req, res) {
     mongodbGetAllFortunes(function (err, fortunes) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1) }
+
       fortunes.push(h.ADDITIONAL_FORTUNE);
       fortunes.sort(function (a, b) {
         return a.message.localeCompare(b.message);
@@ -78,7 +80,8 @@ module.exports = {
     var queryFunctions = h.fillArray(mongodbDriverUpdateQuery, queries);
 
     async.parallel(queryFunctions, function (err, results) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1) }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(results));
     });

+ 11 - 6
frameworks/JavaScript/nodejs/handlers/mongoose.js

@@ -35,7 +35,8 @@ module.exports = {
 
   SingleQuery: function (req, res) {
     mongooseRandomWorld(function (err, result) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(result));
     })
@@ -45,7 +46,8 @@ module.exports = {
     var queryFunctions = h.fillArray(mongooseRandomWorld, queries)
 
     async.parallel(queryFunctions, function (err, results) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(results));
     });
@@ -53,7 +55,8 @@ module.exports = {
 
   Fortunes: function (req, res) {
     mongooseGetAllFortunes(function (err, fortunes) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       fortunes.push(h.ADDITIONAL_FORTUNE);
       fortunes.sort(function (a, b) {
         return a.message.localeCompare(b.message);
@@ -69,7 +72,8 @@ module.exports = {
     var selectFunctions = h.fillArray(mongooseRandomWorld, queries);
 
     async.parallel(selectFunctions, function (err, worlds) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       var updateFunctions = [];
 
       for (var i = 0; i < queries; i++) {
@@ -86,10 +90,11 @@ module.exports = {
       }
 
       async.parallel(updateFunctions, function (err, results) {
-        if (err) { throw err; }
+        if (err) { return process.exit(1); }
+
         h.addTfbHeaders(res, 'json');
         // results does not have updated document information
-        // if no err was found and thrown: all updates succeeded
+        // if no err: all updates were successful
         res.end(JSON.stringify(worlds));
       });
     });

+ 15 - 12
frameworks/JavaScript/nodejs/handlers/mysql-raw.js

@@ -23,26 +23,25 @@ var queries = {
 
 function mysqlRandomWorld(callback) {
   connection.query(queries.RANDOM_WORLD, function (err, rows, fields) {
-    if (err) { throw err; }
-    callback(null, rows[0]);
+    callback(err, rows[0]);
   });
 }
 
 function mysqlGetAllFortunes(callback) {
   connection.query(queries.ALL_FORTUNES, function (err, rows, fields) {
-    if (err) { throw err; }
-    callback(null, rows);
+    callback(err, rows);
   })
 }
 
 function mysqlUpdateQuery(callback) {
   connection.query(queries.RANDOM_WORLD, function (err, rows, fields) {
-    if (err) { throw err; }
+    if (err) { return process.exit(1); }
+
     rows[0].randomNumber = h.randomTfbNumber();
     var updateQuery = queries.UPDATE_WORLD(rows);
+
     connection.query(updateQuery, function (err, result) {
-      if (err) { throw err; }
-      callback(null, rows[0]);
+      callback(err, rows[0]);
     });
   });
 }
@@ -51,7 +50,8 @@ module.exports = {
 
   SingleQuery: function (req, res) {
     mysqlRandomWorld(function (err, result) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(result));
     });
@@ -61,7 +61,8 @@ module.exports = {
     var queryFunctions = h.fillArray(mysqlRandomWorld, queries);
 
     async.parallel(queryFunctions, function (err, results) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(results));
     });
@@ -69,7 +70,8 @@ module.exports = {
 
   Fortunes: function (req, res) {
     mysqlGetAllFortunes(function (err, fortunes) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       fortunes.push(h.ADDITIONAL_FORTUNE);
       fortunes.sort(function (a, b) {
         return a.message.localeCompare(b.message);
@@ -78,14 +80,15 @@ module.exports = {
       res.end(h.fortunesTemplate({
         fortunes: fortunes
       }));
-    })
+    });
   },
 
   Updates: function (queries, req, res) {
     var queryFunctions = h.fillArray(mysqlUpdateQuery, queries);
 
     async.parallel(queryFunctions, function (err, results) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(results));
     });

+ 19 - 13
frameworks/JavaScript/nodejs/handlers/redis.js

@@ -1,6 +1,6 @@
 var h = require('../helper');
 var async = require('async');
-// "If hiredis is installed, node_redis will use it by default.
+// "If hiredis [pure C library] is installed, node_redis will use it by default.
 // Otherwise, a pure JavaScript parser will be used."
 // >> hiredis is installed for these tests
 var redis = require('redis');
@@ -8,6 +8,7 @@ var client = redis.createClient();
 
 client.on('error', function (err) {
   console.log('Redis Error: ' + err);
+  process.exit(1);
 });
 
 function redisWorldId(id) {
@@ -18,25 +19,24 @@ function redisRandomWorld(callback) {
   var id = h.randomTfbNumber();
   var redisId = redisWorldId(id);
   client.get(redisId, function (err, worldValue) {
-    if (err) { throw err; }
-    callback(err, {
+    var world = {
       id: id,
       randomNumber: worldValue
-    })
+    }
+    callback(err, world);
   });
 }
 
 function redisSetWorld(world, callback) {
   var redisId = redisWorldId(world.id);
   client.set(redisId, world.randomNumber, function (err, result) {
-    if (err) { throw err; }
     callback(err, world);
   });
 }
 
 function redisGetAllFortunes(callback) {
   client.lrange('fortunes', 0, -1, function (err, fortuneMessages) {
-    if (err) { throw err; }
+    if (err) { return process.exit(1); }
 
     var fortunes = fortuneMessages.map(function (e, i) {
       return { id: i + 1, message: e }
@@ -51,7 +51,8 @@ module.exports = {
   
   SingleQuery: function(req, res) {
     redisRandomWorld(function (err, world) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(world));
     })
@@ -61,7 +62,8 @@ module.exports = {
     var queryFunctions = h.fillArray(redisRandomWorld, queries);
 
     async.parallel(queryFunctions, function (err, worlds) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(worlds));
     })
@@ -69,12 +71,13 @@ module.exports = {
 
   Fortunes: function(req, res) {
     redisGetAllFortunes(function (err, fortunes) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'html');
       fortunes.push(h.ADDITIONAL_FORTUNE);
       fortunes.sort(function (a, b) {
         return a.message.localeCompare(b.message);
-      })
+      });
       res.end(h.fortunesTemplate({
         fortunes: fortunes
       }));
@@ -85,19 +88,22 @@ module.exports = {
     var getFunctions = h.fillArray(redisRandomWorld, queries);
 
     async.parallel(getFunctions, function (err, worlds) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       var updateFunctions = [];
 
       worlds.forEach(function (w) {
         w.id = h.randomTfbNumber();
         updateFunctions.push(function (callback) {
-          if (err) { throw err; }
+          if (err) { return process.exit(1); }
+
           return redisSetWorld(w, callback);
         });
       });
 
       async.parallel(updateFunctions, function (err, updated) {
-        if (err) { throw err; }
+        if (err) { return process.exit(1); }
+
         h.addTfbHeaders(res, 'json');
         res.end(JSON.stringify(updated));
       });

+ 10 - 4
frameworks/JavaScript/nodejs/handlers/sequelize.js

@@ -34,7 +34,8 @@ module.exports = {
 
   SingleQuery: function (req, res) {
     sequelizeRandomWorld(function (err, result) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(result));
     });
@@ -44,7 +45,8 @@ module.exports = {
     var queryFunctions = h.fillArray(sequelizeRandomWorld, queries);
 
     async.parallel(queryFunctions, function (err, results) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       h.addTfbHeaders(res, 'json');
       res.end(JSON.stringify(results));
     });
@@ -52,6 +54,8 @@ module.exports = {
 
   Fortunes: function (req, res) {
     Fortunes.findAll().complete(function (err, fortunes) {
+      if (err) { return process.exit(1); }
+
       fortunes.push(h.ADDITIONAL_FORTUNE);
       fortunes.sort(function (a, b) {
         return a.message.localeCompare(b.message);
@@ -67,7 +71,8 @@ module.exports = {
     var selectFunctions = h.fillArray(sequelizeRandomWorld, queries);
 
     async.parallel(selectFunctions, function (err, worlds) {
-      if (err) { throw err; }
+      if (err) { return process.exit(1); }
+
       var updateFunctions = [];
 
       for (var i = 0; i < queries; i++) {
@@ -80,7 +85,8 @@ module.exports = {
       }
 
       async.parallel(updateFunctions, function (err, updates) {
-        if (err) { throw err; }
+        if (err) { return process.exit(1); }
+
         h.addTfbHeaders(res, 'json');
         res.end(JSON.stringify(updates));
       });

+ 0 - 1
frameworks/JavaScript/nodejs/routing.js

@@ -34,7 +34,6 @@ module.exports.BasicHandler = (function() {
   }
 
   self.has = function(path) {
-    console.log('checked for route')
     return self.routes[path];
   }