Skip to content

Commit

Permalink
add retry mechaninsm
Browse files Browse the repository at this point in the history
  • Loading branch information
verchol committed Apr 4, 2017
1 parent d3ae3c0 commit b5b3161
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 49 deletions.
11 changes: 11 additions & 0 deletions Dockerfile.latest
@@ -0,0 +1,11 @@
# Change latest to your desired node version (https://hub.docker.com/r/library/node/tags/)
FROM node:latest

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/
RUN npm install --silent
COPY . /usr/src/app

CMD [ "npm", "start" ]
100 changes: 54 additions & 46 deletions app.js
Expand Up @@ -256,24 +256,9 @@ var connectionTries = 0;


function handleMongoConnectionState(err) {
console.log('handleMongoConnectionState');

//if (err) {
// connectionTries++;

/*if (connectionTries < 3) {
console.log('Error connecting to database (will retry in 2 seconds): ' + err.toString());
new Prpomise((resolve, reject){
setTimeout(tryConnect, 2000);
return;
}
else {
console.log('number of connection bigger the 3');
process.exit(err);
}*/
// }

checkForMongoTextSearch();
checkForMongoTextSearch();

migroose.needsMigration(function (err, migrationRequired) {

Expand All @@ -293,54 +278,77 @@ function handleMongoConnectionState(err) {
return process.exit();
}

console.log('Starting app.');
console.log('starting app');
startApp();
});

}

const Kefir = require('kefir');
const interval = 2000;
const Promise = require('bluebird');
const retry = require('bluebird-retry')
const MongoClient = require('mongodb').MongoClient;
const chalk = require('chalk');
const debug = require('debug')('app');

function tryConnect(callback) {
console.log('Connecting to database...');
console.log(new Date());
console.log(`connection is ${settings.database.uri}`)
MongoClient.connect(settings.database.uri, callback);

console.log(chalk.green('Connecting to database...'));
console.log(chalk.green(new Date()));
console.log(chalk.green(`connection is ${settings.database.uri}`));

let p, wrapper = {}

try{

p= MongoClient.connect(settings.database.uri,
{connectTimeoutMS:3000, reconnectTries:1, promiseLibrary:Promise});
console.log('!!');

wrapper = new Promise((resolve, reject)=>{
p.then(resolve, reject);
});

mongoose.connection.on('error', function (err) {
console.log('connection on error ${err}');
//callback(err);
console.log(chalk.red(`connection on error ${err}`));
callback(err);
});

mongoose.connection.on('disconnected', function (err) {
console.log(`disconnected from database error : ${err}`);
//callback("error");
callback("error");
});
//if (retryNum < 3)
// throw new Error('number of connection bigger the 3');
}catch(e){
console.log(e + exception);
return Promise.reject();
}
process.on('uncaughtException', function (err) {
debug('uncaughtException: probably due to ' + err);
})

console.log(chalk.green('connection in progress'));
p.then(()=>{
chalk.green('promise resolved ');
},()=>{
chalk.green('promise rejected ');
})
return p;

}
let checkTimeout = ()=>{
console.log('check timeout');
return new Promise((resolve, reject)=>{
setTimeout(1000, ()=>{
console.log('rejected')
return reject();
})
})
}

let startStream = Kefir.repeat((e)=>{
if (e>5) return false;
console.log(`e = ${e}`);
return Kefir.later(1000, e);
}).flatMap((retries)=>{
console.log(`retries ${retries}`)
if (retries<process.env.MOGNO_CONNECT_ATTEPMTS||3)
return Kefir.fromNodeCallback(tryConnect)
});

//startStream.onError((e)=>{throw e});

let everythingOk = startStream.ignoreErrors()
.take(1)
.onValue(handleMongoConnectionState);

startStream.onEnd(()=>{
console.log('cant connect to DB after few retries');
process.exit(1);
let p = retry(tryConnect, { max_tries: 5, interval: 4000,timeout:30000 })
.then(handleMongoConnectionState,()=>{
console.log(chalk.red('we coudnt connect to DB check if its up'));
process.exit();

});
startStream.log();
15 changes: 13 additions & 2 deletions app/tests/mongo.unit.spec.js
@@ -1,5 +1,6 @@
var debug = require('debug')('model->test');
var mongoose = require('mongoose');
const MongoClient = require('mongodb').MongoClient;


var TestSchema = new mongoose.Schema({
Expand All @@ -12,15 +13,25 @@ var TestSchema = new mongoose.Schema({
var Entity = mongoose.model('Test1', TestSchema);
var enitytToSave = new Entity({testField:'test1123232'});
var dbRemote = 'mongodb://admin:hpadmin@ds037415.mongolab.com:37415/hp_mongo';
var db_local = 'mongodb://192.168.99.100:27017/hp_mongo';
var db_local = 'mongodb://192.168.99.101:27017/hp_mongo';
var db_docker = 'mongodb://mongo:27017';

describe('sanity tests', function(done){
beforeEach((done)=>{
if (process.env.MONGO_TESTS)
done();
else
done('test should run ')
done('test will run only when MONGO_TESTS env is confugured')
})
it.only('test only connection', (done)=>{
console.log('test only connection');
let settings = require('../config');
MongoClient.connect(db_local, function(err, db) {
//assert.equal(null, err);
console.log("Connected correctly to server");
done(err);
db.close();
})
})
it('test mongo connection' , function(done){

Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -70,7 +70,7 @@
"connect-assets": "^5.0.1",
"connect-mongo": "^0.8.2",
"cookie-parser": "^1.4.0",
"debug": "^2.2.0",
"debug": "^2.6.3",
"express.oi": "^0.0.19",
"helmet": "^0.11.0",
"i18n": "^0.5.0",
Expand Down

0 comments on commit b5b3161

Please sign in to comment.