in source/api/services/package/lib/dataset.js [186:257]
dataset.prototype.processPackageDatasetManifest = function(packageId, datasetId, token, ticket, cb) {
accessValidator.validate(packageId, ticket, 'dataset:processPackageDatasetManifest', function(err, data) {
if (err) {
return cb(err, null);
}
let params = {
TableName: ddbTable,
Key: {
package_id: packageId,
dataset_id: datasetId
}
};
let docClient = new AWS.DynamoDB.DocumentClient(dynamoConfig);
docClient.get(params, function(err, dataset) {
if (err) {
console.log(err);
return cb({code: 502, message: "Failed to validade if the user permission."}, null);
}
if (_.isEmpty(dataset)) {
let message;
return cb({code: 404, message: 'The manifest file requested for processing is not found.'}, null);
}
let _dataset = dataset.Item;
if (_dataset.type != 'manifest' || _dataset.state_desc != 'Pending Upload') {
return cb({code: 400, message: 'Invalid request. Dataset is not a manifest file or is in ivalid state.'},null);
}
_dataset.state_desc = 'Processing';
let params = {
TableName: ddbTable,
Item: _dataset
};
docClient.put(params, function(err, data) {
if (err) {
console.log(err);
return cb({code: 502, message: "Failed to save manifest."}, null);
}
let _payload = {
dataset: _dataset,
operation: 'import',
authorizationToken: token
};
// add async invocation to lambda function that processes manifest file
let params = {
FunctionName: 'data-lake-manifest-service',
InvocationType: 'Event',
LogType: 'None',
Payload: JSON.stringify(_payload)
};
let lambda = new AWS.Lambda();
lambda.invoke(params, function(err, data) {
if (err) {
console.log(err);
return cb({code: 502, message: "Error occured when triggering manifest import."}, null);
}
return cb(null, _dataset);
});
});
});
});
};