Skip to content

Commit

Permalink
Update Nuve MongoDB client (lynckia#1670)
Browse files Browse the repository at this point in the history
  • Loading branch information
jcague authored Jan 13, 2021
1 parent dddc6fb commit a9a29f8
Show file tree
Hide file tree
Showing 12 changed files with 171 additions and 139 deletions.
22 changes: 17 additions & 5 deletions nuve/nuveAPI/mdb/dataBase.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
/* global require, exports */

// eslint-disable-next-line import/no-extraneous-dependencies
const mongojs = require('mongojs');
const { MongoClient, ObjectId } = require('mongodb');

// eslint-disable-next-line import/no-unresolved
const config = require('./../../../licode_config');

config.nuve = config.nuve || {};
config.nuve.dataBaseURL = config.nuve.dataBaseURL || 'localhost/nuvedb';
config.nuve.dataBaseURL = config.nuve.dataBaseURL || 'mongodb://localhost/nuvedb';
config.nuve.dataBaseName = config.nuve.dataBaseName || 'nuvedb';
config.nuve.superserviceID = config.nuve.superserviceID || '';
config.nuve.superserviceKey = config.nuve.superserviceKey || '';
config.nuve.testErizoController = config.nuve.testErizoController || 'localhost:8080';
Expand Down Expand Up @@ -35,9 +36,20 @@ const databaseUrl = config.nuve.dataBaseURL;
* };
*
*/
const collections = ['rooms', 'tokens', 'services', 'erizoControllers'];

exports.db = mongojs(databaseUrl, collections);
// Create a new MongoClient
exports.client = new MongoClient(databaseUrl, { useUnifiedTopology: true });

// Use connect method to connect to the Server
exports.client.connect((err) => {
if (err) {
// eslint-disable-next-line no-console
console.log('Error connecting to MongoDB server', databaseUrl, err);
return;
}
exports.db = exports.client.db(config.nuve.dataBaseName);
});

exports.ObjectId = ObjectId;

// Superservice ID
exports.superService = config.nuve.superserviceID;
Expand Down
20 changes: 9 additions & 11 deletions nuve/nuveAPI/mdb/erizoControllerRegistry.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
/* global require, exports */


const db = require('./dataBase').db;
const dataBase = require('./dataBase');

const logger = require('./../logger').logger;

// Logger
const log = logger.getLogger('ErizoControllerRegistry');

exports.getErizoControllers = (callback) => {
db.erizoControllers.find({}).toArray((err, erizoControllers) => {
dataBase.db.collection('erizoControllers').find({}).toArray((err, erizoControllers) => {
if (err || !erizoControllers) {
log.info('message: service getList empty');
} else {
Expand All @@ -19,7 +18,7 @@ exports.getErizoControllers = (callback) => {
};

const getErizoController = (id, callback) => {
db.erizoControllers.findOne({ _id: db.ObjectId(id) }, (err, erizoController) => {
dataBase.db.collection('erizoControllers').findOne({ _id: dataBase.ObjectId(id) }, (err, erizoController) => {
if (erizoController === undefined) {
log.warn(`message: getErizoController - ErizoController not found, Id: ${id}`);
}
Expand All @@ -46,9 +45,9 @@ exports.hasErizoController = hasErizoController;
* Adds a new ErizoController to the data base.
*/
exports.addErizoController = (erizoController, callback) => {
db.erizoControllers.save(erizoController, (error, saved) => {
dataBase.db.collection('erizoControllers').insertOne(erizoController, (error, saved) => {
if (error) log.warn(`message: addErizoController error, ${logger.objectToLog(error)}`);
callback(saved);
callback(saved.ops[0]);
});
};

Expand All @@ -57,13 +56,13 @@ exports.addErizoController = (erizoController, callback) => {
* Updates a determined ErizoController
*/
exports.updateErizoController = (id, erizoController) => {
db.erizoControllers.update({ _id: db.ObjectId(id) }, { $set: erizoController }, (error) => {
dataBase.db.collection('erizoControllers').updateOne({ _id: dataBase.ObjectId(id) }, { $set: erizoController }, (error) => {
if (error) log.warn(`message: updateErizoController error, ${logger.objectToLog(error)}`);
});
};

exports.incrementKeepAlive = (id) => {
db.erizoControllers.update({ _id: db.ObjectId(id) }, { $inc: { keepAlive: 1 } }, (error) => {
dataBase.db.collection('erizoControllers').updateOne({ _id: dataBase.ObjectId(id) }, { $inc: { keepAlive: 1 } }, (error) => {
if (error) log.warn(`message: updateErizoController error, ${logger.objectToLog(error)}`);
});
};
Expand All @@ -74,10 +73,9 @@ exports.incrementKeepAlive = (id) => {
exports.removeErizoController = (id) => {
hasErizoController(id, (hasEC) => {
if (hasEC) {
db.erizoControllers.remove({ _id: db.ObjectId(id) }, (error) => {
dataBase.db.collection('erizoControllers').deleteOne({ _id: dataBase.ObjectId(id) }, (error) => {
if (error) {
log.warn('message: removeErizoController error, ',
`${logger.objectToLog(error)}`);
log.warn('message: removeErizoController error, ', logger.objectToLog(error));
}
});
}
Expand Down
75 changes: 44 additions & 31 deletions nuve/nuveAPI/mdb/roomRegistry.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
/* global require, exports, ObjectId */
/* global require, exports */


const db = require('./dataBase').db;
const dataBase = require('./dataBase');

const logger = require('./../logger').logger;

// Logger
const log = logger.getLogger('RoomRegistry');

exports.getRooms = (callback) => {
db.rooms.find({}).toArray((err, rooms) => {
dataBase.db.collection('rooms').find({}).toArray((err, rooms) => {
if (err || !rooms) {
log.info('message: rooms list empty');
} else {
Expand All @@ -19,7 +19,7 @@ exports.getRooms = (callback) => {
};

const getRoom = (id, callback) => {
db.rooms.findOne({ _id: db.ObjectId(id) }, (err, room) => {
dataBase.db.collection('rooms').findOne({ _id: dataBase.ObjectId(id) }, (err, room) => {
if (room === undefined) {
log.warn(`message: getRoom - Room not found, roomId: ${id}`);
}
Expand All @@ -46,42 +46,55 @@ exports.hasRoom = hasRoom;
* Adds a new room to the data base.
*/
exports.addRoom = (room, callback) => {
db.rooms.save(room, (error, saved) => {
dataBase.db.collection('rooms').insertOne(room, (error, saved) => {
if (error) log.warn(`message: addRoom error, ${logger.objectToLog(error)}`);
callback(saved);
callback(saved.ops[0]);
});
};

/* eslint-disable */
exports.assignErizoControllerToRoom = function(room, erizoControllerId, callback) {
return db.eval(function(id, erizoControllerId) {
var erizoController;
var room = db.rooms.findOne({_id: new ObjectId(id)});
if (!room) {
return erizoController;
}
exports.assignErizoControllerToRoom = function(inputRoom, erizoControllerId, callback) {
const session = dataBase.client.startSession();
let erizoController;

// Step 2: Optional. Define options to use for the transaction
const transactionOptions = {
readPreference: 'primary',
readConcern: { level: 'local' },
writeConcern: { w: 'majority' }
};

// Step 3: Use withTransaction to start a transaction, execute the callback, and commit (or abort on error)
// Note: The callback for withTransaction MUST be async and/or return a Promise.
try {
session.withTransaction(async () => {
const room = await dataBase.db.collection('rooms').findOne({_id: dataBase.ObjectId(inputRoom._id)});
if (!room) {
return;
}

if (room.erizoControllerId) {
erizoController = db.erizoControllers.findOne({_id: room.erizoControllerId});
if (erizoController) {
return erizoController;
if (room.erizoControllerId) {
erizoController = await dataBase.db.collection('erizoControllers').findOne({_id: room.erizoControllerId});
if (erizoController) {
return;
}
}
}

erizoController = db.erizoControllers.findOne({_id: new ObjectId(erizoControllerId)});
erizoController = await dataBase.db.collection('erizoControllers').findOne({_id: dataBase.ObjectId(erizoControllerId)});

if (erizoController) {
room.erizoControllerId = new ObjectId(erizoControllerId);
if (erizoController) {
room.erizoControllerId = dataBase.ObjectId(erizoControllerId);

db.rooms.save( room );
}
return erizoController;
}, room._id + '', erizoControllerId + '', function(error, erizoController) {
if (error) log.warn('message: assignErizoControllerToRoom error, ' + logger.objectToLog(error));
if (callback) {
await dataBase.db.collection('rooms').updateOne( { _id: room._id }, { $set: room } );
}
}, transactionOptions).then(() => {
callback(erizoController);
}
});
}).catch((err) => {
log.error('message: assignErizoControllerToRoom error, ' + logger.objectToLog(err));
});
} finally {
session.endSession();
}
};

/* eslint-enable */
Expand All @@ -90,7 +103,7 @@ exports.assignErizoControllerToRoom = function(room, erizoControllerId, callback
* Updates a determined room
*/
exports.updateRoom = (id, room, callback) => {
db.rooms.update({ _id: db.ObjectId(id) }, room, (error) => {
dataBase.db.collection('rooms').replaceOne({ _id: dataBase.ObjectId(id) }, room, (error) => {
if (error) log.warn(`message: updateRoom error, ${logger.objectToLog(error)}`);
if (callback) callback(error);
});
Expand All @@ -102,7 +115,7 @@ exports.updateRoom = (id, room, callback) => {
exports.removeRoom = (id) => {
hasRoom(id, (hasR) => {
if (hasR) {
db.rooms.remove({ _id: db.ObjectId(id) }, (error) => {
dataBase.db.collection('rooms').deleteOne({ _id: dataBase.ObjectId(id) }, (error) => {
if (error) {
log.warn(`message: removeRoom error, ${logger.objectToLog(error)}`);
}
Expand Down
16 changes: 8 additions & 8 deletions nuve/nuveAPI/mdb/serviceRegistry.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* global require, exports */

const db = require('./dataBase').db;
const dataBase = require('./dataBase');
const logger = require('./../logger').logger;

// Logger
Expand All @@ -10,7 +10,7 @@ const log = logger.getLogger('ServiceRegistry');
* Gets a list of the services in the data base.
*/
exports.getList = (callback) => {
db.services.find({}).toArray((err, services) => {
dataBase.db.collection('services').find({}).toArray((err, services) => {
if (err || !services) {
log.info('message: service getList empty');
} else {
Expand All @@ -20,7 +20,7 @@ exports.getList = (callback) => {
};

const getService = (id, callback) => {
db.services.findOne({ _id: db.ObjectId(id) }, (err, service) => {
dataBase.db.collection('services').findOne({ _id: dataBase.ObjectId(id) }, (err, service) => {
if (service === undefined) {
log.info(`message: getService service not found, serviceId ${id}`);
}
Expand Down Expand Up @@ -50,17 +50,17 @@ exports.hasService = hasService;
exports.addService = (service, callback) => {
// eslint-disable-next-line no-param-reassign
service.rooms = [];
db.services.save(service, (error, saved) => {
dataBase.db.collection('services').insertOne(service, (error, saved) => {
if (error) log.info(`message: addService error, ${logger.objectToLog(error)}`);
callback(saved._id);
callback(saved.insertedId);
});
};

/*
* Updates a service in the data base.
*/
exports.updateService = (service, callback) => {
db.services.save(service, (error) => {
dataBase.db.collection('services').replaceOne({ _id: dataBase.ObjectId(service._id) }, service, (error) => {
if (error) log.info(`message: updateService error, ${logger.objectToLog(error)}`);
if (callback) callback();
});
Expand All @@ -70,7 +70,7 @@ exports.updateService = (service, callback) => {
* Updates a service in the data base with a new room.
*/
exports.addRoomToService = (service, room, callback) => {
db.services.update({ _id: db.ObjectId(service._id) }, { $addToSet: { rooms: room } },
dataBase.db.collection('services').updateOne({ _id: dataBase.ObjectId(service._id) }, { $addToSet: { rooms: room } },
(error) => {
if (error) log.info(`message: updateService error, ${logger.objectToLog(error)}`);
if (callback) callback();
Expand All @@ -83,7 +83,7 @@ exports.addRoomToService = (service, room, callback) => {
exports.removeService = (id) => {
hasService(id, (hasS) => {
if (hasS) {
db.services.remove({ _id: db.ObjectId(id) }, (error) => {
dataBase.db.collection('services').deleteOne({ _id: dataBase.ObjectId(id) }, (error) => {
if (error) log.info(`message: removeService error, ${logger.objectToLog(error)}`);
});
}
Expand Down
16 changes: 8 additions & 8 deletions nuve/nuveAPI/mdb/tokenRegistry.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/* eslint-disable no-param-reassign */


const db = require('./dataBase').db;
const dataBase = require('./dataBase');

const logger = require('./../logger').logger;

Expand All @@ -14,7 +14,7 @@ const log = logger.getLogger('TokenRegistry');
* Gets a list of the tokens in the data base.
*/
exports.getList = (callback) => {
db.tokens.find({}).toArray((err, tokens) => {
dataBase.db.collection('tokens').find({}).toArray((err, tokens) => {
if (err || !tokens) {
log.info('message: token getList empty');
} else {
Expand All @@ -24,7 +24,7 @@ exports.getList = (callback) => {
};

const getToken = (id, callback) => {
db.tokens.findOne({ _id: db.ObjectId(id) }, (err, token) => {
dataBase.db.collection('tokens').findOne({ _id: dataBase.ObjectId(id) }, (err, token) => {
if (token == null) {
token = undefined;
log.info(`message: getToken token not found, tokenId: ${id}`);
Expand Down Expand Up @@ -53,12 +53,12 @@ exports.hasToken = hasToken;
* Adds a new token to the data base.
*/
exports.addToken = (token, callback) => {
db.tokens.save(token, (error, saved) => {
dataBase.db.collection('tokens').insertOne(token, (error, saved) => {
if (error) {
log.warn('message: addToken error,', logger.objectToLog(error));
return callback(null, true);
}
return callback(saved._id, false);
return callback(saved.insertedId, false);
});
};

Expand All @@ -68,7 +68,7 @@ exports.addToken = (token, callback) => {
const removeToken = (id, callback) => {
hasToken(id, (hasT) => {
if (hasT) {
db.tokens.remove({ _id: db.ObjectId(id) }, (error) => {
dataBase.db.collection('tokens').deleteOne({ _id: dataBase.ObjectId(id) }, (error) => {
if (error) {
log.warn('message: removeToken error,', logger.objectToLog(error));
}
Expand All @@ -84,7 +84,7 @@ exports.removeToken = removeToken;
* Updates a determined token in the data base.
*/
exports.updateToken = (token) => {
db.tokens.save(token, (error) => {
dataBase.db.collection('tokens').replaceOne({ _id: dataBase.ObjectId(token._id) }, token, (error) => {
if (error) log.warn('message: updateToken error,', logger.objectToLog(error));
});
};
Expand All @@ -94,7 +94,7 @@ exports.removeOldTokens = () => {
let tokenTime;
let dif;

db.tokens.find({ use: { $exists: false } }).toArray((err, tokens) => {
dataBase.db.collection('tokens').find({ use: { $exists: false } }).toArray((err, tokens) => {
if (err || !tokens) {
log.warn('message: error removingOldTokens or no tokens present');
} else {
Expand Down
4 changes: 2 additions & 2 deletions nuve/nuveAPI/test/mdb/dataBase.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ describe('DataBase', () => {
db = require('../../mdb/dataBase');
});

it('should contain a db', () => {
expect(db).to.have.property('db');
it('should contain a client', () => {
expect(db).to.have.property('client');
});

it('should contain a superService', () => {
Expand Down
Loading

0 comments on commit a9a29f8

Please sign in to comment.