Skip to content

Commit 4c516ea

Browse files
committed
Merge branch 'master' into task/catch_error_jexl_functions_link
2 parents b06690f + bd1d9b8 commit 4c516ea

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

CHANGES_NEXT_RELEASE

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
- Fix: modified JEXL transformations (toisostring, gettime, parseint, etc.) to return null instead of NaN when some unexpected situation occurs (#1701)
1+
- Add: index for Device model based on {service: 1, subservice: 1, id: 1, apikey: 1} (#1576)
2+
- Fix: Duplicated Devices when burst measures to non provisioned Device (iotagent-json#865)
3+
- Fix: modified JEXL transformations (toisostring, gettime, parseint, etc.) to return null instead of NaN when some unexpected situation occurs (#1701)

lib/model/Device.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ const Device = new Schema({
6161
});
6262

6363
function load() {
64+
Device.index({ service: 1, subservice: 1, apikey: 1, id: 1 }, { unique: true });
6465
module.exports.model = mongoose.model('Device', Device);
6566
module.exports.internalSchema = Device;
6667
}

lib/services/devices/deviceRegistryMongoDB.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ function storeDevice(newDevice, callback) {
9090
if (error.code === 11000) {
9191
logger.debug(context, 'Tried to insert a device with duplicate ID in the database: %s', error);
9292

93-
callback(new errors.DuplicateDeviceId(newDevice));
93+
callback(new errors.DuplicateDeviceId(newDevice), newDevice);
9494
} else {
9595
logger.debug(context, 'Error storing device information: %s', error);
9696

lib/services/devices/deviceService.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ const registrationUtils = require('./registrationUtils');
4040
const subscriptions = require('../ngsi/subscriptionService');
4141
const expressionPlugin = require('./../../plugins/expressionPlugin');
4242
const pluginUtils = require('./../../plugins/pluginUtils');
43+
const alarms = require('../common/alarmManagement');
44+
const constants = require('../../constants');
4345
const _ = require('underscore');
4446
const context = {
4547
op: 'IoTAgentNGSI.DeviceService'
@@ -250,7 +252,7 @@ function registerDevice(deviceObj, callback) {
250252
/* eslint-disable-next-line no-unused-vars */
251253
function (error, device) {
252254
if (!error) {
253-
innerCb(new errors.DuplicateDeviceId(deviceObj));
255+
innerCb(new errors.DuplicateDeviceId(deviceObj), device);
254256
} else {
255257
innerCb();
256258
}
@@ -664,7 +666,14 @@ function findOrCreate(deviceId, apikey, group, callback) {
664666
if (group.autoprovision === undefined || group.autoprovision === true) {
665667
logger.debug(context, 'Registering autoprovision of Device %j for its conf %j', newDevice, group);
666668
registerDevice(newDevice, function (error, device) {
667-
callback(error, device, group);
669+
if (error && error.name === 'DUPLICATE_DEVICE_ID') {
670+
alarms.release(constants.MONGO_ALARM, error);
671+
logger.warn(context, 'Error %j already registered autoprovisioned device: %j ', error, device);
672+
callback(null, device, group);
673+
} else {
674+
logger.debug(context, 'registered autoprovisioned device: %j ', device);
675+
callback(error, device, group);
676+
}
668677
});
669678
} else {
670679
logger.info(

0 commit comments

Comments
 (0)