Skip to content

Commit

Permalink
Merge pull request #3510 from Unitech/dump_refacto
Browse files Browse the repository at this point in the history
Dump refacto
  • Loading branch information
wallet77 committed Mar 5, 2018
2 parents 9f2c4ca + 8951184 commit 674e446
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 11 deletions.
9 changes: 9 additions & 0 deletions bin/pm2
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,15 @@ commander.command('dump')
pm2.dump();
}));

//
// Delete dump file
//
commander.command('cleardump')
.description('Create empty dump file')
.action(failOnUnknown(function() {
pm2.clearDump();
}));

//
// Save processes to file
//
Expand Down
49 changes: 44 additions & 5 deletions lib/API/Startup.js
Original file line number Diff line number Diff line change
Expand Up @@ -371,13 +371,32 @@ module.exports = function(CLI) {
* @return
*/
function fin(err) {

// try to fix issues with empty dump file
// like #3485
if (env_arr.length === 0) {

// fix : if no dump file, no process, only module and after pm2 update
if (!fs.existsSync(cst.DUMP_FILE_PATH)) {
that.clearDump(function(){});
}

// if no process in list don't modify dump file
// process list should not be empty
if(cb) {
return cb(null, {success: true});
} else {
Common.printOut(cst.PREFIX_MSG + 'Nothing to save !!!');
Common.printOut(cst.PREFIX_MSG + 'In this case we keep old dump file. To clear dump file you can delete it manually !');
that.exitCli(cst.SUCCESS_EXIT);
return;
}
}

// Back up dump file
try {
if (fs.existsSync(cst.DUMP_FILE_PATH)) {
if (fs.existsSync(cst.DUMP_BACKUP_FILE_PATH)) {
fs.unlinkSync(cst.DUMP_BACKUP_FILE_PATH);
}
fs.renameSync(cst.DUMP_FILE_PATH, cst.DUMP_BACKUP_FILE_PATH);
fs.copyFileSync(cst.DUMP_FILE_PATH, cst.DUMP_BACKUP_FILE_PATH);
}
} catch (e) {
console.error(e.stack || e);
Expand All @@ -390,8 +409,13 @@ module.exports = function(CLI) {
} catch (e) {
console.error(e.stack || e);
try {
fs.unlinkSync(cst.DUMP_FILE_PATH);
// try to backup file
if(fs.existsSync(cst.DUMP_BACKUP_FILE_PATH)) {
fs.copyFileSync(cst.DUMP_BACKUP_FILE_PATH, cst.DUMP_FILE_PATH);
}
} catch (e) {
// don't keep broken file
fs.unlinkSync(cst.DUMP_FILE_PATH);
console.error(e.stack || e);
}
Common.printOut(cst.PREFIX_MSG_ERR + 'Failed to save dump file in %s', cst.DUMP_FILE_PATH);
Expand All @@ -415,6 +439,21 @@ module.exports = function(CLI) {
});
};

/**
* Remove DUMP_FILE_PATH file and DUMP_BACKUP_FILE_PATH file
* @method dump
* @param {} cb
* @return
*/
CLI.prototype.clearDump = function(cb) {
fs.writeFileSync(cst.DUMP_FILE_PATH, JSON.stringify([]));

if(cb && typeof cb === 'function') return cb();

Common.printOut(cst.PREFIX_MSG + 'Successfully created %s', cst.DUMP_FILE_PATH);
return this.exitCli(cst.SUCCESS_EXIT);
};

/**
* Resurrect processes
* @method resurrect
Expand Down
27 changes: 22 additions & 5 deletions lib/God/ActionMethods.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,13 +137,25 @@ module.exports = function(God) {
}

function fin(err) {

// try to fix issues with empty dump file
// like #3485
if (process_list.length === 0) {

// fix : if no dump file, no process, only module and after pm2 update
if (!fs.existsSync(cst.DUMP_FILE_PATH)) {
that.clearDump(function(){});
}

// if no process in list don't modify dump file
// process list should not be empty
return cb(null, {success:true, process_list: process_list});
}

// Back up dump file
try {
if (fs.existsSync(cst.DUMP_FILE_PATH)) {
if (fs.existsSync(cst.DUMP_BACKUP_FILE_PATH)) {
fs.unlinkSync(cst.DUMP_BACKUP_FILE_PATH);
}
fs.renameSync(cst.DUMP_FILE_PATH, cst.DUMP_BACKUP_FILE_PATH);
fs.copyFileSync(cst.DUMP_FILE_PATH, cst.DUMP_BACKUP_FILE_PATH);
}
} catch (e) {
console.error(e.stack || e);
Expand All @@ -155,8 +167,13 @@ module.exports = function(God) {
} catch (e) {
console.error(e.stack || e);
try {
fs.unlinkSync(cst.DUMP_FILE_PATH);
// try to backup file
if(fs.existsSync(cst.DUMP_BACKUP_FILE_PATH)) {
fs.copyFileSync(cst.DUMP_BACKUP_FILE_PATH, cst.DUMP_FILE_PATH);
}
} catch (e) {
// don't keep broken file
fs.unlinkSync(cst.DUMP_FILE_PATH);
console.error(e.stack || e);
}
}
Expand Down
7 changes: 6 additions & 1 deletion test/programmatic/programmatic.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ describe('PM2 programmatic calls', function() {
});

after(function(done) {
pm2.kill(done);
pm2.delete('all', function(err, ret) {
// clean dump file
pm2.clearDump(function(err) {
pm2.kill(done);
});
});
});

before(function(done) {
Expand Down

0 comments on commit 674e446

Please sign in to comment.