Permalink
Browse files

Add a few safeguards around channel saving

1 parent d21943e commit f6c201f3ba9172a35f3ca1fb0c21477b174c6fd1 @calzoneman committed Dec 20, 2016
Showing with 26 additions and 8 deletions.
  1. +5 −0 index.js
  2. +1 −1 package.json
  3. +11 −2 src/bgtask.js
  4. +9 −5 src/server.js
View
@@ -126,3 +126,8 @@ if (Config.get("service-socket.enabled")) {
var server = new ServiceSocket;
server.init(handleLine, Config.get("service-socket.socket"));
}
+
+require("bluebird");
+process.on("unhandledRejection", function (reason, promise) {
+ Logger.errlog.log("[SEVERE] Unhandled rejection: " + reason.stack);
+});
View
@@ -2,7 +2,7 @@
"author": "Calvin Montgomery",
"name": "CyTube",
"description": "Online media synchronizer and chat",
- "version": "3.25.1",
+ "version": "3.25.2",
"repository": {
"url": "http://github.com/calzoneman/sync"
},
View
@@ -63,15 +63,24 @@ function initChannelDumper(Server) {
* 60000;
setInterval(function () {
var wait = CHANNEL_SAVE_INTERVAL / Server.channels.length;
+ Logger.syslog.log(`Saving channels with delay ${wait}`);
Promise.reduce(Server.channels, (_, chan) => {
return Promise.delay(wait).then(() => {
+ if (chan.name === 'test')
+ throw new TypeError('Whoops fucked up there');
if (!chan.dead && chan.users && chan.users.length > 0) {
- return chan.saveState().catch(err => {
+ return chan.saveState().tap(() => {
+ Logger.syslog.log(`Saved /r/${chan.name}`);
+ }).catch(err => {
Logger.errlog.log(`Failed to save /r/${chan.name}: ${err.stack}`);
});
}
+ }).catch(error => {
+ Logger.errlog.log(`Failed to save channel: ${error.stack}`);
});
- }, 0);
+ }, 0).catch(error => {
+ Logger.errlog.log(`Failed to save channels: ${error.stack}`);
+ });
}, CHANNEL_SAVE_INTERVAL);
}
View
@@ -319,11 +319,15 @@ Server.prototype.setAnnouncement = function (data) {
Server.prototype.shutdown = function () {
Logger.syslog.log("Unloading channels");
Promise.map(this.channels, channel => {
- return channel.saveState().tap(() => {
- Logger.syslog.log(`Saved /r/${channel.name}`);
- }).catch(err => {
- Logger.errlog.log(`Failed to save /r/${channel.name}: ${err.stack}`);
- });
+ try {
+ return channel.saveState().tap(() => {
+ Logger.syslog.log(`Saved /r/${channel.name}`);
+ }).catch(err => {
+ Logger.errlog.log(`Failed to save /r/${channel.name}: ${err.stack}`);
+ });
+ } catch (error) {
+ Logger.errlog.log(`Failed to save channel: ${error.stack}`);
+ }
}, { concurrency: 5 }).then(() => {
Logger.syslog.log("Goodbye");
process.exit(0);

0 comments on commit f6c201f

Please sign in to comment.