Attach cron job to single cluster worker & ensure it is reassigned on crash (CC-64)
parent
16fa17a2d4
commit
4a7b1d60d5
|
@ -60,9 +60,12 @@ const app = express();
|
||||||
|
|
||||||
// setup CORS-middleware
|
// setup CORS-middleware
|
||||||
const corsOptions = {
|
const corsOptions = {
|
||||||
methods: ['GET'],
|
methods: [ 'GET' ],
|
||||||
optionsSuccessStatus: 200,
|
optionsSuccessStatus: 200,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let cronInitialized = false;
|
||||||
|
|
||||||
app.use(cors(corsOptions));
|
app.use(cors(corsOptions));
|
||||||
|
|
||||||
app.use(favicon(path.join(__dirname + '/..', 'public', 'favicon.ico')));
|
app.use(favicon(path.join(__dirname + '/..', 'public', 'favicon.ico')));
|
||||||
|
@ -128,8 +131,8 @@ if (process.env.NODE_ENV === config.test.unit.env || process.env.NODE_ENV === co
|
||||||
const mongoPortAndDB = mongoUri.replace('mongodb://localhost:', '').split('/');
|
const mongoPortAndDB = mongoUri.replace('mongodb://localhost:', '').split('/');
|
||||||
exec(
|
exec(
|
||||||
__dirname + '/apib/dredd/populate-data.sh'
|
__dirname + '/apib/dredd/populate-data.sh'
|
||||||
.concat(' -p ').concat(mongoPortAndDB[0])
|
.concat(' -p ').concat(mongoPortAndDB[ 0 ])
|
||||||
.concat(' -d ').concat(mongoPortAndDB[1]), (err, stdout, stderr) => {
|
.concat(' -d ').concat(mongoPortAndDB[ 1 ]), (err, stdout, stderr) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
error(err.message);
|
error(err.message);
|
||||||
} else {
|
} else {
|
||||||
|
@ -146,26 +149,41 @@ if (process.env.NODE_ENV === config.test.unit.env || process.env.NODE_ENV === co
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
mongoose.connect(config.database.uri + config.database.db, {useNewUrlParser: true}).then((db) => {
|
mongoose.connect(config.database.uri + config.database.db, {useNewUrlParser: true}).then((db) => {
|
||||||
|
let cronWorkerPID;
|
||||||
if (cluster.isMaster) {
|
if (cluster.isMaster) {
|
||||||
// Fork workers
|
// Fork workers
|
||||||
for (let i = 0; i < numWorkers; i++) {
|
for (let i = 0; i < numWorkers; i++) {
|
||||||
|
if (i === 0) {
|
||||||
|
const spawnedWorker = cluster.fork({START_CRON: true});
|
||||||
|
cronWorkerPID = spawnedWorker.process.pid;
|
||||||
|
} else {
|
||||||
cluster.fork();
|
cluster.fork();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
logger(`Master ${process.pid} is running. Forking ${numWorkers} workers`);
|
logger(`Master ${process.pid} is running. Forking ${numWorkers} workers`);
|
||||||
|
|
||||||
// Check if worker id is died
|
// Check if worker id is died
|
||||||
cluster.on('exit', (worker, code, signal) => {
|
cluster.on('exit', (worker, code, signal) => {
|
||||||
logger(`worker ${worker.process.pid} died`);
|
logger(`worker ${worker.process.pid} died`);
|
||||||
|
if (worker.process.pid === cronWorkerPID) {
|
||||||
|
const spawnedWorker = cluster.fork({START_CRON: true});
|
||||||
|
cronWorkerPID = spawnedWorker.process.pid;
|
||||||
|
} else {
|
||||||
|
cluster.fork();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
app.listen(config.port, (err) => {
|
app.listen(config.port, (err) => {
|
||||||
if (err !== undefined) {
|
if (err) {
|
||||||
error(`Error on startup ${err}`);
|
error(`Error on startup ${err}`);
|
||||||
} else {
|
} else {
|
||||||
logger(`Worker ${process.pid} started. Listening on port ${config.port}`);
|
logger(`Worker ${process.pid} started. Listening on port ${config.port}`);
|
||||||
|
if (process.env.START_CRON) {
|
||||||
|
logger(`Attaching cronJobs to cluster worker ${process.pid}`);
|
||||||
signatureCronJob.start();
|
signatureCronJob.start();
|
||||||
backupCronJob.start();
|
backupCronJob.start();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue