Mobrovac has submitted this change and it was merged.

Change subject: Update restbase to 10d7242
......................................................................


Update restbase to 10d7242

Simple rebuild to include service-runner v0.2.3

List of changes:
xxxxxxx Update node module dependencies

Change-Id: Id74eff2b41937750ec5703a537ef018bc43d4e95
---
M 
node_modules/preq/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json
M node_modules/service-runner/lib/logger.js
M 
node_modules/service-runner/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
M 
node_modules/service-runner/node_modules/js-yaml/node_modules/esprima/package.json
M node_modules/service-runner/package.json
M node_modules/service-runner/service-runner.js
M 
node_modules/swagger-router/node_modules/js-yaml/node_modules/esprima/package.json
7 files changed, 130 insertions(+), 57 deletions(-)

Approvals:
  Mobrovac: Verified; Looks good to me, approved



diff --git 
a/node_modules/preq/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json
 
b/node_modules/preq/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json
index 2b7593c..add87ed 100644
--- 
a/node_modules/preq/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json
+++ 
b/node_modules/preq/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json
@@ -49,6 +49,5 @@
   ],
   "directories": {},
   "_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
-  "_resolved": 
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz";,
-  "scripts": {}
+  "_resolved": 
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz";
 }
diff --git a/node_modules/service-runner/lib/logger.js 
b/node_modules/service-runner/lib/logger.js
index ed436a7..9de9092 100644
--- a/node_modules/service-runner/lib/logger.js
+++ b/node_modules/service-runner/lib/logger.js
@@ -167,5 +167,14 @@
     }
 };
 
+Logger.prototype.close = function() {
+    var self = this;
+    self._logger.streams.filter(function(stream) {
+        return stream.type === 'file';
+    }).forEach(function(stream) {
+        stream.stream.end();
+    });
+};
+
 
 module.exports = Logger;
diff --git 
a/node_modules/service-runner/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
 
b/node_modules/service-runner/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
index 2ae619b..420a206 100644
--- 
a/node_modules/service-runner/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
+++ 
b/node_modules/service-runner/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
@@ -30,7 +30,7 @@
     "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
     "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
   },
-  "_from": "inherits@2",
+  "_from": "inherits@^2.0.1",
   "_npmVersion": "1.3.8",
   "_npmUser": {
     "name": "isaacs",
diff --git 
a/node_modules/service-runner/node_modules/js-yaml/node_modules/esprima/package.json
 
b/node_modules/service-runner/node_modules/js-yaml/node_modules/esprima/package.json
index 50fe250..77d6cab 100644
--- 
a/node_modules/service-runner/node_modules/js-yaml/node_modules/esprima/package.json
+++ 
b/node_modules/service-runner/node_modules/js-yaml/node_modules/esprima/package.json
@@ -88,6 +88,5 @@
   },
   "directories": {},
   "_shasum": "609ac5c2667eae5433b41eb9ecece2331b41498f",
-  "_resolved": "https://registry.npmjs.org/esprima/-/esprima-2.0.0.tgz";,
-  "readme": "ERROR: No README data found!"
+  "_resolved": "https://registry.npmjs.org/esprima/-/esprima-2.0.0.tgz";
 }
diff --git a/node_modules/service-runner/package.json 
b/node_modules/service-runner/package.json
index d2324fb..6e3b41c 100644
--- a/node_modules/service-runner/package.json
+++ b/node_modules/service-runner/package.json
@@ -1,6 +1,6 @@
 {
   "name": "service-runner",
-  "version": "0.2.2",
+  "version": "0.2.3",
   "description": "Generic nodejs service supervisor / cluster runner",
   "main": "service-runner.js",
   "bin": {
@@ -49,9 +49,9 @@
     "mocha-lcov-reporter": "0.0.1",
     "coveralls": "2.11.2"
   },
-  "gitHead": "f129942af8a224cbc34f1df75f1b0e8f6a1ba2be",
-  "_id": "service-runner@0.2.2",
-  "_shasum": "6ff45871b24a75cb37f3d8497b9b05e41a692078",
+  "gitHead": "ad47cbfc1c2b0f6f76c21fd1eb1d3e624842dff1",
+  "_id": "service-runner@0.2.3",
+  "_shasum": "0a6f1f5da75871855ef77fda621e6ba5fa5beaca",
   "_from": "service-runner@^0.2.0",
   "_npmVersion": "1.4.28",
   "_npmUser": {
@@ -69,9 +69,9 @@
     }
   ],
   "dist": {
-    "shasum": "6ff45871b24a75cb37f3d8497b9b05e41a692078",
-    "tarball": 
"http://registry.npmjs.org/service-runner/-/service-runner-0.2.2.tgz";
+    "shasum": "0a6f1f5da75871855ef77fda621e6ba5fa5beaca",
+    "tarball": 
"http://registry.npmjs.org/service-runner/-/service-runner-0.2.3.tgz";
   },
   "directories": {},
-  "_resolved": 
"https://registry.npmjs.org/service-runner/-/service-runner-0.2.2.tgz";
+  "_resolved": 
"https://registry.npmjs.org/service-runner/-/service-runner-0.2.3.tgz";
 }
diff --git a/node_modules/service-runner/service-runner.js 
b/node_modules/service-runner/service-runner.js
index cb27ab9..ac4923a 100755
--- a/node_modules/service-runner/service-runner.js
+++ b/node_modules/service-runner/service-runner.js
@@ -52,14 +52,31 @@
 
 ServiceRunner.prototype.run = function run(conf) {
     var self = this;
-    return this.updateConfig(conf)
+    var configUpdateAction;
+    if (cluster.isMaster) {
+        configUpdateAction = self.updateConfig(conf);
+    } else {
+        configUpdateAction = new Promise(function(resolve, reject) {
+            var timeout = setTimeout(function() {
+                reject(new Error('Timeout waiting for config in worker ' + 
process.pid));
+            }, 3000);
+            process.on('message', function(message) {
+                if (message.type === 'config') {
+                    clearTimeout(timeout);
+                    self.updateConfig(message.body)
+                    .then(resolve);
+                } else {
+                    reject(new Error('Invalid message received: ' + 
JSON.stringify(message)));
+                }
+            });
+        });
+    }
+    return configUpdateAction
     .then(function() {
         var config = self.config;
-        var name = config.package && config.package.name || 'service-runner';
-
         // display the version
         if (self.options.displayVersion) {
-            console.log(name + ' ' + config.package.version);
+            console.log(config.serviceName + ' ' + config.package.version);
             process.exit(0);
         }
 
@@ -69,18 +86,9 @@
             return docker(self.options, self.config);
         }
 
-        // Set up the logger
-        if (!config.logging.name) {
-            config.logging.name = name;
-        }
         self._logger = new Logger(config.logging);
 
-        // And the statsd client
-        if (!config.metrics.name) {
-            config.metrics.name = name;
-        }
-
-        if (cluster.isMaster && config.num_workers > 0) {
+        if (cluster.isMaster && self.config.num_workers > 0) {
             return self._runMaster();
         } else {
             return self._runWorker();
@@ -105,44 +113,89 @@
     return conf;
 };
 
-ServiceRunner.prototype.updateConfig = function updateConfig(conf) {
-    var self = this;
-    if (conf) {
-        self.config = this._sanitizeConfig(conf, self.options);
-        return P.resolve(conf);
-    } else {
-        var package_json = {};
-        try {
-            package_json = require(self._basePath + '/' + 'package.json');
-        } catch (e) {}
 
+/**
+ * Loads the config from file, serialized input or Object
+ *
+ * @param conf a configuration.
+ *             If undefined - config is loaded from config.yaml file
+ *             If Object - treated as already parsed configuration
+ *             If sting - treated a serialized yaml config
+ */
+ServiceRunner.prototype.loadConfig = function loadConfig(conf) {
+    var self = this;
+    var action;
+    if (conf && conf instanceof Object) {
+        // Ready config object, no need to load from FS or parse yaml
+        action = P.resolve(conf);
+    } else if (conf && typeof conf === 'string') {
+        // Yaml source provided as config string
+        action = P.try(function() {
+            return yaml.safeLoad(conf);
+        });
+    } else {
+        // No config provided - load from file and parse yaml.
         var configFile = this.options.configFile;
         if (/^\./.test(configFile)) {
             // resolve relative paths
             configFile = path.resolve(self._basePath + '/' + configFile);
         }
-        return fs.readFileAsync(configFile)
+        action = fs.readFileAsync(configFile)
         .then(function(yamlSource) {
-            self.config = self._sanitizeConfig(yaml.safeLoad(yamlSource),
-                    self.options);
-
-            // Make sure we have a sane config object by pulling in
-            // package.json info if necessary
-            var config = self.config;
-            config.package = package_json;
-            if (config.info) {
-                // for backwards compat
-                var pack = config.package;
-                pack.name = config.info.name || pack.name;
-                pack.description = config.info.description || pack.description;
-                pack.version = config.version || pack.version;
-            }
-        })
-        .catch(function(e) {
-            console.error('Error while reading config file: ' + e);
-            process.exit(1);
+            return yaml.safeLoad(yamlSource);
         });
     }
+
+    var package_json = {};
+    try {
+        package_json = require(self._basePath + '/' + 'package.json');
+    } catch (e) {}
+
+    return action.then(function(config) {
+        config = self._sanitizeConfig(config, self.options);
+        config.package = package_json;
+        if (config.info) {
+            // for backwards compat
+            var pack = config.package;
+            pack.name = config.info.name || pack.name;
+            pack.description = config.info.description || pack.description;
+            pack.version = config.version || pack.version;
+        }
+        self.config = config;
+    })
+    .catch(function(e) {
+        console.error('Error while reading config file: ' + e);
+        process.exit(1);
+    });
+};
+
+/**
+ * Updates the config and sets instance properties.
+ *
+ * @param conf a configuration.
+ *             If undefined - config is loaded from config.yaml file
+ *             If Object - treated as already parsed configuration
+ *             If sting - treated a serialized yaml config
+ */
+ServiceRunner.prototype.updateConfig = function updateConfig(conf) {
+    var self = this;
+
+    return self.loadConfig(conf)
+    .then(function() {
+        var config = self.config;
+        var name = config.package && config.package.name || 'service-runner';
+        config.serviceName = name;
+
+        // Set up the logger
+        if (!config.logging.name) {
+            config.logging.name = name;
+        }
+
+        // And the statsd client
+        if (!config.metrics.name) {
+            config.metrics.name = name;
+        }
+    });
 };
 
 ServiceRunner.prototype._checkHeartbeat = function() {
@@ -202,7 +255,15 @@
     process.on('SIGTERM', shutdown_master);
 
     // Set up rolling restarts
-    process.on('SIGHUP', this._rollingRestart.bind(this));
+    process.on('SIGHUP', function() {
+        return self.updateConfig()
+        .then(function() {
+            // Recreate loggers
+            self._logger.close();
+            self._logger = new Logger(self.config.logging);
+        })
+        .then(self._rollingRestart.bind(self));
+    });
 
     return this._startWorkers(this.config.num_workers)
     .then(function(workers) {
@@ -308,6 +369,10 @@
         self._saveBeat(worker);
         return new P(function(resolve) {
             fixCloseDisconnectListeners(worker);
+            worker.send({
+                type: 'config',
+                body: yaml.safeDump(self.config)
+            });
             worker.on('message', function(msg) {
                 if (msg.type === 'startup_finished') {
                     resolve(self._startWorkers(--remainingWorkers));
diff --git 
a/node_modules/swagger-router/node_modules/js-yaml/node_modules/esprima/package.json
 
b/node_modules/swagger-router/node_modules/js-yaml/node_modules/esprima/package.json
index 77d6cab..50fe250 100644
--- 
a/node_modules/swagger-router/node_modules/js-yaml/node_modules/esprima/package.json
+++ 
b/node_modules/swagger-router/node_modules/js-yaml/node_modules/esprima/package.json
@@ -88,5 +88,6 @@
   },
   "directories": {},
   "_shasum": "609ac5c2667eae5433b41eb9ecece2331b41498f",
-  "_resolved": "https://registry.npmjs.org/esprima/-/esprima-2.0.0.tgz";
+  "_resolved": "https://registry.npmjs.org/esprima/-/esprima-2.0.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/236955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id74eff2b41937750ec5703a537ef018bc43d4e95
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/restbase/deploy
Gerrit-Branch: master
Gerrit-Owner: Mobrovac <mobro...@wikimedia.org>
Gerrit-Reviewer: Eevans <eev...@wikimedia.org>
Gerrit-Reviewer: GWicke <gwi...@wikimedia.org>
Gerrit-Reviewer: Mobrovac <mobro...@wikimedia.org>
Gerrit-Reviewer: Ppchelko <ppche...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to